Я беру то же самое веб-приложение и без проблем развертываю его как 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">
Что я не получаю здесь? Пожалуйста, помогите.