在Jboss EAP6.4中使用带有MDB的.BINDING文件

时间:2016-05-28 18:37:46

标签: java-ee jboss

我正在编写标准的Java EE 5应用程序,需要从MQ serverv8中使用JMS消息(HornetQ)。 MQ管理员提供了一个.bindings文件作为MQ配置。搜索完网页后,我无法找到一种方法来使用带有MDB的.bidings文件。已经尝试过使用标准激活规范。这很好。但为此,JMS属性需要在JBOSS或EE特定的配置文件中。有人可以告诉我们使用.bindings文件和MDB吗?

如何确定jndi和初始上下文工厂名称?

1 个答案:

答案 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/"/>

这将在您可以访问的目的地本地获取您的消息。

  • 道格