2

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

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) 
4

1 回答 1

2

这个特殊的异常可能是由于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 中删除。

重点:保持类路径干净。

于 2010-04-09T02:07:05.363 回答