JMS + AOP + JNDI资源问题

时间:2014-01-02 13:29:10

标签: spring jms jndi spring-aop spring-jms

嗨,新年快乐

我正在开发一个需要实现jms,aop和一些jndi资源的项目。

到目前为止,当只有jms和jndi时,该项目工作正常,但当我激活aop时,我遇到了一些麻烦..这是配置:

        <!-- JMS implementation -->
<bean id="jmsRefConnectionFactory.activemq" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiName" value="java:comp/env/jms/activeMQConnectionFactory" />
    <property name="lookupOnStartup" value="false" />
    <property name="proxyInterface" value="javax.jms.QueueConnectionFactory" />
</bean>

<bean id="jmsRefQueue.activemq" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiName" value="java:comp/env/jms/activeMQQueue" />
    <property name="lookupOnStartup" value="false" />
    <property name="proxyInterface" value="javax.jms.Queue" />
</bean>

<bean id="jmsConnectionFactory.activemq" class="org.springframework.jms.connection.SingleConnectionFactory">
    <constructor-arg ref="jmsRefConnectionFactory.activemq" />
</bean>

<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
    <property name="connectionFactory" ref="jmsConnectionFactory.activemq" />
    <property name="defaultDestination" ref="jmsRefQueue.activemq" />
    <property name="destinationResolver" ref="jmsDestinationResolver.amq" />
    <property name="sessionTransacted" value="true" />
    <property name="sessionAcknowledgeMode" value="#{T(javax.jms.Session).CLIENT_ACKNOWLEDGE}" />
</bean>

<bean id="transactionManager" class="org.springframework.jms.connection.JmsTransactionManager">
    <property name="connectionFactory" ref="jmsRefConnectionFactory.activemq" />
</bean>

<bean id="jmsDestinationResolver.amq"
    class="org.springframework.jms.support.destination.DynamicDestinationResolver" />

当我启动应用程序时,我收到此错误:

  

引起:org.springframework.aop.AopInvocationException:AOP配置似乎无效:尝试在目标上调用方法[public abstract javax.jms.Connection javax.jms.ConnectionFactory.createConnection()throws javax.jms.JMSException] [org.apache.activemq.ActiveMQConnectionFactory@239f 6];嵌套异常是java.lang.IllegalArgumentException:object不是声明类的实例

Context.xml内容:

<!-- APACHE MQ -->
<Resource name="jms/activeMQConnectionFactory" auth="Container"
    type="org.apache.activemq.ActiveMQConnectionFactory" description="JMS Connection Factory"
    factory="org.apache.activemq.jndi.JNDIReferenceFactory" HOST="localhost"
    PORT="61616" CHAN="" TRAN="1" QMGR="MyQCF" />

<Resource name="jms/activeMQQueue" auth="Container"
    type="org.apache.activemq.command.ActiveMQQueue" description="my Queue"
    factory="org.apache.activemq.jndi.JNDIReferenceFactory" physicalName="userQueue" />

Web.xml内容:

 <resource-ref>
    <res-ref-name>jms/activeMQConnectionFactory</res-ref-name>
    <res-type>javax.jms.QueueConnectionFactory</res-type>
    <res-auth>Container</res-auth>
    <res-sharing-scope>Shareable</res-sharing-scope>
  </resource-ref>
  <resource-ref>
    <res-ref-name>jms/activeMQQueue</res-ref-name>
    <res-type>javax.jms.Queue</res-type>
    <res-auth>Container</res-auth>
    <res-sharing-scope>Shareable</res-sharing-scope>
  </resource-ref>

当aop未激活时,此配置正常,但出于某些原因,当aop打开时,它无效。

春季版:3.1.2 我正在使用activemq(5.7)

1 个答案:

答案 0 :(得分:0)

我发现了什么问题..

原来没有涉及到aop(至少不是我的配置)。我的tomcat服务器中有一些jar因为某些原因而没有服用(我认为这是关于lib优先级/父优先/最后一个)...

我更改了位置并直接进入我的项目,它现在正常工作! :)