Ошибка JBoss AS 7: развертывание WAR завершено, сбой развертывания EAR - PullRequest
2 голосов
/ 06 февраля 2012

Я беру то же самое веб-приложение и без проблем развертываю его как WAR. Однако то же приложение, развернутое как EAR, не работает. Те же файлы, только другое размещение. Сначала посмотрите на WAR:

Webapp.war
.
|-- error.xhtml
|-- index.xhtml
|-- language.xhtml
|-- login.xhtml
|-- META-INF
|-- register.xhtml
|-- resources
|   |-- css
|   |   `-- layout.css
|   |-- images
|   |   `-- logo.png
|   `-- javascript
|       `-- detectScreenSize.js
|-- sendMail.xhtml
|-- templates
|   `-- masterLayout.xhtml
`-- WEB-INF
    |-- beans.xml
    |-- classes
    |   |-- ApplicationResources_es.properties
    |   |-- ApplicationResources.properties
    |   |-- com
    |   |   `-- webapp
    |   |       |-- controller
    |   |       |   |-- auth
    |   |       |   |   |-- ClientInfo.class
    |   |       |   |   |-- LoginModule.class
    |   |       |   |   |-- RBAC.class
    |   |       |   |   |-- SimpleGroup.class
    |   |       |   |   `-- SimplePrincipal.class
    |   |       |   |-- LocaleManager.class
    |   |       |   |-- SendMailBean.class
    |   |       |   |-- UserRegistration.class
    |   |       |   `-- UserRemoval.class
    |   |       |-- data
    |   |       |   `-- UserListProducer.class
    |   |       |-- exception
    |   |       |   |-- ViewExpiredExceptionExceptionHandler.class
    |   |       |   `-- ViewExpiredExceptionExceptionHandlerFactory.class
    |   |       |-- model
    |   |       |   |-- Entity.class
    |   |       |   |-- LoginHistory.class
    |   |       |   |-- Role.class
    |   |       |   |-- User.class
    |   |       |   `-- UserRole.class
    |   |       `-- util
    |   |           |-- Resources.class
    |   |           |-- TimestampAdapter.class
    |   |           `-- Util.class
    |   |-- META-INF
    |   |   |-- beans.xml
    |   |   `-- persistence.xml
    |   `-- ValidationMessages.properties
    |-- faces-config.xml
    |-- jboss-web.xml
    |-- lib
    |   |-- cssparser-0.9.5.jar
    |   |-- guava-r08.jar
    |   |-- richfaces-components-api-4.0.0.Final.jar
    |   |-- richfaces-components-ui-4.0.0.Final.jar
    |   |-- richfaces-core-api-4.0.0.Final.jar
    |   |-- richfaces-core-impl-4.0.0.Final.jar
    |   `-- sac-1.3.jar
    |-- navigation.xml
    `-- web.xml

Теперь вот УШ. Те же файлы (за исключением того, что у него есть application.xml), просто другая структура.

Webapp.ear
.
|-- META-INF
|   |-- application.xml
|   |-- MANIFEST.MF
|   `-- maven
|       `-- com.webapp
|           `-- Webapp-ear
|               |-- pom.properties
|               `-- pom.xml
|-- Webapp-ejb-1.0-SNAPSHOT.jar
`-- Webapp-web-1.0-SNAPSHOT.war

Вот файл EJB JAR:

Webapp-ejb-1.0-SNAPSHOT.jar
.
|-- ApplicationResources_es.properties
|-- ApplicationResources.properties
|-- com
|   `-- webapp
|       |-- controller
|       |   |-- auth
|       |   |   |-- ClientInfo.class
|       |   |   |-- LoginModule.class
|       |   |   |-- RBAC.class
|       |   |   |-- SimpleGroup.class
|       |   |   `-- SimplePrincipal.class
|       |   |-- LocaleManager.class
|       |   |-- SendMailBean.class
|       |   |-- UserRegistration.class
|       |   `-- UserRemoval.class
|       |-- data
|       |   `-- UserListProducer.class
|       |-- exception
|       |   |-- ViewExpiredExceptionExceptionHandler.class
|       |   `-- ViewExpiredExceptionExceptionHandlerFactory.class
|       |-- model
|       |   |-- Entity.class
|       |   |-- LoginHistory.class
|       |   |-- Role.class
|       |   |-- User.class
|       |   `-- UserRole.class
|       `-- util
|           |-- Resources.class
|           |-- TimestampAdapter.class
|           `-- Util.class
|-- META-INF
|   |-- beans.xml
|   |-- MANIFEST.MF
|   |-- maven
|   |   `-- com.webapp
|   |       `-- Webapp-ejb
|   |           |-- pom.properties
|   |           `-- pom.xml
|   `-- persistence.xml
`-- ValidationMessages.properties

Вот файл WAR:

