我正在编写标准的JEE 5应用程序,需要使用来自MQ服务器的JMS消息。应用服务器是JBOSS EAP 5.1。由于这是一个标准的JEE应用程序,因此MDB非常适合作为消息监听器。 MQ管理员提供了一个.bindings文件作为MQ配置。搜索完网页后,我无法找到一种方法来使用带有MDB的.bidings文件。我已经尝试过使用标准激活规范。这很好。但为此,JMS属性需要在JBOSS或EE特定的配置文件中。 有人可以告诉我们使用.bindings文件和MDB吗?
答案 0 :(得分:1)
.bindings文件来自文件系统JNDI上下文。这是在FileSystemContext用于在JNDI中存储对象时写入的文件。它不应该被转移。
JBOSS将拥有它自己的JNDI提供商,并且无法读取此文件。您需要的是您需要连接到的queuemanager的MQ系统管理员的信息,即输入JNDI的信息。大概使用JMSAdmnin或MQExplorer。主机名,端口,频道,任何安全配置等等。
在JBOSS中你需要部署MQ资源适配器(a)这个可下载的http://www-01.ibm.com/support/docview.wss?uid=swg21633761(b)配置信息可以在http://www-01.ibm.com/support/knowledgecenter/SSFKSJ_7.5.0/com.ibm.mq.dev.doc/q031820_.htm找到
答案 1 :(得分:0)
使用JBoss 5.1上的IBM MQ工具创建的.bindings文件相对简单。
据推测,您已经拥有了由MQ管理员创建的.bindings文件。
在JBOss方面,您将使用:
com.sun.jndi.fscontext.RefFSContextFactory
命名上下文工厂以读取并将.bindings文件加载到JBoss JNDI中。为此,您需要额外的jar,这些jar不是作为IBM MQ JCA rar文件的一部分提供的。在Unix系统上,可以在:
下的IBM MQ分发中找到它们/opt/mqm/java/lib/
目录。你需要:
fscontext.jar
mqcontext.jar
providerutil.jar
将它们放在$ {JBOSS_PROFILE)/ lib目录中。
然后,在$ {JBOSS_PROFILE)/ deploy / messaging目录中,创建一个名为wmq-bindings-ds.xml的文件:
<?xml version="1.0" encoding="UTF-8"?>
<connection-factories>
<!-- Load the bindings file for the naming context -->
<mbean code="org.jboss.naming.ExternalContext" name="jboss.jndi:service=ExternalContext,jndiName=BindingsNamingContext">
<attribute name="JndiName">java:/BindingsNamingContext</attribute>
<attribute name="Properties">
java.naming.factory.initial=com.sun.jndi.fscontext.RefFSContextFactory
java.naming.provider.url=file:///${jboss.server.data.dir}/mq
</attribute>
<attribute name="InitialContext">javax.naming.InitialContext</attribute>
</mbean>
<!-- The WSMQ JMS provider loader -->
<mbean code="org.jboss.jms.jndi.JMSProviderLoader" name="jboss.mq:service=JMSProviderLoader,name=BindingsWSMQJMSProvider">
<attribute name="ProviderName">BindingsWSMQJMSProvider</attribute>
<attribute name="ProviderAdapterClass">org.jboss.jms.jndi.JNDIProviderAdapter</attribute>
<attribute name="QueueFactoryRef">java:/BindingsNamingContext/mqConnectionFactory</attribute>
<attribute name="TopicFactoryRef">java:/BindingsNamingContext/mqConnectionFactory</attribute>
</mbean>
</connection-factories>
请注意,我的$ {jboss.server.data.dir}中有一个名为&#39; mq&#39;的目录。 .bindings文件就在那里。您的命名上下文将在JNDI中加载:
java:/BindingsNamingContext
注意:
的java:/ BindingsNamingContext / mqConnectionFactory 的java:/ BindingsNamingContext / mqConnectionFactory
&#39; java:/ BindingsNamingContext&#39;匹配提供商,&#39; mqConnectionFactory&#39;匹配我的.bindings文件中的内容。