weblogic 10.3.4 java.lang.ClassNotFoundException: javax.el.ELContextListener - PullRequest
3 голосов
/ 10 августа 2011

У меня есть приложение 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 к /WEB-INF/lib WAR или /APP-INF/lib EAR, тогда я получаю ошибку 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, и у меня есть следующие JAR в /WEB-INF/lib:

  • commons-beanutils-1.7.0.jar
  • commons-collection-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
  • кварц-все-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 ]

2 голосов
/ 21 декабря 2011

Если вы по-прежнему получаете эту ошибку, даже если вы сделали все необходимые изменения, связанные с 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 голосов
/ 21 сентября 2011

Вы можете попробовать использовать фильтрацию загрузчика классов.Файл 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).Вы должны хранить все, что зависит от вашей библиотеки, также в загрузчике приложений, поэтому в этом примере у меня есть лицевые стороны.Надеюсь, это поможет ..

0 голосов
/ 14 июня 2013

Наконец мне удается найти решение.

jsf-impl jar содержит класс " ELContextListenerImpl ", который реализует интерфейс " ELContextListener ". И интерфейс ELContextListener включен в wlfullclient-10.3.X.jar в пути к серверу.

Если в пути к серверу отсутствует wlfullclient jar, у вас будет ошибка " ClassNotFoundException: javax.el.ELContextListener ". Получив эту ошибку, если вы добавите el-api jar на этот раз, вы получите « LinkageError: нарушение ограничения загрузчика », поскольку версии используемых вами jar-файлов и сервера различаются. В любом случае проблема будет решена после создания wlfullclient-10.3.X.jar на сервере weblogic.

Чтобы создать эту банку, вы можете прочитать этот пост: http://wls4mscratch.wordpress.com/2010/06/19/steps-to-build-a-wlfullclient-jar-in-wls-10-0-x-and-wls-10-3-x/

...