如何从Spring中定义在Websphere app Server中定义的MQ连接工厂的jndi查找

时间:2013-03-21 11:49:07

标签: spring jndi ibm-mq lookup

我正在尝试连接到Websphere app Server 7.0中定义的MQ连接工厂。

但我无法找到一个正确的connectionfactory接口,以便在Spring中定义MQ。

但是,当我尝试在spring配置文件中对连接详细信息进行硬编码时,我可以连接到队列管理器。

在Spring bean中使用什么是正确的接口/格式来加载在Websphere appl服务器中定义的MQ连接工厂?

工作代码

<bean id="mqConnectionFactory" class="com.ibm.mq.jms.MQQueueConnectionFactory">
    <property name="hostName">
        <value>127.0.0.1</value>
    </property>
    <property name="port">
        <value>1414</value>
    </property>
    <property name="queueManager">
        <value>MYQM</value>
    </property>
    <property name="transportType">
        <value>1</value>
    </property>
</bean>

不工作代码

<bean id="mqConnectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiName" value="jms/WASQM"/>
    <property name="lookupOnStartup" value="false"/>
    <property name="cache" value="true" />
    <property name="proxyInterface"  value="com.ibm.mq.jms.MQQueueConnectionFactoryFactory" />
</bean>

其中WASQM是Websphere中定义的MQ连接工厂

非工作代码错误

 org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'mqConnectionFactory' defined in ServletContext resource [/WEB-INF/config/config-mq.xml]: Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: [com.ibm.mq.jms.MQQueueConnectionFactoryFactory] is not an interface
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1420)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:291)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:288)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190)
Caused by: java.lang.IllegalArgumentException: [com.ibm.mq.jms.MQQueueConnectionFactoryFactory] is not an interface

我需要帮助用正确的代码替换不工作的代码。 春天 - 3.0.5 IBM MQ和Web App Server - 7.0

1 个答案:

答案 0 :(得分:4)

正确的方法是

  1. 在Websphere App Server(不在连接工厂中)的队列连接工厂中创建资源
  2. 使用javax.jms.QueueConnectionFactory作为spring config中的连接工厂

    <bean id="mqConnectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean">
       <property name="jndiName" value="WASQM"/>
       <property name="lookupOnStartup" value="false"/>
       <property name="cache" value="true" />
       <property name="proxyInterface"  value="javax.jms.QueueConnectionFactory" />
    </bean>
    
  3. page给了我一些提示。