2014-01-06 77 views
0

我正在使用依靠EJBStudentManagementEJB.jar)進行數據庫接口的動態Web項目(StudentManagement.war)。 EJB項目已添加到Web項目的類路徑中。然而,在部署時拋出以下例外:jboss-as-7.1.1上的Java .war部署問題。最終

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 

儘管這樣的例外仍然存在。在類路徑:和URI之後有一個空格(../ standalone),後跟一個換行符。

我的語法有什麼問題嗎?
我使用java ee 7,jboss-as-7.1.1.Final和Win 7 x64。

+0

您可以在.war中包含.jar文件嗎? – SpacePrez

+0

你已經用EJB jar打包了類,所以它只能在EJB模塊中使用,而不能在WAR模塊中使用。爲了使它在EJB和WAR模塊中均可用,您必須使用EAR進行打包。 –

回答

1

事實證明,StudentManagementEJB.jar文件在部署時未複製到/ lib目錄中。除了將它添加到類路徑,還必須將其複製到

%JBOSS_HOME%\standalone\deployments\<ProjectName>.war\WEB-INF\lib

目錄(如果該項目部署的.war)。在這種情況下,ProjectName是StudentManagement。

0

請勿參考部署文件夾(獨立/部署)。如果您使用其他形式的部署,例如部署的應用程序不是真正部署在那裏,而是從那裏複製到數據目錄,或者甚至不在部署文件夾中。 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

4)艙單EJB部署類似的戰爭參考:

Dependencies:deployment.StudentManagementEJB.jar 

https://docs.jboss.org/author/display/AS71/Class+Loading+in+AS7

的頂級部署模塊名遵循格式 deployment.myarchive.war,而子部署被命名爲 deployment.myear.ear.mywar.war。

這意味着它是可能的部署,從 進口類中使用其他部署模塊名稱的另一個部署,如何添加一個明確的模塊依賴的 細節說明如下 。