以下の素敵なコードを継承しました。
私がそれを読んだ方法では、開発者は 3 つの仮定を立てています。
- MQQueueManager インスタンスは、必ずしも isConnected() が true を返す状態で作成されるとは限りません
- 状態 isConnected() == false で作成された場合、状態は「後で」変更される可能性があるため、タイムアウト コード
- 切断された MQQueueManager からアクセス キューを作成しようとしても、例外はスローされません。
私が期待するのは、MQQueueManager インスタンスが状態 isConnected() == true で作成され、この状態が後で変更される可能性があり (ネットワーク障害など)、この状態変更 (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;