JMS 连接工厂

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

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

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

在图中,名为 Connection Factory 1 的连接工厂存储在名为 File System Initial Context 的初始上下文的“连接工厂”文件夹中。

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

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

独立于域的连接工厂

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

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

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

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

有关更多信息,请参阅 IBM Documentation中的 Using IBM MQ classes for JMS