IBM MQ classes for Java 中提供其他连接池

此示例显示了如何使用类 com.ibm.mq.MQSimpleConnectionManager 来提供不同的连接池。

此类提供了连接池的基本功能,且应用程序可以使用此类来定制池的行为。

一旦实例化,就可以在 MQQueueManager 构造函数中指定 MQSimpleConnectionManager。 MQSimpleConnectionManager 随后将管理作为已构造 MQQueueManager 基础的连接。 如果 MQSimpleConnectionManager 包含合适的池连接,那么该连接将在 MQQueueManager.disconnect() 调用后被复用并返回到 MQSimpleConnectionManager。

以下代码片段说明了此行为:

   MQSimpleConnectionManager myConnMan=new MQSimpleConnectionManager();
   myConnMan.setActive(MQSimpleConnectionManager.MODE_ACTIVE);
   MQQueueManager qmgr=new MQQueueManager("my.qmgr.1", myConnMan);
   :
   : (do something with qmgr)
   :
   qmgr.disconnect();
   
   MQQueueManager qmgr2=new MQQueueManager("my.qmgr.1", myConnMan);
   :
   : (do something with qmgr2)
   :
   qmgr2.disconnect();
   myConnMan.setActive(MQSimpleConnectionManager.MODE_INACTIVE);

在第一个 MQQueueManager 构造函数中伪造的连接将在 qmgr.disconnect() 调用后存储在 myConnMan 中。 该连接随后将在第二次调用 MQQueueManager 构造函数期间被复用。

第二行将启用 MQSimpleConnectionManager。 最后一行将禁用 MQSimpleConnectionManager,破坏池中包含的任何连接。 在缺省情况下,MQSimpleConnectionManager 处于 MODE_AUTO 状态,本部分稍后将作说明。

MQSimpleConnectionManager 将以最近最多使用为基础分配连接,并以最近最少使用为基础破坏连接。 缺省情况下,如果连接在五分钟内未被使用,或者池中存在超过十个未使用的连接,那么就会破坏连接。 您可以通过调用 MQSimpleConnectionManager.setTimeout() 来改变这些值。

您也可以设置 MQSimpleConnectionManager 作为缺省连接池使用,如果 MQQueueManager 构造函数上未提供连接管理器,就将使用该连接池。

以下应用程序说明了此操作:

import com.ibm.mq.*;
public class MQApp4
{
      public static void main(String []args)
      {
         MQSimpleConnectionManager myConnMan=new MQSimpleConnectionManager();
         myConnMan.setActive(MQSimpleConnectionManager.MODE_AUTO);
         myConnMan.setTimeout(3600000);
         myConnMan.setMaxConnections(75);
         myConnMan.setMaxUnusedConnections(50);
         MQEnvironment.setDefaultConnectionManager(myConnMan);
         MQApp3.main(args);
      }
}
粗体行将创建并配置 MQSimpleConnectionManager 对象。 配置过程将执行以下任务:
  • 结束在一个小时内未使用的连接
  • 将 myConnMan 管理的连接数量限制为 75
  • 将池中未使用的连接数量限制为 50
  • 设置 MODE_AUTO,这是缺省值。 这意味着仅当池作为缺省连接管理器,且 MQEnvironment 包含的 MQPoolToken 集中至少有一个令牌时,该池才处于活动状态。
新的 MQSimpleConnectionManager 随后会设置为缺省连接管理器。

在最后一行中,应用程序将调用 MQApp3.main()。这会运行多个线程,其中每个线程都独立使用 IBM® MQ。 这些线程会在伪造连接时使用 myConnMan。