Я занимаюсь крупным рефактором веб-приложения с использованием мультимодульного подхода maven. На ходу был только 1 модуль. Я медленно разрывал функциональность и создавал цепочку зависимостей, от которой зависит основной модуль.TomEE throws Недействительный переход на жизненный цикл
Другая необходимая информация стоит упомянуть: Мы используем следующее:
- TomEE (Apache TomEE-JAXRS 1.5.1)
- OpenEJB
- Apache Maven
- JDK 1.7.x
В настоящее время мое веб-приложение структурировано следующим образом:
parent
pom.xml
|
common
pom.xml
|
persistence
pom.xml
|
export
pom.xml
|
main
pom.xml
ПОМ Постоянство модуля имеет следующие зависимости: POM
common
экспортном модуля имеет следующие зависимости: POM
common
persistence
Основной модуль имеет следующие зависимости:
common
persistence
export
Память родительского модуля определяет порядок сборки REACTOR следующим образом:
common
persistence
export
main
До создания export
модуля все было бы построить и развернуть в порядке; однако теперь, когда я вырвал дополнительные материалы из основного и поместил их в модуль экспорта, сборка прекрасна, но когда я развертываю сгенерированный WAR-файл, при запуске появляется следующая трассировка стека:
SEVERE: ContainerBase.removeChild: destroy:
org.apache.catalina.LifecycleException: An invalid Lifecycle transition was attempted ([before_destroy]) for component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/myapp]] in state [STARTING_PREP]
at org.apache.catalina.util.LifecycleBase.invalidTransition(LifecycleBase.java:409)
at org.apache.catalina.util.LifecycleBase.destroy(LifecycleBase.java:299)
at org.apache.catalina.core.ContainerBase.removeChild(ContainerBase.java:1041)
at org.apache.tomee.catalina.TomcatWebAppBuilder.undeploy(TomcatWebAppBuilder.java:1167)
at org.apache.tomee.catalina.TomcatWebAppBuilder.undeploy(TomcatWebAppBuilder.java:1148)
at org.apache.tomee.catalina.TomcatWebAppBuilder.undeployWebApps(TomcatWebAppBuilder.java:635)
at org.apache.openejb.assembler.classic.Assembler.destroyApplication(Assembler.java:1275)
at org.apache.openejb.assembler.classic.Assembler.createApplication(Assembler.java:955)
at org.apache.openejb.assembler.classic.Assembler.createApplication(Assembler.java:537)
at org.apache.tomee.catalina.TomcatWebAppBuilder.startInternal(TomcatWebAppBuilder.java:982)
at org.apache.tomee.catalina.TomcatWebAppBuilder.configureStart(TomcatWebAppBuilder.java:901)
at org.apache.tomee.catalina.GlobalListenerSupport.lifecycleEvent(GlobalListenerSupport.java:118)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5173)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:633)
at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:977)
at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1655)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)
Oct 05, 2016 12:51:23 PM org.apache.tomee.catalina.TomcatWebAppBuilder startInternal
SEVERE: Unable to deploy collapsed ear in war
StandardEngine[Catalina].StandardHost[localhost].StandardContext[/myapp] org.apache.openejb.OpenEJBException: Creating application failed:
C:\java\servers\apache-tomee-jaxrs-1.5.1\webapps\act-cde: Error building bean 'TaskDataAccessServices'. Exception: class java.lang.NoClassDefFoundError:
Could not initialize class com.myapp.cde.persistence.ejb.TaskDataAccessServices: Could not initialize class com.myapp.cde.persistence.ejb.TaskDataAccessServices
at org.apache.openejb.assembler.classic.Assembler.createApplication(Assembler.java:959)
at org.apache.openejb.assembler.classic.Assembler.createApplication(Assembler.java:537)
at org.apache.tomee.catalina.TomcatWebAppBuilder.startInternal(TomcatWebAppBuilder.java:982)
at org.apache.tomee.catalina.TomcatWebAppBuilder.configureStart(TomcatWebAppBuilder.java:901)
at org.apache.tomee.catalina.GlobalListenerSupport.lifecycleEvent(GlobalListenerSupport.java:118)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5173)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:633)
at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:977)
at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1655)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)
Caused by: org.apache.openejb.OpenEJBException: Error building bean 'TaskDataAccessServices'. Exception: class java.lang.NoClassDefFoundError:
Could not initialize class
com.myapp.cde.persistence.ejb.TaskDataAccessServices: Could not
initialize class
com.myapp.cde.persistence.ejb.TaskDataAccessServices
at org.apache.openejb.assembler.classic.EjbJarBuilder.build(EjbJarBuilder.java:81)
at org.apache.openejb.assembler.classic.Assembler.createApplication(Assembler.java:713)
... 18 more
Caused by: java.lang.NoClassDefFoundError: Could not initialize class com.myapp.cde.persistence.ejb.TaskDataAccessServices
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:274)
at org.apache.openejb.assembler.classic.EnterpriseBeanBuilder.load(EnterpriseBeanBuilder.java:425)
at org.apache.openejb.assembler.classic.EnterpriseBeanBuilder.loadClass(EnterpriseBeanBuilder.java:405)
at org.apache.openejb.assembler.classic.EnterpriseBeanBuilder.build(EnterpriseBeanBuilder.java:81)
at org.apache.openejb.assembler.classic.EjbJarBuilder.build(EjbJarBuilder.java:66)
... 19 more
Обратите внимание на TaskDataAccessServices
, упомянутый в трассе стека. Этот класс находится в модуле persistence
. Что странно, так это то, что он вообще не используется в модуле export
, который я только что создал.
Вопрос дня: Какой лучший подход при отладке этой проблемы?
Я думал о резервном из изменяет один за другим и положить классы обратно в основной модуль --- но это может занять некоторое время ...
Удивление если есть пуля подход серебра к разрешению этого?
Cheers.
К сожалению, файл TaskDataAccessServices.class присутствует в папке/WEB-INF/lib файла JAR с сохранением в взорванной WAR. Хорошая идея, хотя ... Это было бы слишком легко! :) –
Удивительный, это хороший первый шаг. Проблема, вероятно, в инициализации этого класса, то ... возможно, попробуйте некоторые из вещей здесь: http://stackoverflow.com/questions/1401111/noclassdeffounderror-could-not-initialize-class-error Также убедитесь, не запускается байт-код java8 в java7 и т. д. –