2014-11-14 3 views
0

Я создаю 2 проекта: EJB и один JPA. Проект JPA определяет классы объектов и persistent.xml. Проект проекта EBJ проекта JPA, я определил компонент сеанса EJB для подключения базы данных к менеджеру сущностей. пожалуйста, обратитесь к изображению ниже для получения более подробной информации. Но при запуске на Jboss 7 произошла ошибка.Как развернуть проект EJB и проект JPA в проекте EAR

enter image description here

03:23:59,546 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-2) MSC00001: Failed to start service jboss.deployment.subunit."TestApps.ear"."TestEJB.jar".POST_MODULE: org.jboss.msc.service.StartException in service jboss.deployment.subunit."TestApps.ear"."TestEJB.jar".POST_MODULE: Failed to p 
rocess phase POST_MODULE of subdeployment "TestEJB.jar" of deployment "TestApps.ear" 
     at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:119) [jboss-as-server-7.1.1.Final.jar:7.1.1.Final] 
     at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1811) [jboss-msc-1.0.2.GA.jar:1.0.2.GA] 
     at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1746) [jboss-msc-1.0.2.GA.jar:1.0.2.GA] 
     at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source) [rt.jar:1.6.0_22] 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) [rt.jar:1.6.0_22] 
     at java.lang.Thread.run(Unknown Source) [rt.jar:1.6.0_22] 
Caused by: java.lang.RuntimeException: Error getting reflective information for class com.ejb.services.LotUpdatManagerBean with ClassLoader ModuleClassLoader for Module "deployment.TestApps.ear.TestEJB.jar:main" from Service Module Loader 
     at org.jboss.as.server.deployment.reflect.DeploymentReflectionIndex.getClassIndex(DeploymentReflectionIndex.java:70) [jboss-as-server-7.1.1.Final.jar:7.1.1.Final] 
     at org.jboss.as.ee.metadata.MethodAnnotationAggregator.runtimeAnnotationInformation(MethodAnnotationAggregator.java:58) 
     at org.jboss.as.ee.component.deployers.InterceptorAnnotationProcessor.handleAnnotations(InterceptorAnnotationProcessor.java:85) 
     at org.jboss.as.ee.component.deployers.InterceptorAnnotationProcessor.processComponentConfig(InterceptorAnnotationProcessor.java:70) 
     at org.jboss.as.ee.component.deployers.InterceptorAnnotationProcessor.deploy(InterceptorAnnotationProcessor.java:55) 
     at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:113) [jboss-as-server-7.1.1.Final.jar:7.1.1.Final] 
     ... 5 more 
Caused by: java.lang.NoClassDefFoundError: com/test/model/LotUpdates 
     at java.lang.Class.getDeclaredMethods0(Native Method) [rt.jar:1.6.0_22] 
     at java.lang.Class.privateGetDeclaredMethods(Unknown Source) [rt.jar:1.6.0_22] 
     at java.lang.Class.getDeclaredMethods(Unknown Source) [rt.jar:1.6.0_22] 
     at org.jboss.as.server.deployment.reflect.ClassReflectionIndex.<init>(ClassReflectionIndex.java:65) [jboss-as-server-7.1.1.Final.jar:7.1.1.Final] 
     at org.jboss.as.server.deployment.reflect.DeploymentReflectionIndex.getClassIndex(DeploymentReflectionIndex.java:66) [jboss-as-server-7.1.1.Final.jar:7.1.1.Final] 
     ... 10 more 
Caused by: java.lang.ClassNotFoundException: com.test.model.LotUpdates from [Module "deployment.TestApps.ear.TestEJB.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.performLoadClassChecked(ConcurrentClassLoader.java:423) 
     at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:398) 
     at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:120) 
     ... 15 more 

03:23:59,762 INFO [org.jboss.as.server] (DeploymentScanner-threads - 2) JBAS015870: Deploy of deployment "TestApps.ear" was rolled back with failure message {"JBAS014671: Failed services" => {"jboss.deployment.subunit.\"TestApps.ear\".\"TestEJB.jar\".POST_MODULE" => "org.jboss.msc.service.StartExce 
ption in service jboss.deployment.subunit.\"TestApps.ear\".\"TestEJB.jar\".POST_MODULE: Failed to process phase POST_MODULE of subdeployment \"TestEJB.jar\" of deployment \"TestApps.ear\""}} 
03:23:59,765 INFO [org.jboss.as.server.deployment] (MSC service thread 1-2) JBAS015877: Stopped deployment TestEJB.jar in 2ms 
03:23:59,767 INFO [org.jboss.as.server.deployment] (MSC service thread 1-2) JBAS015877: Stopped deployment TestApps.ear in 4ms 
03:23:59,768 INFO [org.jboss.as.controller] (DeploymentScanner-threads - 2) JBAS014774: Service status report 
JBAS014777: Services which failed to start:  service jboss.deployment.subunit."TestApps.ear"."TestEJB.jar".POST_MODULE: org.jboss.msc.service.StartException in service jboss.deployment.subunit."TestApps.ear"."TestEJB.jar".POST_MODULE: Failed to process phase POST_MODULE of subdeployment "TestE 
JB.jar" of deployment "TestApps.ear" 

Я потерпел неудачу. Кто-нибудь может исправить меня, Покажите мне способ развернуть (проект jpa и проект ejb в том же ухе).

+0

