[英]Java .war deployment issues on jboss-as-7.1.1.Final
我正在研究一個動態Web項目( StudentManagement.war
),該項目依賴於EJB
( StudentManagementEJB.jar
)進行數據庫接口。 EJB
項目已添加到Web項目的類路徑中。 但是,在部署時,會引發以下異常:
22:23:21,275 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-4) MSC00001: Failed to start service jboss.deployment.unit."StudentManagement.war".POST_MODULE: org.jboss.msc.service.StartException in service jboss.deployment.unit."StudentManagement.war".POST_MODULE: Failed to process phase POST_MODULE of deployment "StudentManagement.war"
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.runWorker(Unknown Source) [rt.jar:1.7.0_45]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) [rt.jar:1.7.0_45]
at java.lang.Thread.run(Unknown Source) [rt.jar:1.7.0_45]
Caused by: java.lang.RuntimeException: Error getting reflective information for class student.management.ManageStudentServlet with ClassLoader ModuleClassLoader for Module "deployment.StudentManagement.war: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: Lstudent/management/ManageStudentSessionBeanLocal;
at java.lang.Class.getDeclaredFields0(Native Method) [rt.jar:1.7.0_45]
at java.lang.Class.privateGetDeclaredFields(Unknown Source) [rt.jar:1.7.0_45]
at java.lang.Class.getDeclaredFields(Unknown Source) [rt.jar:1.7.0_45]
at org.jboss.as.server.deployment.reflect.ClassReflectionIndex.<init>(ClassReflectionIndex.java:57) [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: student.management.ManageStudentSessionBeanLocal from [Module "deployment.StudentManagement.war: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)
... 15 more
這表明Web模塊找不到在bean中定義的類。 我將默認值: %JBOSS_HOME%\\standalone\\deployments\\StudentManagement.war\\META-INF\\MANIFEST.MF
更改為:
Manifest-Version: 1.0
Class-Path: file:/C:/Utils/jboss-as-7.1.1.Final/jboss-as-7.1.1.Final/standalone/deployments/StudentManagementEJB.jar
盡管如此,異常仍然存在。 Class-Path之間有兩個空格:和URI,並且URI(../ standalone)末尾有一個空格,后跟一個換行符。
我的語法有問題嗎?
我正在使用java ee 7,jboss-as-7.1.1.Final和Win 7 x64。
事實證明,部署后沒有將StudentManagementEJB.jar文件復制到/ lib目錄中。 除了將其添加到Class-Path之外,還必須將其復制到
%JBOSS_HOME%\\standalone\\deployments\\<ProjectName>.war\\WEB-INF\\lib
目錄(如果項目部署為.war)。 在這種情況下,ProjectName是StudentManagement。
不要引用部署文件夾(獨立/部署)。 部署的應用程序並沒有真正部署到那里,而是從那里復制到了數據目錄,或者,如果您使用其他形式的部署,例如jboss-cli.bat,它們甚至不在部署文件夾中。
有一些方法可以解決此問題。
1)不要將EJB單獨打包,而應將其包含在WAR中(最簡單)。
2)創建一個EAR並將WAR和EJB-JAR打包到EAR(經典)中。
3)從接口類創建一個模塊,並從EJB.jar和WAR對該模塊進行引用。 參見https://docs.jboss.org/author/display/AS71/Class+Loading+in+AS7中的 “ Dependencies:”
4)在WARs清單中引用EJB部署,例如:
Dependencies:deployment.StudentManagementEJB.jar
從https://docs.jboss.org/author/display/AS71/Class+Loading+in+AS7 :
頂級部署的模塊名稱遵循以下格式:deployment.myarchive.war,而子部署則命名為deployment.myear.ear.mywar.war。
這意味着一個部署可以使用另一個部署模塊名稱從另一個部署中導入類,下面將介紹如何添加顯式模塊依賴項的詳細信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.