首页 文章

JBoss AS 7错误:WAR部署成功,EAR部署失败

提问于
浏览
2

我采用完全相同的Web应用程序并将其部署为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

现在,这是EAR . 相同的文件(现在它除了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

这是EAR部署中的application.xml:

<?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原型为EAR项目生成模板和poms,并使用maven jboss-as:deploy 插件来部署EAR . 我正在使用 jboss-as-7.1.0.CR1b .

我的web.xml是servlet规范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

    首先,您的EJB bean永远不应该依赖于JSF库 . JSF是为查看应用程序的一部分而设计的框架(html支持bean) . EJB模块应该在不了解JSF的情况下运行 .

    如果您真的需要从EJB方法引用JSF,则必须明确告知容器(JBoss 7.1 . )该模块依赖于JSF模块 . 你可以在这里找到详细信息:https://docs.jboss.org/author/display/AS7/Class+Loading+in+AS7

  • 2

    使用EAR部署时,EJB应位于EAR的 /lib 目录中,或者您需要添加 <ear-subdeployments-isolated>false</ear-subdeployments-isolated> 以使EE子系统识别EJB JAR .

    另一个选择是将 Dependencies: Webapp-ejb-1.0-SNAPSHOT 添加到WAR中的MANIFEST.MF .

    您可以从以下文档https://docs.jboss.org/author/display/AS7/Class+Loading+in+AS7获取有关EAR类加载的更多信息 .

相关问题