以下のコードconnect()メソッドでは、2009 および 2059 の例外をキャッチできます。しかし、getMessage()メソッドで 2009 または 2059 MQ 例外を生成するためにキュー マネージャーまたは接続を停止すると、プログラムがハングするか、スローされませんでした。並んでいqueue.get(retrievedMessage, getOptions);ます。
接続またはキュー マネージャーが壊れている場合にコードに認識させるために、追加の open オプションを追加する必要がありますか?
接続()
{
MQEnvironment.hostname = ホスト名;
MQEnvironment.channel = channelName;
MQEnvironment.port = ポート名;
試す
{
qMgr = 新しい MQQueueManager(EvtqManager); // キュー マネージャー オブジェクトを定義します
LOGGER.debug("Queue Manager " +EvtqManager+ " インスタンスが初期化されました");
int openOptions = MQC.MQOO_INQUIRE + MQC.MQOO_FAIL_IF_QUIESCING+ MQC.MQOO_INPUT_SHARED;
queue = qMgr.accessQueue(queueName, openOptions, null,null,null);
LOGGER.debug("IBM MQQueue:"+queueName+" にアクセスしました");
getOptions = 新しい MQGetMessageOptions();
getOptions.options = MQC.MQGMO_NO_WAIT;
getMessage();
}
キャッチ(){
if(MQex.reasonCode==2009 || MQex.reasonCode==2059){
シャットダウン();
接続();
}
}
getMessage(){
MQMessage を取得したメッセージ。
ながら(真){
試す {
retrieveMessage = 新しい MQMessage();
queue.get(retrievedMessage, getOptions);
PCFMessage pcfMessage = 新しい PCFMessage(retrievedMessage);
}
キャッチ (MQException MQex) {
if(MQex.reasonCode==2009 || MQex.reasonCode==2059){
シャットダウン();
接続();
}
}
}
`