私の目的は、WebSphere MQ Javaプログラミングを使用して、n個のメッセージをforループに入れてWebSphereMQキューに入れることです。
私のJavaプログラムはスタンドアロンプログラムとして実行されます。
間に例外がある場合は、すべてのメッセージをロールバックする必要があります。
例外がなければ、すべてのメッセージをコミットする必要があります。
私が完全に完了するまで、外の世界は私のメッセージをキューに入れるべきではありません。どうすればこれを達成できますか?
T.Robからの返信に従ってサンプルコードで更新:
サンプルコードに問題がないか確認してください。
MQGMO_SYNCPOINTの設定は、私のプログラムの呼び出しにのみ関連していますか?(並列で実行されている同様のプログラムも同じキューにメッセージを配置し、それらのメッセージが私のプログラムのSYNCPOINTの影響を受けないようにするためです。)
public void sendMsg() {
MQQueue queue = null;
MQQueueManager queueManager = null;
MQMessage mqMessage = null;
MQPutMessageOptions pmo = null;
System.out.println("Entering..");
try {
MQEnvironment.hostname = "x.x.x.x";
MQEnvironment.channel = "xxx.SVRCONN";
MQEnvironment.port = 9999;
queueManager = new MQQueueManager("XXXQMANAGER");
int openOptions = MQConstants.MQOO_OUTPUT;
queue = queueManager.accessQueue("XXX_QUEUENAME", openOptions, null, null, null);
pmo = new MQPutMessageOptions();
pmo.options = CMQC.MQGMO_SYNCPOINT;
String input = "testing";
System.out.println("sending messages....");
for (int i = 0; i < 10; i++) {
input = input + ": " + i;
mqMessage = new MQMessage();
mqMessage.writeString(input);
System.out.println("Putting message: " + i);
queue.put(mqMessage, pmo);
}
queueManager.commit();
System.out.println("Exiting..");
} catch (Exception e) {
e.printStackTrace();
try {
System.out.println("rolling back messages");
if (queueManager != null)
queueManager.backout();
} catch (MQException e1) {
e1.printStackTrace();
}
} finally {
try {
if (queue != null)
queue.close();
if (queueManager != null)
queueManager.close();
} catch (MQException e) {
e.printStackTrace();
}
}
}