Проблемы после переноса jsf 1.2 в jsf 2.2.12

Я перевожу проект с jsf 1.2 на jsf 2.2.12. После успешной сборки я развернул сервер jboss 7 и получил следующее сообщение об ошибке:

14:14:10,255 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-7) MSC00001: Failed to start service jboss.deployment.unit."myproject-war.war".POST_MODULE: org.jboss.msc.service.StartException in service jboss.deployment.unit."myproject-war.war".POST_MODULE: Failed to process phase POST_MODULE of deployment "myproject-war.war"
    at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:119) [jboss-as-server-7.1.1.Final.jar:7.1.1.Final]
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1811) [jboss-msc-1.0.2.GA.jar:1.0.2.GA]
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1746) [jboss-msc-1.0.2.GA.jar:1.0.2.GA]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [rt.jar:1.7.0_80]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [rt.jar:1.7.0_80]
    at java.lang.Thread.run(Thread.java:745) [rt.jar:1.7.0_80]
Caused by: java.lang.RuntimeException: Error getting reflective information for class org.richfaces.taglib.ColumnsTag with ClassLoader ModuleClassLoader for Module "deployment.myproject-war.war:main" from Service Module Loader
    at org.jboss.as.server.deployment.reflect.DeploymentReflectionIndex.getClassIndex(DeploymentReflectionIndex.java:70) [jboss-as-server-7.1.1.Final.jar:7.1.1.Final]
    at org.jboss.as.ee.metadata.MethodAnnotationAggregator.runtimeAnnotationInformation(MethodAnnotationAggregator.java:58)
    at org.jboss.as.ee.component.deployers.InterceptorAnnotationProcessor.handleAnnotations(InterceptorAnnotationProcessor.java:85)
    at org.jboss.as.ee.component.deployers.InterceptorAnnotationProcessor.processComponentConfig(InterceptorAnnotationProcessor.java:70)
    at org.jboss.as.ee.component.deployers.InterceptorAnnotationProcessor.deploy(InterceptorAnnotationProcessor.java:55)
    at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:113) [jboss-as-server-7.1.1.Final.jar:7.1.1.Final]
    ... 5 more
Caused by: java.lang.LinkageError: loader constraint violation in interface itable initialization: when resolving method "javax.faces.webapp.UIComponentClassicTagBase.getParent()Ljavax/servlet/jsp/tagext/Tag;" the class loader (instance of org/jboss/modules/ModuleClassLoader) of the current class, org/richfaces/taglib/ColumnsTag, and the class loader (instance of org/jboss/modules/ModuleClassLoader) for interface javax/servlet/jsp/tagext/Tag have different Class objects for the type ervlet/jsp/tagext/Tag; used in the signature
    at java.lang.Class.getDeclaredFields0(Native Method) [rt.jar:1.7.0_80]
    at java.lang.Class.privateGetDeclaredFields(Class.java:2509) [rt.jar:1.7.0_80]
    at java.lang.Class.getDeclaredFields(Class.java:1819) [rt.jar:1.7.0_80]
    at org.jboss.as.server.deployment.reflect.ClassReflectionIndex.<init>(ClassReflectionIndex.java:57) [jboss-as-server-7.1.1.Final.jar:7.1.1.Final]
    at org.jboss.as.server.deployment.reflect.DeploymentReflectionIndex.getClassIndex(DeploymentReflectionIndex.java:66) [jboss-as-server-7.1.1.Final.jar:7.1.1.Final]
    ... 10 more

14:14:10,286 INFO  [org.jboss.as.server] (management-handler-thread - 2) JBAS015870: Deploy of deployment "myproject-war.war" was rolled back with failure message {"JBAS014671: Failed services" => {"jboss.deployment.unit.\"myproject-war.war\".POST_MODULE" => "org.jboss.msc.service.StartException in service jboss.deployment.unit.\"myproject-war.war\".POST_MODULE: Failed to process phase POST_MODULE of deployment \"myproject-war.war\""}}
14:14:10,484 INFO  [org.jboss.as.server.deployment] (MSC service thread 1-4) JBAS015877: Stopped deployment myproject-war.war in 198ms
14:14:10,486 INFO  [org.jboss.as.controller] (management-handler-thread - 2) JBAS014774: Service status report
JBAS014777:   Services which failed to start:      service jboss.deployment.unit."myproject-war.war".POST_MODULE: org.jboss.msc.service.StartException in service jboss.deployment.unit."myproject-war.war".POST_MODULE: Failed to process phase POST_MODULE of deployment "myproject-war.war"

[2015-09-30 02:14:10,579] Artifact myproject-war:war exploded: Error during artifact deployment. See server log for details.
[2015-09-30 02:14:10,579] Artifact myproject-war:war exploded: java.lang.Exception: {"JBAS014671: Failed services" => {"jboss.deployment.unit.\"myproject-war.war\".POST_MODULE" => "org.jboss.msc.service.StartException in service jboss.deployment.unit.\"myproject-war.war\".POST_MODULE: Failed to process phase POST_MODULE of deployment \"myproject-war.war\""}}

Не могли бы вы иметь представление об этом?

Вот детали моей системы: Сервер: jboss7 Текущие библиотеки: jsf 1.2, richfaces 3.3.3 Миграции библиотеки: jsf 2.2.17 Сборка: maven

С наилучшими пожеланиями,

1 ответ

Решение

Вызвано: java.lang.LinkageError: нарушение ограничения загрузчика при инициализации интерфейса itable: при разрешении метода "javax.faces.webapp.UIComponentClassicTagBase.getParent()Ljavax/servlet/jsp/tagext/Tag;" загрузчик классов (экземпляр org/jboss/modules/ModuleClassLoader) текущего класса, org/richfaces/taglib/ColumnsTag и загрузчик классов (экземпляр org/jboss/modules/ModuleClassLoader) для интерфейса javax / servlet / jsp / tagext / Tag имеют разные объекты Class для типа ervlet / jsp / tagext / Tag; используется в подписи

java.lang.LinkageError является признаком загрязнения пути к классу несколькими версиями библиотек. Лучше всего позволить Maven создать файл WAR, а затем проверить его /WEB-INF/lib для любых библиотек, которые там не принадлежат (т.е. библиотеки, которые, как предполагается, уже предоставлены целевым сервером, такие как Java EE, JSP, Servlet, JSF и т. д. в вашем случае с JBoss AS). Затем исправьте Maven pom.xml соответственно отметить именно те, что provided,

Конкретный, который вы получили, предлагает дублировать javax.servlet.jsp.* API. Вы будете в /WEB-INF/lib скорее всего есть jsp-api.jar или другой JAR, который покрывает это (например, javaee.jar). В этом случае вам нужно отметить именно эту зависимость в pom.xml как provided, Или, если это на самом деле jsp-api, затем просто удалите его и используйте один javaee-api или же javaee-web-api зависимость от версии 6.0 и сфера provided которая охватывает весь Java EE 6 (веб-профиль), точно так же, как это делает JBoss AS 7.

Другие вопросы по тегам