2015-09-17 32 views
2

我试图在JBoss第一次使用IBM MQ适配器(即使是第一次使用JBoss)。我们正在将我们的应用程序从WebSphere7迁移到JBoss 6.3。为此,我需要配置我们以前在IBM WebSphere上使用的相同的MQ。因此我开始配置IBM资源适配器。以下是standalone.xml文件配置。 下面的配置工作正常,但是我不能够得到的QueueConnectionFactory代码为(QueueConnectionFactory) context.lookup("java:/comp/env/serviceQCF"),因为它会引发类转换异常(com.ibm.mq.connector.outbound.ConnectionFactoryImpl不能转换到了javax.jms.QueueConnectionFactory)。JBoss 6.3上的IBM MQ资源适配器问题

当我使用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 - 服务jboss.naming.context.java.comp.env.serviceQCF *

我一直在使用连接工厂但是同样的结果(姓名未发现异常)

<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> 

尝试我是否需要进行配置,以便除此之外呢?我需要添加/修改任何类路径吗?如果是,在哪里以及如何?

目前没有设置任何财产而获得语境:

上下文=新的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

我想你应该在试图将它与资源适配器一起使用之前定义目标'java:/ comp/env/serviceQCF'。

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

正如Doug指出的那样,您必须使用ManageQueueConnectionFactoryImpl,但对我来说这还不够。我还必须将下面的内容添加到standalone.xml中。没有它,即使该类实现了该接口,我也无法将IBM QueueConnectFactoryImpl类转换为JMS QueueConnectionFactory。

<subsystem xmlns="urn:jboss:domain:messaging-activemq:1.0"/>