【问题标题】:Spring 3.2.3 : activemq 5.5 dependency problemsSpring 3.2.3:activemq 5.5 依赖问题
【发布时间】:2013-08-01 01:25:28
【问题描述】:

我正在尝试将项目从 spring 3.0.7 升级到 spring 3.2.3。我目前遇到了 activemq 依赖项的问题,无法弄清楚我需要什么 jar 或首先发生冲突。以下是我的堆栈跟踪

org.unitils.core.UnitilsException:无法创建应用程序 位置 [classpath:producerServiceContext-test.xml] 的上下文 org.unitils.spring.util.ApplicationContextManager.createInstanceForValues(ApplicationContextManager.java:121) 在 org.unitils.spring.util.ApplicationContextManager.createInstanceForValues(ApplicationContextManager.java:36) 在 org.unitils.core.util.AnnotatedInstanceManager.getInstanceImpl(AnnotatedInstanceManager.java:234) 在 org.unitils.core.util.AnnotatedInstanceManager.getInstance(AnnotatedInstanceManager.java:121) 在 org.unitils.spring.util.ApplicationContextManager.getApplicationContext(ApplicationContextManager.java:65) 在 org.unitils.spring.SpringModule.getApplicationContext(SpringModule.java:235) 在 org.unitils.spring.SpringModule$1.isApplicableFor(SpringModule.java:108) 在 org.unitils.database.transaction.impl.DefaultUnitilsTransactionManager.getTransactionManagementConfiguration(DefaultUnitilsTransactionManager.java:180) 在 org.unitils.database.transaction.impl.DefaultUnitilsTransactionManager.startTransaction(DefaultUnitilsTransactionManager.java:96) 在 org.unitils.database.DatabaseModule.startTransaction(DatabaseModule.java:410) 在 org.unitils.database.DatabaseModule.startTransactionForTestMethod(DatabaseModule.java:381) 在 org.unitils.database.DatabaseModule$DatabaseTestListener.beforeTestSetUp(DatabaseModule.java:535) 在 org.unitils.core.Unitils$UnitilsTestListener.beforeTestSetUp(Unitils.java:273) 在 org.unitils.UnitilsJUnit4TestClassRunner$TestListenerInvokingMethodRoadie.runBeforesThenTestThenAfters(UnitilsJUnit4TestClassRunner.java:151) 在 org.junit.internal.runners.MethodRoadie.runTest(MethodRoadie.java:84) 在 org.junit.internal.runners.MethodRoadie.run(MethodRoadie.java:49) 在 org.unitils.UnitilsJUnit4TestClassRunner.invokeTestMethod(UnitilsJUnit4TestClassRunner.java:95) 在 org.junit.internal.runners.JUnit4ClassRunner.runMethods(JUnit4ClassRunner.java:61) 在 org.unitils.UnitilsJUnit4TestClassRunner.access$000(UnitilsJUnit4TestClassRunner.java:44) 在 org.unitils.UnitilsJUnit4TestClassRunner$1.run(UnitilsJUnit4TestClassRunner.java:62) 在 org.junit.internal.runners.ClassRoadie.runUnprotected(ClassRoadie.java:34) 在 org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:44) 在 org.unitils.UnitilsJUnit4TestClassRunner.run(UnitilsJUnit4TestClassRunner.java:68) 在 org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) 在 org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) 引起:org.springframework.beans.factory.BeanCreationException: 创建具有名称的 bean 时出错 'org.apache.activemq.xbean.XBeanBrokerService#0' 在类路径中定义 资源【producerServiceContext-test.xml】:bean的初始化 失败的;嵌套异常是 java.lang.NoSuchFieldError: NULL at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:529) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458) 在 org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) 在 org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) 在 org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) 在 org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) 在 org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:626) 在 org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932) 在 org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479) 在 org.unitils.spring.util.ApplicationContextManager.createInstanceForValues(ApplicationContextManager.java:117) ... 28 更多原因:java.lang.NoSuchFieldError: NULL at org.springframework.expression.TypedValue.(TypedValue.java:32) 在 org.springframework.expression.spel.support.StandardEvaluationContext.setRootObject(StandardEvaluationContext.java:88) 在 org.springframework.expression.spel.support.StandardEvaluationContext.(StandardEvaluationContext.java:74) 在 org.springframework.context.expression.StandardBeanExpressionResolver.evaluate(StandardBeanExpressionResolver.java:124) 在 org.springframework.beans.factory.support.AbstractBeanFactory.evaluateBeanDefinitionString(AbstractBeanFactory.java:1312) 在 org.springframework.beans.factory.support.BeanDefinitionValueResolver.evaluate(BeanDefinitionValueResolver.java:225) 在 org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:201) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1387) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1128) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519) ... 37 更多

