我正在编写一个标准的 JEE 5 应用程序,需要使用来自 MQ 服务器的 JMS 消息。应用服务器是 JBOSS EAP 5.1。由于这是一个标准的 JEE 应用程序,因此 MDB 非常适合作为消息侦听器。MQ 管理员提供了一个 .bindings 文件作为 MQ 配置。搜索网页后,我无法找到将 .bidings 文件与 MDB 一起使用的方法。我已经尝试过使用标准激活规范。这很好用。但是为此,JMS 属性需要在 JBOSS 或 EE 特定的配置文件中。有人可以告诉一种在 MDB 中使用 .bindings 文件的方法吗?
2 回答
.bindings 文件来自文件系统 JNDI 上下文。这是当 FileSystemContext 用于在 JNDI 中存储对象时写入的文件。它不应该真的被移动。
JBOSS 将拥有自己的 JNDI 提供程序,并且无法读取此文件。您需要的是来自您需要连接到的队列管理器的 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
在 JBoss 5.1 上使用由 IBM MQ 工具创建的 .bindings 文件相对简单。
据推测,您已经拥有 MQ 管理员创建的 .bindings 文件。
在 JBOss 方面,您将使用:
com.sun.jndi.fscontext.RefFSContextFactory
命名上下文工厂读取 .bindings 文件并将其加载到 JBoss JNDI。为此,您将需要未作为 IBM MQ JCA rar 文件的一部分提供的额外 jar。在 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} 中有一个名为“mq”的目录。.bindings 文件就在那里。您的命名上下文将在 JNDI 中加载到:
java:/BindingsNamingContext
笔记:
java:/BindingsNamingContext/mqConnectionFactory java:/BindingsNamingContext/mqConnectionFactory
'java:/BindingsNamingContext' 匹配提供者,'mqConnectionFactory' 匹配我的 .bindings 文件中的内容。