我们的Java应用程序通过Weblogic JMS消息桥写入MQ Series队列。实际的MQ Series连接/队列详细信息存储在应用服务器上的MQ Series .bindings文件中。我从来没有真正了解绑定文件以及所有条目的含义。任何人都可以提供指导来理解这个文件吗?
答案 0 :(得分:39)
在解决.bindings文件之前,我们需要退一步看看JNDI - Java命名和目录接口 - 以及JMS如何使用它。 Queue,Topic和各种类型的Connection Factory都是具有方法和属性的运行时JMS对象。但是您可以预先定义它们并将它们存储在JMS应用程序可以使用JNDI查找检索它们的注册表中。
这很有用,因为对象就像硬币,因为它们有JMS端和提供者特定端。在JMS方面,任何管理对象看起来都是一样的。无论底层传输提供程序如何,ConnectionFactory都具有相同的方法和属性。但是,在特定于提供者的一方,管理对象看起来与一个传输提供者到下一个传输提供者看起来非常不同。例如,与WebSphere MQ传输一起使用的ConnectionFactory将具有Queue Manager的属性。没有其他传输提供程序具有“队列管理器”,因此该属性仅在WMQ上下文中有效。
管理对象的两个方面是允许JMS独立于传输提供程序工作的“粘合剂”。在您的代码中,您只需要查找ConnectionFactory并获得一个适合执行方法调用的对象。在幕后,提供程序的JMS类使用特定于提供程序的对象属性来提供上下文,以将通用JMS API调用转换为特定于提供程序的调用。因此,您实例化的连接对象会导致WMQ CONNECT调用,该调用指定QMgr名称,主机,端口,通道和各种其他参数。
好的,我答应去.bindings文件。我先前说过JNDI查找是针对“注册表”的,这通常意味着LDAP或类似的。但Sun设计的JNDI就像JMS一样,因为你的程序使用的API和注册表使用的SPI或服务提供者接口。因此,虽然JNDI 可以在LDAP中实现,但没有任何内容表明必须在LDAP中实现。 Sun提供的一个基本实现是使用本地文件系统作为注册表。在此实现中,根上下文是文件夹。每个上下文可以存储另一个子上下文(另一个文件夹)或对象定义。通常,根上下文有一个文件夹,所有对象都在该级别定义。保存对象定义的文件是......你猜对了... .bindings文件。
.bindings文件中的对象以Name / Type / Value三元组表示。因此每个.bindings文件通常都有许多对象。每个对象都有许多属性。每个属性都有一个名称,一个值以及保存该值的变量类型。获取.bindings文件句柄的最佳方法是对其进行排序,将所有对象及其属性放在一起,使其更具人性化。有关可能属性的列表,请参阅the manual。
当然,.bindings文件应该是一个已编译的工件,并不是人类可读的。 IBM提供了JMSAdmin工具来生成和读取.bindings文件。您还可以使用WMQ Explorer管理.bindings文件中的受管对象。这些也在上面链接的手册中讨论。 developerWorks here中还有一些(有些人说的)优秀教程。