weblogic 10.3.4 java.lang.ClassNotFoundException:javax.el.E​​LContextListener

时间:2011-08-09 22:13:18

标签: jsf weblogic el

我有一个JSF 1.2应用程序,我打算将其部署到Weblogic 10.3.4。在本地Tomcat环境中,它工作正常。但是当我尝试将其部署到weblogic时,我在ClassNotFoundException上获得了javax.el.ELContextListener。当我添加el-api.jar文件时,我会在LinkageError: loader constraint violation上获得javax.EL.ELResolver。这是一个致命的恶性循环。

起初我尝试将其部署为WAR。然后我创建了一个企业项目,以便我可以部署为EAR,但它没有解决问题。我的EAR文件结构很好。

首先我收到错误,

Caused By: java.lang.ClassNotFoundException: javax.el.ELContextListener
    at weblogic.utils.classloaders.GenericClassLoader.findLocalClass(GenericClassLoader.java:297)
    at weblogic.utils.classloaders.GenericClassLoader.findClass(GenericClassLoader.java:270)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
    at weblogic.utils.classloaders.GenericClassLoader.loadClass(GenericClassLoader.java:179)

当我将el-api-2.2.jar添加到WAR的/WEB-INF/lib或EAR的/APP-INF/lib时,我得到加载程序constarint错误;

com.sun.faces.config.ConfigureListener failed: java.lang.LinkageError: loader constraint violation: when resolving interface method "javax.servlet.jsp.JspApplicationContext.addELResolver(Ljavax/el/ELResolver;)V" the class loader (instance of weblogic/utils/classloaders/GenericClassLoader) of the current class, com/sun/faces/config/ConfigureListener, and the class loader (instance of sun/misc/Launcher$AppClassLoader) for resolved class, javax/servlet/jsp/JspApplicationContext, have different Class objects for the type javax/el/ELResolver used in the signature.
java.lang.LinkageError: loader constraint violation: when resolving interface method "javax.servlet.jsp.JspApplicationContext.addELResolver(Ljavax/el/ELResolver;)V" the class loader (instance of weblogic/utils/classloaders/GenericClassLoader) of the current class, com/sun/faces/config/ConfigureListener, and the class loader (instance of sun/misc/Launcher$AppClassLoader) for resolved class, javax/servlet/jsp/JspApplicationContext, have different Class objects for the type javax/el/ELResolver used in the signature
    at com.sun.faces.config.ConfigureListener.registerELResolverAndListenerWithJsp(ConfigureListener.java:582)
    at com.sun.faces.config.ConfigureListener.contextInitialized(ConfigureListener.java:212)

它有什么问题?我改变了我的类路径顺序,但结果是一样的。我的web.xml被声明为Servlet 2.5,我在/WEB-INF/lib中有以下JAR:

  • commons-beanutils-1.7.0.jar
  • commons-collections-3.2.jar
  • commons-digester-1.8.jar
  • commons-logging-1.0.4.jar
  • darkX-3.3.3.Final.jar
  • glassX-3.3.3.Final.jar
  • jsf-api.jar
  • jsf-impl.jar
  • jstl-1.2.jar
  • laguna-3.3.3.Final.jar
  • log4j-1.2.14.jar
  • poi-3.7-20101029.jar
  • quartz-all-1.8.4.jar
  • richfaces-api-3.3.3.Final.jar
  • richfaces-impl-3.3.3.Final.jar
  • richfaces-ui-3.3.3.Final.jar
  • scjd12.jar
  • slf4j-api-1.6.0.jar
  • slf4j-log4j12-1.6.0.jar
  • themes-3.3.3.Final.jar

3 个答案:

答案 0 :(得分:2)

您可以尝试使用过滤类加载器。 weblogic-application.xml文件可以包含以下内容:

  <prefer-application-packages>
    <package-name>javax.faces.*</package-name>
    <package-name>com.sun.faces.*</package-name>
    <package-name>org.apache.myfaces.*</package-name>
   </prefer-application-packages>

这使WebLogic的过滤类加载器能够阻止您的应用程序看到容器中的JSF(在本例中为javax.faces和myfaces部分)。您需要在应用程序类加载器中保留依赖于库的所有内容,这就是我在此示例中使用facelet的原因。 希望这会有所帮助..

答案 1 :(得分:2)

如果您仍然遇到此错误,即使您执行了与el jars相关的所有必要更改(我的意思是更喜欢应用程序包和weblogic-application.xml中的其他内容等),我认为您的内容有问题web.xml文件。 请检查您的web.xml中是否有以下行。

  <context-param>
    <param-name>com.sun.faces.expressionFactory</param-name>
    <param-value>com.sun.el.ExpressionFactoryImpl</param-value>
  </context-param>

答案 2 :(得分:0)

最后,我找到了解决方案。

jsf-impl jar包含“ ELContextListenerImpl ”类,该类实现“ ELContextListener ”接口。并且ELContextListener接口包含在服务器路径中的 wlfullclient-10.3.X.jar 中。

如果您在服务器路径中没有wlfullclient jar,则会出现“ ClassNotFoundException:javax.el.E​​LContextListener ”错误。如果你这次添加el-api jar会出现这个错误,你会得到“ LinkageError:loader constraint violation ”,因为你使用的jar版本和服务器版本不同。无论如何,在weblogic服务器中创建wlfullclient-10.3.X.jar后,问题将得到解决。

为了创建该jar,您可以阅读以下帖子:http://wls4mscratch.wordpress.com/2010/06/19/steps-to-build-a-wlfullclient-jar-in-wls-10-0-x-and-wls-10-3-x/