3

我有一个 Web 应用程序 A.war,它有两个 servletAServletBServlet. 两者都实例化了一个辅助类com.mycompany.Foo.class(这是我自己的类,不是第三方库)。

现在我想将两个 servlet 拆分为两个单独的 WAR:A.war 将只有 AServlet,而新的 B.war 将具有BServlet. 将通过 HTTP GETAServlet调用。BServlet两个 WAR 都将具有com.mycompany.Foo.class. 我想在同一个 JBoss 实例上部署两个 WAR。

问题是,由于两个 WAR 中存在相同的类,并且 WAR 部署在同一个 JBoss 实例上,是否会出现任何类加载问题?

4

2 回答 2

1

com.mycompany.Foo.class是的,如果两个 WAR 不完全相同,就会出现问题。在 JBoss 5.1 中,默认情况下,类名是唯一的(统一类加载)。这意味着只能有一个com.mycompany.Foo.class,并且在两个应用程序之间共享。可以禁用此行为。

查看 (JBossClassLoaderHistory)[https://community.jboss.org/wiki/JBossClassLoaderHistory] ​​了解更多信息。

于 2012-11-17T22:11:47.153 回答
1

不,你不应该遇到任何问题。默认情况下,Web 应用程序类加载器的工作方式与 Java2 委托模型不同:当 Web 应用程序首先需要一个类时,它将查找本地存储库(即 web-INF/classes 或 WEB-INF/libs 中的类和库目录)而不是委托。因此,您提出的配置将毫无问题地工作。

但是由于两个战争都包含同一个类,您是否考虑过将这个类打包到一个 jar 中并将其放在 jboss 实例 lib 目录中?这样您就不需要将它包含在您在实例中部署的所有 Web 应用程序中。

在此处查看Jboss 文档

于 2012-11-16T21:51:56.550 回答