2011-09-26 48 views
2

即時嘗試將我的JBOSS 5.1應用程序遷移到JBOSS 7.0.2。在管理控制檯中,我選擇部署 - >添加內容和我的.war並嘗試啓用它。 我已經解決了一些問題,但不能想出這一個:(末尾的短,中長)JBOSS 7 - Spring ContextLoaderListener ClassNotFoundException

Caused by: java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener from [Module "deployment.ZaprogsProject.war:main" from Servic 
e Module Loader] 

我複製到JBOSS7\standalone\lib\以下文件:

spring-aop-3.0.5.RELEASE.jar 
spring-asm-3.0.5.RELEASE.jar 
spring-beans-3.0.5.RELEASE.jar 
spring-context-3.0.5.RELEASE.jar 
spring-context-support-3.0.5.RELEASE.jar 
spring-core-3.0.5.RELEASE.jar 
spring-expression-3.0.5.RELEASE.jar 
spring-jdbc-3.0.5.RELEASE.jar 
spring-orm-3.0.5.RELEASE.jar 
spring-test-3.0.5.RELEASE.jar 
spring-tx-3.0.5.RELEASE.jar 
spring-web-3.0.5.RELEASE.jar 
spring-webmvc-3.0.5.RELEASE.jar 

我已閱讀本:https://docs.jboss.org/author/display/AS7/How+do+I+migrate+my+application+from+AS5+or+AS6+to+AS7(調試並解決ClassNotFoundExceptions和NoClassDefFoundErrors),但無法找到我的解決方案,仍然得到相同的錯誤。誰能幫忙?

22:19:12,091 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-1) MSC00001: Failed to start service jboss.deployment.unit."ZaprogsProject.war".INSTALL: o 
rg.jboss.msc.service.StartException in service jboss.deployment.unit."ZaprogsProject.war".INSTALL: Failed to process phase INSTALL of deployment "ZaprogsProject 
.war" 
     at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:121) [jboss-as-server-7.0.2.Final.jar:7.0.2.Final] 
     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] 
     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) [:1.7.0] 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) [:1.7.0] 
     at java.lang.Thread.run(Thread.java:722) [:1.7.0] 
Caused by: java.lang.RuntimeException: Failed to load class org.springframework.web.context.ContextLoaderListener 
     at org.jboss.as.ee.component.deployers.EEClassConfigurationProcessor$1.compute(EEClassConfigurationProcessor.java:141) 
     at org.jboss.as.ee.component.deployers.EEClassConfigurationProcessor$1.compute(EEClassConfigurationProcessor.java:122) 
     at org.jboss.as.ee.component.LazyValue.get(LazyValue.java:40) 
     at org.jboss.as.ee.component.EEApplicationDescription.getClassConfiguration(EEApplicationDescription.java:183) 
     at org.jboss.as.ee.component.ComponentDescription.createConfiguration(ComponentDescription.java:153) 
     at org.jboss.as.ee.component.deployers.EEModuleConfigurationProcessor.deploy(EEModuleConfigurationProcessor.java:70) 
     at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:115) [jboss-as-server-7.0.2.Final.jar:7.0.2.Final] 
     ... 5 more 
Caused by: java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener from [Module "deployment.ZaprogsProject.war:main" from Servic 
e Module Loader] 
     at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:191) 
     at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:361) 
     at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:333) 
     at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:310) 
     at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:103) 
     at java.lang.Class.forName0(Native Method) [:1.7.0] 
     at java.lang.Class.forName(Class.java:264) [:1.7.0] 
     at org.jboss.as.ee.component.deployers.EEClassConfigurationProcessor$1.compute(EEClassConfigurationProcessor.java:139) 
     ... 11 more 

回答

3

我不會把那些JAR放在那個目錄下。在WAR文件的WEB-INF/lib中嘗試它們。類加載器將在那裏找到它們。

您需要了解所有Java EE應用服務器都使用類加載器的層次結構:引導程序,服務器,應用程序。 JBoss在需要時沒有找到這個類。

+0

謝謝工作。爲什麼它在lib文件夾中不起作用,並且將JAR保留在WAR中的優點和缺點是什麼? –

+0

這使我的戰爭從11MB膨脹到將近70MB。有沒有辦法讓這些JAR保持在外面? 70MB的戰爭建設將永遠... –

+0

磁盤空間很便宜。你對於在更大的計劃中不重要的東西感到煩惱。 – duffymo

1

與以前的版本相比,Jboss 7有一個重大改變。如果你想訪問war文件之外的任何庫,它應該被安裝爲模塊。 檢查https://docs.jboss.org/author/display/MODULES/Introduction 在這種情況下,你應該安裝Spring作爲模塊,並指定模塊在應用程序的清單文件相關的名稱(檢查Manifest module information

+0

看起來我需要這個:https://docs.jboss.org/author/display/MODULES/Filesystem+module+loader? –

+0

據我所知,您只需定義模塊並將其安裝在Jboss中。然後將它作爲依賴項添加到清單中。這是我在應用程序(石英)需要訪問ojdbc中的類時所做的。你可能不需要直接處理模塊加載器。如果情況並非如此,請告訴我。 – Adi

5

JBoss應用服務器7確實類裝載的差異的方式。

WAR中的所有類都加載了相同的類加載器。這意味着打包在WEB-INF/lib中的類與WEB-INF/classes中的類相同。 因此它適用於你。

但正如你所說的正確你的WEB-INF/lib是膨脹的。這不是正確的方法。

您需要創建一個模塊: 轉到模塊文件夾,使用主文件夾創建文件夾結構,並將jar和modules.xml中的條目放入其中。 喜歡的東西:

<main-class name="org.jboss.msc.Version"/> 

<resources> 
    <resource-root path="jboss-msc-1.0.1.GA.jar"/> 
</resources> 

<dependencies> 
    <module name="javax.api"/> 
    <module name="org.jboss.logging"/> 
    <module name="org.jboss.modules"/> 

    <!-- Optional deps --> 
    <module name="javax.inject.api" optional="true"/> 
    <module name="org.jboss.threads" optional="true"/> 
    <module name="org.jboss.vfs" optional="true"/> 
</dependencies> 

您還需要更新清單爲好。 詳情在這裏: https://docs.jboss.org/author/display/MODULES/Module+descriptors

相關問題