By 'Caused by: java.lang.ClassNotFoundException: com.test.model.LotUpdates из [Module" deployment.TestApps.ear.TestEJB.jar: main "из Service Module Loader]' Jboss сообщает вам, что класс Ожидается, что 'LotUpdates' будет найден внутри' TestEJB.jar', который сам находится внутри 'TestApps.ear'. Могу ли я спросить, как вы строите свое ухо? (Скажем, вы используете maven, какие-либо классы '/ src/test/java' не будут упакованы в ваши Jars, и поэтому до сих пор не пропали и в вашем ухе). – JBA

+0

Я использовал функцию экспорта уха затмения. Мой файл уха после экспорта, что имеет эту структуру: ear (lib + ejb jar). lib магазин jpa jar. Это же структура с изображением выше. – duykaka

+0

Я не использовал maven. Просто используйте сборку ant по умолчанию в eclipse. Как я вижу, классы ejb не могут загружать/находить классы jpa. С вашим опытом, один проект для jpa, еще один для ebj. Оба они упакованы в ухо, как вы поживаете? Что такое правильная структура в ухе? – duykaka

ответ

0

В соответствии с нашей дискуссией в комментариях я предоставляю этот «ответ» как первый крючок на том, что могло быть пошло не так.

Что касается структуры EAR Структура типов пакетов EAR, WAR и JAR хорошо определены и должны быть соблюдены для создания архивов предприятия (колоса), которые впоследствии будут работать на серверах приложений, таких как JBoss.

Вы найдете любую требуемую информацию по упаковке под https://docs.oracle.com/javaee/6/tutorial/doc/bnaby.html (обратите внимание, что это для Java EE 6).

Basicially тот путь, чтобы пойти и я не смогу помочь вам гораздо больше :(

Но, как это предусмотрено в комментариях я постараюсь указать на некоторые особенно важные моменты, были ссылки происходит, и должны быть правильно Absolutly в соответствии с приведенными выше соглашениями об упаковке (я могу сразу сказать, что наши JPA-модули, например, также находятся в папке lib).

Итак, если я открою один из наших (работающих) EAR, я увижу содержание внутри него:

  • lib
  • META-INF
  • наш-EJB-part.jar
  • наш-сайт-application.war
  • наш-вебсервис-application.war

Наша ejb-part.jar, например, не содержит Java-код вообще. Он, однако, содержит папку META-INF с дескрипторами, такими как ejb-jar.xml и некоторые файлы свойств под папкой properties. Он также определяет путь класса внутри MANIFEST.MF. (Я не работал с JBoss в течение многих лет - в настоящее время мы используем IBM Websphere, поэтому у нас есть -bnd.xml/-ext.xml дескрипторы развертывания, расположенные в папке META-INF, а также ... я не знаю, нуждается ли Jboss в аналогичной информации о развертывании). Здесь нечего больше видеть.

Забудьте о двух веб-модулях на данный момент - у вас нет веб-части в виде файла .war (который сам должен следовать определенным требованиям к пакетам, как определено в документации oracle).

Но Обратите внимание, что если у вас есть какие-либо EJB- или WEB-модули, они должны быть перечислены в application.xml файл, расположенный в файле META-INF (а не META-INF папку в EJB, но в META -INF папки EAR, расположенной на том же уровне, что и /lib, /our-ejb-part.jar и т. Д.).Также обратите внимание, что внутри этого каталога META-INF мы снова имеем два дескриптора развертывания Websphere, а также пустой MANIFEST.MF).

Наконец, у нас есть папка lib, содержащая все наши EAR-зависимостей (и большинство зависимостей в веб-части). Это место, где мы сохраняем наши модули JPA, Commons-, Service-, Service-Implementations- и т. Д. И т. Д. (Вместо того, чтобы иметь их внутри ejb-part.jar ... но я не могу рассмотреть, является ли это хорошей практикой).

Так что, возвращаясь к вашей ситуации, может быть много чего-то не так - я рекомендую вам добавить распечатку содержимого вашего окончательного файла * .ear, а не выше, чем, возможно, получить дополнительные советы. Основная проблема этой точки зрения затмения в том, что по крайней мере, я не знаю, как именно ваш конечный файл .ear будет выглядеть (Существует, например, только WEB-INF папку с application.xml, расположенной под EAR Content.

К сожалению я обыкновение быть помощь отсюда, так как у меня нет знаний JBoss (журнал может означать, что неправильно на еще более подробном уровне, чем я могу интерпретировать ... В настоящее время я просто знаю, что ваш EAR, вероятно, не будет содержать класс LotUpdates, или он может быть там, но не добавлен к классам должным образом)

1

у вас есть 2 возможных варианта:

  • если вы TestJpa.jar в ear\lib папке она должна быть видна по умолчанию в модуле EJB (убедитесь, что EAR в 6.0 версии)
  • вручную добавить через Deployment Assembly в проекте EJB, проект JPA - должно привести к изменениям в файле манифеста для модуля EJB.

Если вы правильно настроить его, используя в любом случае вы должны увидеть проект JPA в EJB Module > EAR Libraries в Eclipse, без необходимости добавлять его в проект в Build Path

0

Я сделал то же самое с затмением на Ubuntu , Файл EAR содержит ejb.jar и jpa.jar, jpa.jar находится в * .ear/lib /. Jboss 7 может установить ушную упаковку. Я думаю, что первопричина jpa-классов построена и упакована в jpa.jar, так что ejb.jar может загрузить ее.

+0

Теперь я пытаюсь удаленный ejb в пределах ошибки. Я ищу много примеров в Интернете, но все еще не повезло. javax.naming.NoInitialContextException: невозможно создать экземпляр класса: org.jboss.naming.remote.client.InitialContextFactory. Мне не хватает чего? – duykaka

+0

Вы должны разместить его как новый вопрос, так как он не связан с тем, который вы задали. – Gas