Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 并行运行servlet web应用程序的多个版本_Java_Servlets_Version_Osgi - Fatal编程技术网

Java 并行运行servlet web应用程序的多个版本

Java 并行运行servlet web应用程序的多个版本,java,servlets,version,osgi,Java,Servlets,Version,Osgi,我想并行运行多个基于JavaServlet的web应用程序的多个版本(如myapp2.1、myapp2.2…) 一种可能是将每个版本部署到单独的servlet上下文(该上下文应该有自己的类加载器)。但我认为它将很难管理,也不会灵活,因为应用程序是一个相当大的块。如果应用程序包含两个不同版本的服务,该怎么办?也许这不是个好主意 环境将是GlassFish>=3.0 并行运行多个版本的servlet应用程序的更好方法是什么?OSGI能帮上忙吗?每个web应用程序都将使用自己的类加载器(至少是我所知道

我想并行运行多个基于JavaServlet的web应用程序的多个版本(如myapp2.1、myapp2.2…)

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

环境将是GlassFish>=3.0


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

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


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

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


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

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

那么,您希望多个代码相同但名称不同的web应用程序,还是希望在同一个web应用程序中使用不同配置的多个servlet?请使用场景编辑您的问题


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

您只需将部署的war文件命名为application20091230、application20091231、application20100101,然后让Glassfish将其分配给相应的URL即可。如果date不够精细,则可以使用datetime或buildnumber


这就是我们在一个内部测试服务器中拥有多个版本所做的。

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

那么,您希望多个代码相同但名称不同的web应用程序,还是希望在同一个web应用程序中使用不同配置的多个servlet?请使用场景编辑您的问题


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

您只需将部署的war文件命名为application20091230、application20091231、application20100101,然后让Glassfish将其分配给相应的URL即可。如果date不够精细,则可以使用datetime或buildnumber

这就是我们在一个内部测试服务器中拥有多个版本所做的

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

J2EE应用程序使用单独的类加载器层次结构,并且彼此隔离。引述:

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

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

因此,是的,每个webapp都有自己的
类加载器
(感谢上帝)

但我认为这将很难管理,也不会灵活

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

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

J2EE应用程序使用单独的类加载器层次结构,并且彼此隔离。引述:

J2EE类加载器层次结构 J2EE指定 需要类加载器来实现 应用程序之间的隔离,但是 由供应商定义 精确的结构。然而,我们必须遵守 对于J2EE规范,大多数 供应商为每种类型都提供了类加载器 J2EE应用程序组件 取决于它的位置。进一步的 这些类加载器具有层次结构 他们之间,即他们有一个 亲子关系。图21.5 显示了的示例层次结构 类装入器。请注意,每个 应用服务器的类加载器 层次结构可能略有不同。 应用服务器供应商有时 倾向于治疗其中两种或两种以上 类装入器作为一个整体。例如,一个 某些应用服务器可能会 应用程序类加载器和EJB 类加载器必须是相同的。但是 一般的