你能在一个类加载器中加载多个jsf战争吗?

时间:2010-04-09 00:44:56

标签: jsf classloader ear

我有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) 

1 个答案:

答案 0 :(得分:2)

这个特殊的异常可能是由类路径中缺少的jsf-api.jar文件或类路径中的不同版本jsf-api.jar引起的,而不是WAR的jsf-impl.jar,可能是appserver-提供一个。从理论上讲,有3种方法可以解决这个问题:

  1. 摆脱WAR中的所有JSF JAR(jsf-api.jarjsf-impl.jar)并依赖appserver提供的JSF库。
  2. 摆脱WAR中的所有JSF JAR并仅在EAR中提供它们。
  3. 将WAR中的所有JSF JAR与make / version / build完全相同。
  4. 另一个原因可能是WAR包含特定于appserver的库,而这些库又包含JSF类,例如Glassfish的javaee.jar。所有这些特定于appserver的库都需要从所有WAR和EAR中删除。

    重点:保持类路径清洁。