【问题标题】:Running multiple versions of a servlet web application parallel并行运行多个版本的 servlet Web 应用程序
【发布时间】:2011-01-04 06:06:53
【问题描述】:

我想并行运行多个基于 Java Servlet 的 Web 应用程序的多个版本(如 myapp2.1、myapp2.2 ...)。

一种可能是将每个版本部署到单独的 servlet 上下文(应该有自己的类加载器?!)。但我认为这将很难管理并且不会灵活,因为应用程序是一个相当大的块。如果一个应用程序应该包含两个不同版本的服务怎么办?也许这不是一个好主意...

环境将是 GlassFish >= 3.0。

并行运行多个版本的 servlet 应用程序有什么更好的方法? OSGI 能帮上忙吗?

【问题讨论】:

    标签: java servlets version osgi


    【解决方案1】:

    除非您明确将其配置为这样,否则所有 servlet 都是多线程的,并且可以一次调用多次。

    那么,您想要几个具有相同代码但名称不同的 Web 应用程序,还是在同一个 Web 应用程序中具有不同配置的多个 servlet?请使用场景编辑您的问题。


    编辑:您现在已经编辑了问题。

    您可以简单地将您部署的 war 文件命名为 application20091230、application20091231、application20100101,然后让 Glassfish 将其分配给相应的 URL。如果日期不够精细,则可以使用日期时间或内部版本号。

    这就是我们在单个内部测试服务器中拥有多个版本的原因。

    【讨论】:

    • 我的问题与多线程无关。它与应用程序的不同配置和版本有关。
    【解决方案2】:

    一种可能是将每个版本部署到单独的 servlet 上下文(应该有自己的类加载器?!)。

    J2EE 应用程序使用单独的 ClassLoader 层次结构并且彼此隔离。引用Classloaders and J2EE:

    J2EE 类加载器层次结构

    J2EE 指定一个层次结构 需要类加载器来实现 应用程序之间的隔离,但 留给供应商定义 确切的结构。不过要遵守 对于 J2EE 规范,大多数 供应商有每个类加载器 J2EE 应用程序组件 取决于它的位置。进一步, 这些类加载器具有层次结构 他们之间,即他们有一个 亲子关系。图 21.5 显示了一个示例层次结构 类加载器。请注意,每个 应用服务器的类加载器 层次结构可能略有不同。 应用服务器供应商有时 倾向于治疗其中两种或多种 类加载器作为一个。例如,一个 某些应用程序服务器可能会处理 应用程序类加载器和 EJB 类加载器是一样的。但是 层次结构背后的一般概念 保持不变。

    Sample Classloader Hierarchy in J2EE Application Servers http://www.objectsource.com/j2eechapters/Ch21-ClassLoaders_and_J2EE_files/image016.jpg

    图 21.5 J2EE 应用服务器中的示例类加载器层次结构。

    所以,是的,每个 webapp 都会有自己的ClassLoader(感谢上帝)。

    但我认为这将很难管理并且不会灵活。

    为什么难以管理?为什么不灵活?您要并行运行多少个实例?实际上,您要解决什么问题?如果您描述真正的问题,您可能会得到更好的答案。那么,你能详细说明一下吗?

    【讨论】:

      【解决方案3】:

      每个 Web 应用程序都将使用其自己的 ClassLoader 加载(至少是我所知道的任何容器;我无法想象为什么容器不会这样做)。所以,它应该只是工作。不同版本的课程不会相互干扰。

      确保您没有将任何类包含在容器自己的 ClassLoader 中——例如,将 .jar 放入 Tomcat 目录的 lib/ 中(不确定 Glassfish 的等效项)。这将由所有 Web 应用程序共享,并会覆盖 Web 应用程序中的任何内容。

      【讨论】:

      • +1。重申一下:Web 应用程序已经像这样工作了。它们彼此完全分开(就类加载而言)。您可以使用两个不同的名称部署到同一 WAR 的不同版本。
      • 您要注意的是数据库等共享资源。您可能还需要将它们分开,或者可能让所有版本访问同一个数据库,但是您可能会遇到跨版本兼容性问题。
      猜你喜欢
      • 2015-02-02
      • 2017-03-02
      • 1970-01-01
      • 2019-10-31
      • 1970-01-01
      • 1970-01-01
      • 2018-06-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多