0

我正在编写一个标准的 JEE 5 应用程序,需要使用来自 MQ 服务器的 JMS 消息。应用服务器是 JBOSS EAP 5.1。由于这是一个标准的 JEE 应用程序,因此 MDB 非常适合作为消息侦听器。MQ 管理员提供了一个 .bindings 文件作为 MQ 配置。搜索网页后,我无法找到将 .bidings 文件与 MDB 一起使用的方法。我已经尝试过使用标准激活规范。这很好用。但是为此,JMS 属性需要在 JBOSS 或 EE 特定的配置文件中。有人可以告诉一种在 MDB 中使用 .bindings 文件的方法吗?

4

2 回答 2

1

.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

于 2014-09-12T12:39:43.827 回答
0

在 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 文件中的内容。

于 2015-02-15T15:34:14.387 回答