【问题标题】:NoClassDefFoundError in spring春天的 NoClassDefFoundError
【发布时间】:2011-01-02 03:16:19
【问题描述】:

我编写了一个在 Weblogic 10.3 上运行的 Spring 应用程序。在这个应用程序中,我有一些 JMS 队列消费者。

有时我在应用程序关闭或打开时遇到错误(我在两种情况下都看到了这个错误)说:

    java.lang.NoClassDefFoundError: org/springframework/jms/connection/SmartConnectionFactory
        at org.springframework.jms.connection.ConnectionFactoryUtils.releaseConnection(ConnectionFactoryUtils.java:72)
        at org.springframework.jms.listener.AbstractJmsListeningContainer.refreshSharedConnection(AbstractJmsListeningContainer.java:385)at org.springframework.jms.listener.DefaultMessageListenerContainer.refreshConnectionUntilSuccessful(DefaultMessageListenerContainer.java:779)
        at org.springframework.jms.listener.DefaultMessageListenerContainer.recoverAfterListenerSetupFailure(DefaultMessageListenerContainer.java:761)
        at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.run(DefaultMessageListenerContainer.java:892)
        at java.lang.Thread.run(Thread.java:619)
Caused by: java.lang.ClassNotFoundException: org.springframework.jms.connection.SmartConnectionFactory
        at weblogic.utils.classloaders.GenericClassLoader.findLocalClass(GenericClassLoader.java:283)
        at weblogic.utils.classloaders.GenericClassLoader.findClass(GenericClassLoader.java:256)
        at weblogic.utils.classloaders.ChangeAwareClassLoader.findClass(ChangeAwareClassLoader.java:54)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:303)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
        at weblogic.utils.classloaders.GenericClassLoader.loadClass(GenericClassLoader.java:176)
        at weblogic.utils.classloaders.ChangeAwareClassLoader.loadClass(ChangeAwareClassLoader.java:35)
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:316)
        ... 6 more

为什么我会收到此错误,我应该怎么做才能解决它? spring.jar的版本是2.5.5

【问题讨论】:

    标签: java spring jms weblogic noclassdeffounderror


    【解决方案1】:

    该异常意味着该类未加载到 JVM 中。确保 spring.jar 位于 Weblogic 服务器的类路径或库文件夹中。

    【讨论】:

    • 它在我的war文件里:) 有必要吗?
    • 在这种情况下,我猜你有某种启动/关闭类,它会在加载战争文件之前调用它。我会手动尝试将 jar 文件放在服务器的类路径或库文件夹中,而不仅仅是在 war 文件中。有时冗余是最好的解决方案。
    • 我没有向 Weblogic 介绍启动或关闭类,但我会试一试 :)
    【解决方案2】:

    在你的战争中有这个类很好,但是在 Weblogic 中,战争有它自己的类加载器。由于您的堆栈跟踪显示了一个 JMS 侦听器,我会问:侦听器在哪里?如果它在战争中,那么你就有一个谜。但它确实看起来好像在其他地方,而且正是在其他地方缺少这个 Spring 类。

    【讨论】:

    • 其实监听器在WAR文件中,声明为Spring“Message Driven Pojo”
    猜你喜欢
    • 2018-07-19
    • 2011-09-23
    • 1970-01-01
    • 2012-01-03
    • 2011-09-25
    • 2011-06-28
    • 2017-08-07
    • 2011-11-28
    • 2020-10-13
    相关资源
    最近更新 更多