Webapp-web-1.0-SNAPSHOT.war
.
|-- error.xhtml
|-- index.xhtml
|-- language.xhtml
|-- login.xhtml
|-- META-INF
|   |-- MANIFEST.MF
|   `-- maven
|       `-- com.webapp
|           `-- Webapp-web
|               |-- pom.properties
|               `-- pom.xml
|-- register.xhtml
|-- resources
|   |-- css
|   |   `-- layout.css
|   |-- images
|   |   `-- logo.png
|   `-- javascript
|       `-- detectScreenSize.js
|-- sendMail.xhtml
|-- templates
|   `-- masterLayout.xhtml
`-- WEB-INF
    |-- beans.xml
    |-- faces-config.xml
    |-- jboss-web.xml
    |-- lib
    |   |-- cssparser-0.9.5.jar
    |   |-- guava-r08.jar
    |   |-- richfaces-components-api-4.0.0.Final.jar
    |   |-- richfaces-components-ui-4.0.0.Final.jar
    |   |-- richfaces-core-api-4.0.0.Final.jar
    |   |-- richfaces-core-impl-4.0.0.Final.jar
    |   `-- sac-1.3.jar
    |-- navigation.xml

    `-- web.xml

Вот файл application.xml в развертывании EAR:

<?xml version="1.0" encoding="UTF-8"?>

<application xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application_6.xsd" version="6">

  <display-name>Webapp-ear</display-name>
  <module>
    <web>
      <web-uri>Webapp-web-1.0-SNAPSHOT.war</web-uri>
      <context-root>/Webapp</context-root>
    </web>
  </module>
  <module>
    <ejb>Webapp-ejb-1.0-SNAPSHOT.jar</ejb>
  </module>
  <library-directory>lib</library-directory>
</application>

WAR развертывается без ошибок, но EAR не может быть развернут следующим образом:

17:41:02,059 WARN  [org.jboss.modules] (MSC service thread 1-2) Failed to define class com.webapp.exception.ViewExpiredExceptionExceptionHandler in Module "deployment.Webapp.ear.Webapp-ejb-1.0-SNAPSHOT.jar:main" from Service Module Loader: java.lang.LinkageError: Failed to link com/webapp/exception/ViewExpiredExceptionExceptionHandler (Module "deployment.Webapp.ear.Webapp-ejb-1.0-SNAPSHOT.jar:main" from Service Module Loader)

    at org.jboss.modules.ModuleClassLoader.defineClass(ModuleClassLoader.java:396)

    at org.jboss.modules.ModuleClassLoader.loadClassLocal(ModuleClassLoader.java:243)

    at org.jboss.modules.ModuleClassLoader$1.loadClassLocal(ModuleClassLoader.java:73)

    at org.jboss.modules.Module.loadModuleClass(Module.java:505)

    at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:182)

    at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:468)

    at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:456)

    at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:398)

    at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:120)

    at org.jboss.as.jpa.hibernate4.HibernateAnnotationScanner.getPackagesInJar(HibernateAnnotationScanner.java:92)

    at org.hibernate.ejb.Ejb3Configuration.addScannedEntries(Ejb3Configuration.java:490) [hibernate-entitymanager-4.0.0.Final.jar:4.0.0.Final]

    at org.hibernate.ejb.Ejb3Configuration.scanForClasses(Ejb3Configuration.java:852) [hibernate-entitymanager-4.0.0.Final.jar:4.0.0.Final]

    at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:597) [hibernate-entitymanager-4.0.0.Final.jar:4.0.0.Final]

    at org.hibernate.ejb.HibernatePersistence.createContainerEntityManagerFactory(HibernatePersistence.java:72) [hibernate-entitymanager-4.0.0.Final.jar:4.0.0.Final]

    at org.jboss.as.jpa.service.PersistenceUnitServiceImpl.createContainerEntityManagerFactory(PersistenceUnitServiceImpl.java:149) [jboss-as-jpa-7.1.0.CR1b.jar:7.1.0.CR1b]

    at org.jboss.as.jpa.service.PersistenceUnitServiceImpl.start(PersistenceUnitServiceImpl.java:79) [jboss-as-jpa-7.1.0.CR1b.jar:7.1.0.CR1b]

    at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1824)

    at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1759)

    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) [:1.7.0_02]

    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) [:1.7.0_02]

    at java.lang.Thread.run(Thread.java:722) [:1.7.0_02]

Caused by: java.lang.NoClassDefFoundError: javax/faces/context/ExceptionHandlerWrapper

    at java.lang.ClassLoader.defineClass1(Native Method) [:1.7.0_02]

    at java.lang.ClassLoader.defineClass(ClassLoader.java:791) [:1.7.0_02]

    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) [:1.7.0_02]

    at org.jboss.modules.ModuleClassLoader.doDefineOrLoadClass(ModuleClassLoader.java:327)

    at org.jboss.modules.ModuleClassLoader.defineClass(ModuleClassLoader.java:391)

    ... 20 more

