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



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

起初我试图将其部署为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时,我会得到加载器约束错误;

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

您可以尝试使用过滤类加载器。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的过滤类加载器能够阻止应用程序在容器(javax. js . js)中看到JSF。Faces和myfaces(在本例中是一部分)。你需要把所有依赖于你的库的东西也放在你的应用程序类加载器中,这就是为什么我在这个例子中有facelets。

如果你仍然得到这个错误,即使你做了所有必要的变化相关的jar(我的意思是首选应用程序包和其他东西在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>

我终于找到了解决办法。

jsf-impl jar包含"ELContextListenerImpl"类,实现了"ELContextListener"接口。ELContextListener接口包含在服务器路径中的wlfullclient-10.3.X.jar中。

如果你在服务器路径中没有wlfullclient jar,你将有"ClassNotFoundException: javax.el"。ELContextListener "错误。得到这个错误,如果你添加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/

相关内容

  • 没有找到相关文章

最新更新