【问题标题】:Upgrading to ActiveMQ 5.5 throws java.lang.ClassNotFoundException: org.slf4j.Logger升级到 ActiveMQ 5.5 抛出 java.lang.ClassNotFoundException: org.slf4j.Logger
【发布时间】:2011-11-15 19:58:29
【问题描述】:

我们一直在使用 ActiveMQ 5.2,并且正在考虑升级到 ActiveMQ 5.5。

我们在开发模式下运行时使用spring框架(2.5.6)并使用Jetty(6.1.2)。

我没有对 applicationContext 文件进行任何更改,但更改了类路径以便包含新的 jar 文件(activemq-core-5.5.0.jar、xbean-spring-3.7.jar)。

但是,开发实例失败并显示以下错误消息:

org.springframework.beans.factory.BeanDefinitionStoreException:从类路径资源 [applicationContext-activemq.xml] 解析 XML 文档时出现意外异常;嵌套异常是 java.lang.NoClassDefFoundError: org/slf4j/Logger 在 org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:420) 在 org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:342) 在 org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:310) 在 org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:143) 在 org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:178) 在 org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:149) 在 org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:124) 在 org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:92) 在 org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:123) 在 org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:422) 在 org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:352) 在 org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:255) 在 org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:199) 在 org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:45) 在 org.mortbay.jetty.handler.ContextHandler.startContext(ContextHandler.java:543) 在 org.mortbay.jetty.servlet.Context.startContext(Context.java:136) 在 org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1220) 在 org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:513) 在 org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:448) 在 com.google.gwt.dev.shell.jetty.JettyLauncher$WebAppContextWithReload.doStart(JettyLauncher.java:447) 在 org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:39) 在 org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:130) 在 org.mortbay.jetty.handler.RequestLogHandler.doStart(RequestLogHandler.java:115) 在 org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:39) 在 org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:130) 在 org.mortbay.jetty.Server.doStart(Server.java:222) 在 org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:39) 在 com.google.gwt.dev.shell.jetty.JettyLauncher.start(JettyLauncher.java:543) 在 com.google.gwt.dev.DevMode.doStartUpServer(DevMode.java:421) 在 com.google.gwt.dev.DevModeBase.startUp(DevModeBase.java:1035) 在 com.google.gwt.dev.DevModeBase.run(DevModeBase.java:783) 在 com.google.gwt.dev.DevMode.main(DevMode.java:275) 引起:java.lang.NoClassDefFoundError: org/slf4j/Logger 在 java.lang.Class.getDeclaredMethods0(本机方法) 在 java.lang.Class.privateGetDeclaredMethods(未知来源) 在 java.lang.Class.getDeclaredMethods(未知来源) 在 java.beans.Introspector$1.run(未知来源) 在 java.security.AccessController.doPrivileged(本机方法) 在 java.beans.Introspector.getPublicDeclaredMethods(未知来源) 在 java.beans.Introspector.getTargetMethodInfo(未知来源) 在 java.beans.Introspector.getBeanInfo(未知来源) 在 java.beans.Introspector.getBeanInfo(未知来源) 在 java.beans.Introspector.getBeanInfo(未知来源) 在 java.beans.Introspector.(未知来源) 在 java.beans.Introspector.getBeanInfo(未知来源) 在 org.apache.xbean.spring.context.v2c.XBeanQNameHelper.getBeanInfo(XBeanQNameHelper.java:78) 在 org.apache.xbean.spring.context.v2c.XBeanNamespaceHandler.getPropertyDescriptor(XBeanNamespaceHandler.java:581) 在 org.apache.xbean.spring.context.v2c.XBeanNamespaceHandler.addAttributeProperties(XBeanNamespaceHandler.java:333) 在 org.apache.xbean.spring.context.v2c.XBeanNamespaceHandler.parseBeanFromExtensionElement(XBeanNamespaceHandler.java:225) 在 org.apache.xbean.spring.context.v2c.XBeanNamespaceHandler.parseBeanFromExtensionElement(XBeanNamespaceHandler.java:276) 在 org.apache.xbean.spring.context.v2c.XBeanNamespaceHandler.parse(XBeanNamespaceHandler.java:156) 在 org.apache.xbean.spring.context.v2.XBeanNamespaceHandler.parse(XBeanNamespaceHandler.java:49) 在 org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1297) 在 org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1287) 在 org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:135) 在 org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.registerBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:92) 在 org.springframework.beans.factory.xml.XmlBeanDefinitionReader.registerBeanDefinitions(XmlBeanDefinitionReader.java:507) 在 org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:398) ... 31 更多 引起:java.lang.ClassNotFoundException:org.slf4j.Logger 在 java.net.URLClassLoader$1.run(未知来源) 在 java.security.AccessController.doPrivileged(本机方法) 在 java.net.URLClassLoader.findClass(未知来源) 在 com.google.gwt.dev.shell.jetty.JettyLauncher$WebAppContextWithReload$WebAppClassLoaderExtension.findClass(JettyLauncher.java:354) 在 org.mortbay.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:366) 在 org.mortbay.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:337) 在 java.lang.ClassLoader.loadClassInternal(未知来源) ... 56 更多

