可以在一个类加载器中加载多个 jsf wars 吗?

发布于 2024-08-28 01:22:29 字数 409 浏览 10 评论 0原文

我有 3 个安装了 JSF 的 war 文件,3 个面孔配置,当我将它们全部加载到作为 EAR 一部分的一个类加载器中时,它会因初始化错误而失败。像下面这样。似乎 JSF 不喜欢在一个类加载器中加载多次,有人尝试过吗?加载 EAR 3 个 JSF 战争?

java.lang.NullPointerException
    at com.sun.faces.config.processor.ManagedBeanConfigProcessor.process(ManagedBeanConfigProcessor.java:241)
    at com.sun.faces.config.processor.AbstractConfigProcessor.invokeNext(AbstractConfigProcessor.java:108) 

i have 3 war files with JSF installed, 3 faces config, when i make them all load into one class loader that is part of the EAR, it fails on initialization errors. like below. seems like JSF does not like to load multiple times in one classloader, has anyone tried this? to load a EAR with 3 JSF wars?

java.lang.NullPointerException
    at com.sun.faces.config.processor.ManagedBeanConfigProcessor.process(ManagedBeanConfigProcessor.java:241)
    at com.sun.faces.config.processor.AbstractConfigProcessor.invokeNext(AbstractConfigProcessor.java:108) 

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

渡你暖光 2024-09-04 01:22:30

此特定异常可能是由于类路径中缺少 jsf-api.jar 文件或类路径中版本不同的 jsf-api.jar(与WAR 的 jsf-impl.jar,可能是应用服务器提供的。理论上有 3 种方法可以解决此问题:

  1. 摆脱 WAR 中的所有 JSF JAR(jsf-api.jarjsf-impl.jar)并依赖应用程序服务器提供的 JSF 库。
  2. 摆脱 WAR 中的所有 JSF JAR,并仅在 EAR 中提供它们。
  3. 将 WAR 中的所有 JSF JAR 调整为完全相同的 make/version/build。

另一个原因可能是 WAR 包含特定于应用程序服务器的库,而这些库又包含 JSF 类,例如 Glassfish 的 javaee.jar。所有这些特定于应用程序服务器的库也需要从所有 WAR 和 EAR 中删除。

重点是:保持类路径干净。

This particular exception can be caused by either a missing jsf-api.jar file in the classpath, or a different versioned jsf-api.jar in the classpath as opposed to the WAR's jsf-impl.jar, possibly the appserver-provided one. In theory there are 3 ways to fix this problem:

  1. Get rid of all JSF JAR's (jsf-api.jar and jsf-impl.jar) in the WAR's and rely on the JSF libraries provided by the appserver.
  2. Get rid of all JSF JAR's in the WAR's and provide them in EAR only.
  3. Align all JSF JAR's in the WAR's out to be of exactly the same make/version/build.

Another cause can be that the WAR's include appserver-specific libraries which in turn contain the JSF classes, such as Glassfish's javaee.jar. All of those appserver-specific libraries needs to be removed from all WAR's and EAR's as well.

To the point: keep the classpath clean.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文