JMS 连接工厂

连接工厂是 JMS 客户机(使用 JMS API 的 JMS 程序)用于创建与 JNDI 提供程序(消息传递提供程序,如 IBM® MQ)的连接的对象。

可以使用 IBM MQ Explorer 来创建连接工厂以及定义连接工厂将用于创建连接的连接参数。

像目标一样,连接工厂也是受管对象,存储在 JNDI 名称空间中,该名称空间是命名和目录服务中的一个已定义位置。初始上下文定义 JNDI 名称空间的根。在 IBM MQ Explorer 中,所有连接工厂都存储在相应上下文和子上下文的“连接工厂”文件夹中,如下图中所示。

在该图中,称为连接工厂 1 的连接工厂存储在称为文件系统初始上下文的初始上下文的“连接工厂”文件夹中。

“连接工厂”文件夹中的连接工厂的截屏。

当您定义连接工厂时,需要选择用作 JMS 提供程序(例如,IBM MQ 或实时)的消息传递提供程序;连接工厂只能创建与该消息传递提供程序的连接。要使 JMS 客户机能够创建与其他消息传递提供程序的连接,您必须创建新的连接工厂并指定该消息传递提供程序。在 IBM MQ V8.0 中无法进行实时传输。如果使用 IBM MQ V8.0,那么可以定义实时传输,但在尝试创建连接时会失败。

独立于域的连接工厂

存在两种消息传递域:点到点消息传递域和发布/预订消息传递域。您可以创建连接工厂以针对点到点消息传递创建连接(使用 QueueConnectionFactory 接口)或针对发布/预订消息传递创建连接(使用 TopicConnectionFactory 接口)。从 JNDI 开始,您还可以创建独立于域的连接工厂,所以可以将这些连接工厂同时用于点到点消息传递和发布/预订消息传递(使用 ConnectionFactory 接口)。有关更多信息,请参阅创建连接工厂

如果 JMS 应用程序仅打算使用点到点消息传递或仅使用发布/预订消息传递,那么您可以在创建连接工厂时选择特定消息传递域,这样将创建特定于域的连接工厂。

然而,如果您要在同一事务中同时执行点到点工作和发布/预订工作,那么您可以创建独立于域的连接工厂。例如,您可能想要 JMS 应用程序预订某个主题(发布/预订消息传递),然后当该 JMS 应用程序接收到特定消息时,它将另一条消息发送至队列(点到点消息传递)。如果您使用特定于域的连接工厂,那么很难在同一事务下可靠地执行点到点工作和发布/预订工作:您必须为每个消息传递域创建一个单独的连接工厂,这意味着点到点工作将在 QueueSession 会话控制的事务下完成,而发布/预订工作将在 TopicSession 会话控制的事务下完成。很难确保发送和接收操作同时发生或同时被回退。

不必为完成点到点工作创建一个特定于域的连接工厂并为完成发布/预订工作再创建一个特定于域的连接工厂,您可以为完成这两种工作创建单个独立于域的连接工厂。这表示该连接工厂创建一个连接,然后该连接创建一个会话。该会话创建某个主题的消息使用者和某个队列的消息生产者。当 JMS 应用程序接收到发布的消息时,可以在同一会话的事务中将下一条消息发送至队列;然后可以作为单个工作单元落实或回滚两种操作。

有关更多信息,请参阅 IBM MQ 联机产品文档中的 针对 JMS 使用 IBM MQ 类


概念 概念

反馈

时间戳记图标 最近一次更新时间: Wednesday, 14 February 2018
http://www.ibm.com/support/knowledgecenter/SSFKSJ_9.0.0/com.ibm.mq.explorer.doc/com.ibm.mq.explorer.doc/j_connection_factory.htm