以下是我的activemq pom依赖

    <dependency>
        <groupId>org.apache.activemq</groupId>
        <artifactId>activemq-core</artifactId>
        <version>5.5.0</version>
    </dependency>
    <dependency>
        <groupId>org.apache.activemq</groupId>
        <artifactId>activemq-pool</artifactId>
        <version>5.5.0</version>
    </dependency>

此外,我使用的是 spring 3.2.3 的分发包。我喜欢避免在这里复制粘贴那个,因为它有很多依赖项,我宁愿保持简洁明了。

这是我无法加载的应用程序上下文

<beans xmlns="http://www.springframework.org/schema/beans" xmlns:amq="http://activemq.apache.org/schema/core" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
  http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core.xsd">

    <!--  lets create an embedded ActiveMQ Broker -->
    <amq:broker useJmx="false" persistent="false">
        <amq:transportConnectors>
            <amq:transportConnector uri="tcp://localhost:0" />
        </amq:transportConnectors>
    </amq:broker>

    <!--  ActiveMQ destinations to use  -->
    <amq:queue id="destination" physicalName="org.apache.activemq.spring.Test.spring.embedded" />

    <!-- JMS ConnectionFactory to use, configuring the embedded broker using XML -->
    <amq:connectionFactory id="jmsFactory" brokerURL="vm://localhost?broker.persistent=false" />


    <!-- Spring JMS Template -->
    <bean id="fastJmsTemplate" class="org.springframework.jms.core.JmsTemplate">
        <property name="connectionFactory">
            <!-- lets wrap in a pool to avoid creating a connection per send -->
            <bean class="org.springframework.jms.connection.SingleConnectionFactory">
                <property name="targetConnectionFactory">
                    <ref local="jmsFactory" />
                </property>
            </bean>
        </property>
    </bean>

    <bean id="consumerJmsTemplate" class="org.springframework.jms.core.JmsTemplate">
        <property name="connectionFactory" ref="jmsFactory" />
    </bean>

    <bean id="fastJmsProducer" class="com.emakina.truvo.ssls.fast.service.util.FastJmsProducer">
        <property name="template">
            <ref bean="fastJmsTemplate"></ref>
        </property>

        <property name="destination">
            <ref bean="destination" />
        </property>
    </bean>

    <bean id="consumer" class="com.emakina.truvo.ssls.fast.service.util.SimpleFastJmsConsumer">
        <property name="template" ref="consumerJmsTemplate" />
        <property name="destination" ref="destination" />
    </bean>

</beans>

如果有人遇到相同的集成问题,我将非常感谢一些反馈。

【问题讨论】:

    标签: spring maven-2 activemq


    【解决方案1】:

    我找到了导致问题的依赖项。 Spring security 仍在管理它的旧版本。

            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-expression</artifactId>
                <version>${org.springframework.version}</version>
            </dependency>
    

    似乎 Spring-Security 正在引入 spring-expression 3.0.7。这导致 activemq 启动它的代理出现问题,因为它使用了该库中的类。我通过在 NoSuchField 异常上设置断点来发现问题,并查看它停止的类以及该类所属的库。我希望这对其他人也有帮助。

    在我的情况下,我只需要使用新的 spring 版本添加依赖项。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-07-10
      • 2012-10-14
      • 2017-03-20
      • 2015-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多