Caused by: java.lang.ClassNotFoundException: javax.faces.context.ExceptionHandlerWrapper from [Module "deployment.Webapp.ear.Webapp-ejb-1.0-SNAPSHOT.jar:main" from Service Module Loader]

    at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:190)

    at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:468)

    at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:456)

    at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:398)

    at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:120)

    ... 25 more

17:41:02,143 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-2) MSC00001: Failed to start service jboss.persistenceunit."Webapp.ear/Webapp-ejb-1.0-SNAPSHOT.jar#PostgresPersistenceUnit": org.jboss.msc.service.StartException in service jboss.persistenceunit."Webapp.ear/Webapp-ejb-1.0-SNAPSHOT.jar#PostgresPersistenceUnit": Failed to start service

    at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1780) [jboss-msc-1.0.1.GA.jar:1.0.1.GA]

    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) [:1.7.0_02]

    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) [:1.7.0_02]

    at java.lang.Thread.run(Thread.java:722) [:1.7.0_02]

Caused by: java.lang.RuntimeException: error trying to scan <jar-file>: vfs:/content/Webapp.ear/Webapp-ejb-1.0-SNAPSHOT.jar/

    at org.hibernate.ejb.Ejb3Configuration.scanForClasses(Ejb3Configuration.java:855)

    at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:597)

    at org.hibernate.ejb.HibernatePersistence.createContainerEntityManagerFactory(HibernatePersistence.java:72)

    at org.jboss.as.jpa.service.PersistenceUnitServiceImpl.createContainerEntityManagerFactory(PersistenceUnitServiceImpl.java:149)

    at org.jboss.as.jpa.service.PersistenceUnitServiceImpl.start(PersistenceUnitServiceImpl.java:79)

    at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1824) [jboss-msc-1.0.1.GA.jar:1.0.1.GA]

    at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1759) [jboss-msc-1.0.1.GA.jar:1.0.1.GA]

    ... 3 more

Caused by: java.lang.RuntimeException: JBAS011431: Could not load entity class 'com.webapp.exception.ViewExpiredExceptionExceptionHandler' with PersistenceUnitInfo.getNewTempClassLoader()

    at org.jboss.as.jpa.hibernate4.HibernateAnnotationScanner.getPackagesInJar(HibernateAnnotationScanner.java:96)

    at org.hibernate.ejb.Ejb3Configuration.addScannedEntries(Ejb3Configuration.java:490)

    at org.hibernate.ejb.Ejb3Configuration.scanForClasses(Ejb3Configuration.java:852)

    ... 9 more

Caused by: java.lang.ClassNotFoundException: com.webapp.exception.ViewExpiredExceptionExceptionHandler from [Module "deployment.Webapp.ear.Webapp-ejb-1.0-SNAPSHOT.jar:main" from Service Module Loader]

    at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:190)

    at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:468)

    at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:456)

    at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:398)

    at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:120)

    at org.jboss.as.jpa.hibernate4.HibernateAnnotationScanner.getPackagesInJar(HibernateAnnotationScanner.java:92)

    ... 11 more

Странно, что ошибка:

Caused by: java.lang.RuntimeException: JBAS011431: Could not load entity class 'com.webapp.exception.ViewExpiredExceptionExceptionHandler' with PersistenceUnitInfo.getNewTempClassLoader()

ViewExpiredExceptionHandler не является сущностью, так почему бы PersistenceUnitInfo попытаться загрузить его?

Я использовал архетип "org.jboss.spec.archetypes:jboss-javaee6-ear-webapp" maven для генерации шаблона и poms для проекта EAR, а для развертывания EAR я использую плагин maven jboss-as:deploy. Я использую jboss-as-7.1.0.CR1b.

Мой web.xml - это спецификация сервлета 3.0:

<web-app
    version="3.0"
    xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">

Что я не получаю здесь? Пожалуйста, помогите.

Ответы [ 2 ]

2 голосов
/ 09 марта 2012

Прежде всего, ваши компоненты EJB никогда не должны зависеть от библиотек JSF.JSF - это фреймворк, предназначенный для просмотра части приложения (html + backing bean).Модуль EJB должен работать без знания о JSF.

Если вам действительно нужно ссылаться на JSF из метода EJB, вы должны явно сообщить контейнеру (JBoss 7.1.), Что этот модуль зависит от модуля JSF.Вы можете найти детали здесь: https://docs.jboss.org/author/display/AS7/Class+Loading+in+AS7

2 голосов
/ 06 февраля 2012

При использовании развертывания EAR EJB должны находиться в каталоге /lib EAR, или вам нужно добавить <ear-subdeployments-isolated>false</ear-subdeployments-isolated>, чтобы подсистема EE распознала JAR EJB.

Другой вариант будетдобавить Dependencies: Webapp-ejb-1.0-SNAPSHOT к MANIFEST.MF в вашей WAR.

Более подробную информацию о загрузке классов с помощью EAR можно получить из следующей документации https://docs.jboss.org/author/display/AS7/Class+Loading+in+AS7.

...