【发布时间】: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,我还需要进行哪些其他更改?
提前谢谢你们。
【问题讨论】: