JBoss AS 7 error: WAR deployment succeeds, EAR deployment fails
pgarner Feb 5, 2012 6:11 PMI take the same exact same web application and deploy it as an WAR wiht no problems. However, same application deployed as EAR fails. Same files, just different deployment. First, look at the 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
Now, here is the EAR. Same files (except for now it has application.xml), just different structure.
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
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
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
Here is the application.xml in the EAR deployment:
<?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>
The WAR deploys without errors, but the EAR fails to be deployed as follows:
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
I used the "org.jboss.spec.archetypes:jboss-javaee6-ear-webapp" maven archetype to generate the template and poms for the EAR project and I use maven jboss-as:deploy plugin to deploy the EAR. I am using jboss-as-7.1.0.CR1b.
My web.xml is servlet spec 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">
What am I not getting here? Please help.