JBOSS 7 - Spring ContextLoaderListener ClassNotFoundException

时间:2011-09-26 20:33:39

标签: java spring jboss classnotfoundexception jboss7.x

我试图将我的JBOSS 5.1应用程序迁移到JBOSS 7.0.2。在管理控制台中,我选择部署 - >添加内容和我的.war并尝试启用它。 我已经解决了一些问题,但是无法解决这个问题:(简而言之,最后很长时间)

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

4 个答案:

答案 0 :(得分:5)

JBoss AS 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>

您还需要更新MANIFEST。 细节在这里: https://docs.jboss.org/author/display/MODULES/Module+descriptors

答案 1 :(得分:3)

我不会将这些JAR放在该目录中。在WAR文件的WEB-INF / lib中尝试它们。类加载器会在那里找到它们。

您需要了解所有Java EE应用服务器都使用类加载器的层次结构:bootstrap,server,application。 JBoss在需要时没有找到该类。

答案 2 :(得分:1)

与以前的版本相比,Jboss 7有了重大改变。如果你想访问war文件之外的任何库,它应该作为模块安装。 检查https://docs.jboss.org/author/display/MODULES/Introduction 在这种情况下,您应该将Spring作为模块安装,并在应用程序的清单文件中指定模块的名称作为依赖项(检查Manifest module information

答案 3 :(得分:0)

万一问题突然开始出现(就像我的情况一样),请从#JBOSS_HOME#\ standalone \ deployments \ MyApp.war中物理删除应用程序( MyApp 为我工作。