19

我们的 Java 应用程序通过 Weblogic JMS 消息桥写入 MQ 系列队列。实际的 MQ 系列连接/队列详细信息存储在应用服务器上的 MQ 系列 .bindings 文件中。我从来没有真正了解绑定文件以及所有条目的含义。任何人都可以提供指导来理解这个文件吗?

4

1 回答 1

44

在处理 .bindings 文件之前,我们需要退后一步,看看 JNDI——Java 命名和目录接口——以及 JMS 是如何使用它的。队列、主题和各种类型的连接工厂都是具有方法和属性的运行时 JMS 对象。但是您可以预先定义它们并将它们存储在注册表中,JMS 应用程序可以使用 JNDI 查找来检索它们。

这很有帮助,因为对象就像硬币一样,它们具有 JMS 端和特定于提供者的端。在 JMS 方面,任何受管对象看起来都差不多。无论底层传输提供程序如何,ConnectionFactory 都具有相同的方法和属性。但是,在特定于提供者的方面,管理对象看起来从一个传输提供者到下一个非常不同。例如,与 WebSphere MQ 传输一起使用的 ConnectionFactory 将具有队列管理器的属性。没有其他传输提供者具有“队列管理器”,因此该属性仅在 WMQ 上下文中有效。

管理对象的两个方面是允许 JMS 独立于传输提供者工作的“粘合剂”。在您的代码中,您只需查找 ConnectionFactory 并获得适合执行方法调用的对象。在幕后,提供者的 JMS 类使用特定于提供者的对象属性来提供上下文,以将通用 JMS API 调用转换为特定于提供者的调用。因此,您实例化的连接对象会导致 WMQ CONNECT 调用,该调用指定 QMgr 名称、主机、端口、通道和各种其他参数。

好的,我答应访问 .bindings 文件。我之前说过,JNDI 查找是针对“注册表”的,这通常意味着 LDAP 或类似的。但是 Sun 像 JMS 一样设计了 JNDI,其中有一个您的程序使用的 API 和一个注册中心使用的 SPI 或服务提供者接口。所以,虽然 JNDI可以在 LDAP 中实现,但没有什么说它必须在 LDAP 中实现。Sun 提供的开箱即用的基本实现之一是将本地文件系统用作注册表。在这个实现中,根上下文是一个文件夹。每个上下文可以存储另一个子上下文(另一个文件夹)或对象定义。通常,根上下文有一个文件夹,所有对象都在该级别定义。保存对象定义的文件是……你猜对了…….bindings 文件。

.bindings 文件中的对象以名称/类型/值三元组表示。所以每个 .bindings 文件通常都有很多对象。每个对象都有许多属性。每个属性都有一个名称、一个值和保存该值的变量类型。获取 .bindings 文件句柄的最佳方法是对其进行排序,这会将所有对象及其属性放在一起,使其更易于阅读。有关可能属性的列表,请参阅手册

当然,.bindings 文件应该是编译后的工件,而不是供人类阅读的。IBM 提供了 JMSAdmin 工具来生成和读取 .bindings 文件。您还可以使用 WMQ Explorer 来管理 .bindings 文件中的管理对象。这些也在上面链接的手册中进行了讨论。developerWorks 中还有一个(有人说)很好的教程

于 2010-04-17T03:40:01.027 回答