在 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);
}
}
- 结束在一个小时内未使用的连接
- 将 myConnMan 管理的连接数量限制为 75
- 将池中未使用的连接数量限制为 50
- 设置 MODE_AUTO,这是缺省值。 这意味着仅当池作为缺省连接管理器,且 MQEnvironment 包含的 MQPoolToken 集中至少有一个令牌时,该池才处于活动状态。
在最后一行中,应用程序将调用 MQApp3.main()。这会运行多个线程,其中每个线程都独立使用 IBM® MQ。 这些线程会在伪造连接时使用 myConnMan。