我尝试添加额外的 jar (slf4j-api-1.5.11.jar),其中包含到类路径的 Logger 接口,但仍然遇到相同的异常。

applicationContext 的队列定义如下所示

`

<bean id="connectionFactory"
    class="org.apache.activemq.spring.ActiveMQConnectionFactory">
    <property name="brokerURL" value="vm://localhost?async=false" />
    <property name="redeliveryPolicy" ref="redeliveryPolicy"/>
</bean>

<bean id="jmsTemplate"
    class="org.springframework.jms.core.JmsTemplate">
    <property name="connectionFactory" ref="connectionFactory" />
    <property name="defaultDestination" ref="httpPostQueue" />
</bean>

<!-- brokers -->
<amq:broker id="broker" start="false" useJmx="false">
    <amq:destinationPolicy>
        <amq:policyMap>
            <amq:policyEntries>
                <amq:policyEntry queue="emailQueue">
                    <amq:deadLetterStrategy>
                        <amq:individualDeadLetterStrategy queuePrefix="DLQ."/>
                    </amq:deadLetterStrategy>
                </amq:policyEntry>
            </amq:policyEntries>
        </amq:policyMap>
    </amq:destinationPolicy>
    <amq:persistenceAdapter>
        <amq:jdbcPersistenceAdapter dataSource="#dataSource" useDatabaseLock="false"/>
    </amq:persistenceAdapter>
</amq:broker>`

为了将 ActiveMQ 升级到 5.5,我还需要进行哪些其他更改?

提前谢谢你们。

【问题讨论】:

    标签: spring jetty activemq


    【解决方案1】:

    AMQ 5.5 使用 SLF4J 并在 activemq-all 中提供 slf4j-api,但您的应用程序应包含其中一种绑定器(参见 http://www.slf4j.org/codes.html#StaticLoggerBinder

    【讨论】:

    • 我实际上必须在 Jetty 的 WEB-INF/lib 中为 slf4j 添加所有必需的 jar(slf4j-api-1.5.11、slf4j-log4j12-1.5.11.jar)。这有点奇怪,但我们有几个案例,我们必须在这个文件夹中指定 jar 而不是类路径。
    【解决方案2】:

    升级到 ActiveMQ 5.5 时我遇到了同样的问题。事实证明,ActiveMQ 5.5 使用了更新版本的 slf4j。我们仍在使用 1.4.2,它太旧了。在我们的 maven pom 文件中,我将 slf4j 依赖更新为:

    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-log4j12</artifactId>
      <version>1.6.4</version>
    </dependency>
    

    【讨论】:

      猜你喜欢
      • 2020-10-04
      • 1970-01-01
      • 2018-04-11
      • 2014-07-28
      • 1970-01-01
      • 1970-01-01
      • 2018-06-17
      • 2014-10-19
      • 2013-12-08
      相关资源
      最近更新 更多