我正在编写标准的Java EE 5应用程序,需要从MQ serverv8中使用JMS消息(HornetQ)。 MQ管理员提供了一个.bindings文件作为MQ配置。搜索完网页后,我无法找到一种方法来使用带有MDB的.bidings文件。已经尝试过使用标准激活规范。这很好。但为此,JMS属性需要在JBOSS或EE特定的配置文件中。有人可以告诉我们使用.bindings文件和MDB吗?
如何确定jndi和初始上下文工厂名称?
答案 0 :(得分:0)
虽然可以使用带有MDB激活规范的.bindings文件,但事实证明这是不切实际的。您可以在.bindings文件和MDB激活规范中指定目标,但不能在连接工厂中指定目标。配置连接工厂的属性(即主机,端口,通道等)在激活规范中单独配置。
您可以使用.bindings文件来配置从MQ到JBoss的JMS消息传递桥。然后,您的MDB只会收听当地的HornetQ目的地。为了实现这一目标,您需要:
1)创建IBM MQ客户端模块。消息传递桥将不使用IBM JCA。在UNIX MQ服务器上,您将在/opt/mqm/java/lib/
目录中找到客户端jar。
我创建了一个包含以下jar文件的模块:
./system/layers/base/com/ibm/wmqclient75
./system/layers/base/com/ibm/wmqclient75/main
./system/layers/base/com/ibm/wmqclient75/main/com.ibm.mq.tools.ras.jar
./system/layers/base/com/ibm/wmqclient75/main/com.ibm.mq.axis2.jar
./system/layers/base/com/ibm/wmqclient75/main/com.ibm.mq.headers.jar
./system/layers/base/com/ibm/wmqclient75/main/ldap.jar
./system/layers/base/com/ibm/wmqclient75/main/CL3Nonexport.jar
./system/layers/base/com/ibm/wmqclient75/main/providerutil.jar
./system/layers/base/com/ibm/wmqclient75/main/connector.jar
./system/layers/base/com/ibm/wmqclient75/main/jta.jar
./system/layers/base/com/ibm/wmqclient75/main/com.ibm.mq.soap.jar
./system/layers/base/com/ibm/wmqclient75/main/com.ibm.mq.jms.Nojndi.jar
./system/layers/base/com/ibm/wmqclient75/main/com.ibm.mq.jar
./system/layers/base/com/ibm/wmqclient75/main/com.ibm.mqjms.jar
./system/layers/base/com/ibm/wmqclient75/main/rmm.jar
./system/layers/base/com/ibm/wmqclient75/main/jms.jar
./system/layers/base/com/ibm/wmqclient75/main/com.ibm.mq.commonservices.jar
./system/layers/base/com/ibm/wmqclient75/main/fscontext.jar
./system/layers/base/com/ibm/wmqclient75/main/com.ibm.mq.pcf.jar
./system/layers/base/com/ibm/wmqclient75/main/CL3Export.jar
./system/layers/base/com/ibm/wmqclient75/main/jndi.jar
./system/layers/base/com/ibm/wmqclient75/main/com.ibm.mq.jmqi.jar
./system/layers/base/com/ibm/wmqclient75/main/dhbcore.jar
./system/layers/base/com/ibm/wmqclient75/main/module.xml
我的module.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.0" name="com.ibm.wmqclient75">
<resources>
<resource-root path="com.ibm.mq.commonservices.jar" />
<resource-root path="com.ibm.mq.headers.jar" />
<resource-root path="com.ibm.mq.jar" />
<resource-root path="com.ibm.mq.jmqi.jar" />
<resource-root path="com.ibm.mqjms.jar" />
<resource-root path="com.ibm.mq.pcf.jar" />
<resource-root path="connector.jar" />
<resource-root path="dhbcore.jar" />
<resource-root path="fscontext.jar"/>
<resource-root path="providerutil.jar"/>
</resources>
<dependencies>
<!-- add the dependencies required by JMS Bridge code -->
<module name="javax.api"/>
<module name="javax.resource.api"/>
<module name="javax.jms.api"/>
<module name="javax.transaction.api"/>
<module name="org.jboss.remote-naming"/>
<!-- we depend on org.hornetq module since we will send messages to -->
<!-- the HornetQ server embedded in the local AS7 instance -->
<module name="org.hornetq"/>
</dependencies>
</module>
2)然后,您可以加载配置网桥:
<subsystem xmlns="urn:jboss:domain:messaging:1.4">
....
....
....
<jms-bridge name="wmqBridge" module="com.ibm.wmqclient75">
<target>
<connection-factory name="XAConnectionFactory"/>
<destination name="jms/queue/test"/>
</target>
<source>
<connection-factory name="mqCF"/>
<destination name="mqQueue"/>
<context>
<property key="java.naming.factory.initial" value="com.sun.jndi.fscontext.RefFSContextFactory"/>
<property key="java.naming.provider.url" value="file:///${jboss.server.data.dir}/bindings/"/>
</context>
</source>
<quality-of-service>ONCE_AND_ONLY_ONCE</quality-of-service>
<failure-retry-interval>500</failure-retry-interval>
<max-retries>1</max-retries>
<max-batch-size>1</max-batch-size>
<max-batch-time>1000000</max-batch-time>
<add-messageID-in-header>true</add-messageID-in-header>
</jms-bridge>
</subsystem>
请注意,我引用了我的模块:
<jms-bridge name="wmqBridge" module="com.ibm.wmqclient75">
目的地和连接工厂的名称,如.bindings文件中所示:
<connection-factory name="mqCF"/>
<destination name="mqQueue"/>
我在名为bindings
的标准数据目录下创建了一个目录,并将.bindings文件放在其中:
<property key="java.naming.provider.url" value="file:///${jboss.server.data.dir}/bindings/"/>
这将在您可以访问的目的地本地获取您的消息。