此容器中不允许使用方法setExceptionListener

时间:2014-12-03 17:39:59

标签: spring jms websphere spring-jms

我正在尝试使当前的Spring应用程序与Websphere 7默认的JMS提供程序一起工作。我创建了一个总线并为其分配了一个队列,还有一个SIB QueueConnectionFactory,一个SIB队列和一个激活规范,并将其与SIB队列相关联。我确信已为应用程序服务器启动了消息引擎。

所以我的web.xml引用了JNDI资源

<!-- Question: should I define Activation Specification here as well as a resource ? -->
<resource-ref>
    <description>JNDI JMS Conn Factory </description>
    <res-ref-name>jms/ConnectionFactory</res-ref-name>
    <res-type>javax.jms.ConnectionFactory</res-type>
    <res-auth>Container</res-auth>
</resource-ref>
    <resource-ref>
    <description>JNDI JMS Queue </description>
    <res-ref-name>jms/queue/QueueOrderUpdate</res-ref-name>
    <res-type>javax.jms.Queue</res-type>
    <res-auth>Container</res-auth>
</resource-ref>

当我启动应用程序时,它给了我:

Could not refresh JMS Connection for destination 'ORDER.QUEUE' - retrying in 5000 ms. Cause: 
CWSIA0025E: The method setExceptionListener is not permitted in this container.
javax.jms.IllegalStateException: CWSIA0025E: The method setExceptionListener is not permitted 
in this container.

ORDER.QUEUE是应用程序从WS引用队列的内容:

<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
    <property name="connectionFactory" ref="jmsCachingConnectionFactory" />
    <!-- same queue as jms/queue/QueueOrderUpdate -->
    <property name="defaultDestinationName" value="ORDER.QUEUE" />
    <property name="messageConverter" ref="orderMessageConverter"/>
</bean>

那应该是

<!-- I think this should be the queue defined for the bus but not the SIB queue right? -->
<jee:jndi-lookup id="jmsQueue" jndi-name="jms/queue/QueueOrderUpdate">
    <jee:environment>
        java.naming.provider.url=${java.naming.provider.url}
        java.naming.factory.initial=${java.naming.factory.initial}
        java.naming.factory.url.pkgs=${java.naming.factory.url.pkgs}
    </jee:environment>
</jee:jndi-lookup> 

它应该是我在Websphere中定义的队列: enter image description here

以下是我的问题:

  1. 如果从Websphere中选择默认的JMS提供程序,那么默认情况下它应该是符合JCA的JMS实现,我认为它应该使用Activation Specification适配器而不是侦听器端口?
  2. 如果是这样,那么我应该在web.xml和Spring bean配置而不是连接工厂中链接激活规范JNDI吗?所以web.xml中应该有三个,一个用于ConnectionFactory,一个用于Queue,一个用于激活规范?
  3. 为何抛出异常?
  4. 更新:

    我发现没有侦听器端口绑定到当前服务器,请参见以下屏幕截图: enter image description here

1 个答案:

答案 0 :(得分:1)

通过Spring JMS for WAS 7查看我的旧项目我对web.xml中的JNDI一无所知。

关于此事的我的春季配置如下:

<bean id="connectionFactory" class="org.springframework.jms.connection.DelegatingConnectionFactory">
    <property name="targetConnectionFactory">
        <jee:jndi-lookup jndi-name="jms/StpConnectionFactory"/>
    </property>
    <property name="shouldStopConnections" value="true"/>
</bean>

<jee:jndi-lookup id="orderQueue" jndi-name="jms/queue/QueueOrderUpdate"/>

我想知道我刚用Default JMS Provider代表ConnectionFactory以及Destination s。