我第一次尝试在JBoss中使用IBM MQ适配器(即使是第一次使用JBoss)。我们正在将我们的应用程序从WebSphere7迁移到JBoss 6.3。为此,我需要配置我们曾经在IBM WebSphere上使用的相同MQ。因此我开始配置IBM Resource adapter。以下是standalone.xml文件配置。
下面的配置工作正常但是我无法使用代码(QueueConnectionFactory) context.lookup("java:/comp/env/serviceQCF")
获得 QueueConnectionFactory ,因为它会抛出类强制转换异常( com.ibm.mq.connector.outbound.ConnectionFactoryImpl 无法转换为javax.jms.QueueConnectionFactory)。
当我使用connection-definition class-name="javax.jms.QueueConnectionFactory" jndi-name="java:/comp/env/serviceQCF" enabled="true" pool-name="ConnectionClass"
时,* JBoss正在抛出异常
javax.naming.NameNotFoundException:comp / env / serviceQCF - service jboss.naming.context.java.comp.env.serviceQCF *
我尝试过使用 ConnectionFactory ,但结果相同(找不到名称)
<subsystem xmlns="urn:jboss:domain:resource-adapters:1.1">
<resource-adapters>
<resource-adapter id="wmq.jmsra.rar">
<archive>
wmq.jmsra.rar
</archive>
<transaction-support>LocalTransaction</transaction-support>
<connection-definitions>
<connection-definition class-name="com.ibm.mq.connector.outbound.ManagedConnectionFactoryImpl" jndi-name="java:/comp/env/serviceQCF" enabled="true" pool-name="ConnectionClass">
<config-property name="port">
1414
</config-property>
<config-property name="channel">
MQ.CLT.STH.CHL
</config-property>
<config-property name="hostName">
127.0.0.127
</config-property>
<config-property name="transportType">
MQ.CLIENT
</config-property>
<config-property name="queueManager">
MQSYKHT0
</config-property>
<security>
<application/>
</security>
<validation>
<background-validation>false</background-validation>
</validation>
</connection-definition>
</connection-definitions>
我是否需要配置其他东西?我需要添加/修改任何类路径吗?如果是,在哪里以及如何?
目前在获取上下文时未设置任何属性:
context = new InitialContext();
但尝试使用以下内容:
final Properties env = new Properties();
env.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
env.put(Context.PROVIDER_URL, "remote://localhost:4447");
但没有运气。
请帮帮我。
答案 0 :(得分:1)
这里有几点需要注意。 JMS规范具有特定的域:
QueueConnectionFactory
TopicConnectionFactory
非特定领域:
ConnectionFactory
您的服务器配置文件中的代码应该具有正确的类型。请注意,您可以查看IBM MQ JCA中META-INF文件夹中打包的ra.xml文件,了解类型:
com.ibm.mq.connector.outbound.ManagedTopicConnectionFactoryImpl
com.ibm.mq.connector.outbound.ManagedQueueConnectionFactoryImpl
com.ibm.mq.connector.outbound.ManagedConnectionFactoryImpl
具体来说,对于强制转换为QueueConnectionFactory,您应该使用ManagedQueueConnectionFactoryImpl。
请注意,IBM MQ JCA托管对象不能在远程客户端中使用。它们只能从加载IBM MQ JCA的JVM访问。
答案 1 :(得分:1)
Doug指出你必须使用ManageQueueConnectionFactoryImpl,但对我来说还不够。我还必须将下面的内容添加到standalone.xml中。没有它,我无法将IBM QueueConnectFactoryImpl类强制转换为JMS QueueConnectionFactory,即使该类实现了该接口。
<subsystem xmlns="urn:jboss:domain:messaging-activemq:1.0"/>
答案 2 :(得分:0)
我认为你应该定义目的地&#39; java:/ comp / env / serviceQCF&#39;在尝试将其与资源适配器一起使用之前。