2011-04-20 84 views
0

我有两个war文件app1.war和app2.war部署在单个JBoss实例中。 Java类两种战争文件包名称与com.myapp开始在JBoss中部署2个带有公共类的war文件

为了进一步增加,有几类,而也有一些具有相同的完全限定类的名字,但有不同的(这是两个应用程序之间的共同源代码已更改)。

我想知道,如果这可能对部署方案构成任何形式的威胁?

回答

0

最好的办法是为您的应用程序归档隔离类加载。

对于JBoss 5.1.0 GA以下为我工作。

  1. 创建的jboss-classloading.xml文件中的WEB-INF文件夹中。
  2. 添加下列行到该文件

这里, 出口所有=“NON_EMPTY” =>确保加载该应用程序的类不会导出 进口所有=“true”=>导入并使用所有可用的类定义。 parent-first =“false”=>如果找到多个具有相同名称的类,则首先使用在该应用程序下定义的一个类。

仅供参考。这也帮助我将log4j的日志配置嵌入到应用程序战争文件中。需要将log4j.xml放在WEB-INF/classes中,并在WEB-INF/lib文件夹中放置一个log4j.jar。

0

如果您的应用程序不是孤立的,即拥有自己的类加载存储库和类加载器,则可能会遇到类加载问题。如果你将JBoss配置为隔离应用程序,你应该没问题(我不知道你的版本默认是什么,但我们使用的4.2.3默认不会隔离应用程序)。

要澄清一点:

如果你有两个班,不同的实现,但同样FQCN你可以得到的类加载器的错误类被加载第二应用。即使实现是相同的,如果一个应用程序从另一个应用程序获取该类,则可以获得类转换异常或其他奇怪行为。

0

我曾与多个apps.Look了类似的情况,在每个应用程序或独立模块我solution here

0

将会有一个类加载器实例。换句话说,app1.war中的类将被加载到与app2.war中的类不同的类加载器中。这是任何Java EE服务器的默认行为;所以,对于具有相同包/名称和/或不同内容的课程而言,这并不重要。这是任何Java EE服务器的默认行为。尽管如此,如果您调整了服务器的类加载器策略,或尝试使用除Thread.currentThread().getContextClassLoader()以外的任何其他类加载类(反映),则可能会出现问题。