我继承了下面这段可爱的代码。
我阅读它的方式,开发人员做了三个假设:
- MQQueueManager 实例不一定在 isConnected() 返回 true 的状态下创建
- 如果它是在状态 isConnected() == false 中创建的,则状态可能会“稍后”更改,因此超时代码
- 如果您尝试从断开连接的 MQQueueManager 创建访问队列,它不会抛出异常。
我期望的是在状态 isConnected() == true 下创建 MQQueueManager 实例,该状态可能会在以后更改(网络故障等),并且此状态更改(isConnected() == false)会导致对队列因 MQException 而失败。
文档在这些点上都保持沉默,只是要注意在手动断开 MQQueueManager 后重新连接到队列的唯一方法是创建一个新的 MQQueueManager 实例。
谁能让我在这里直截了当?
qMgr = new MQQueueManager( qManager );
// Set up the options on the queue we wish to open...
// Note. All WebSphere MQ Options are prefixed with MQC in Java.
final int openOptions = MQC.MQOO_INPUT_AS_Q_DEF | MQC.MQOO_OUTPUT;
// Now specify the queue that we wish to open,
// and the open options...
queue = qMgr.accessQueue( queueName, openOptions );
// Set the get message options...
final MQGetMessageOptions gmo = new MQGetMessageOptions(); // accept the
// defaults
gmo.options = MQC.MQGMO_WAIT;
gmo.waitInterval = 1000;
connectionStatus = CONNECTING;
int timeOutCounter = 0;
while(!qMgr.isConnected()) {
InboundMsgTask.sleep(1000);
timeOutCounter++;
if(timeOutCounter > 4) {
connectionStatus = TIME_OUT;
return;
}
}
connectionStatus = CONNECTED;