Java Websphere MQ

Mein Ziel ist es, mithilfe der Java-Programmierung von WebSphere MQ n Nachrichten in einer for-Schleife in eine WebSphere MQ-Warteschlange zu stellen.

Mein Java-Programm wird als eigenständiges Programm ausgeführt.

Wenn eine Ausnahme dazwischen liegt, muss ich alle Nachrichten zurücksetzen.

Wenn keine Ausnahme, dann sollte ich alle Nachrichten festschreiben.

Die Außenwelt sollte meine Nachrichten nicht in der Warteschlange sehen, bis ich vollständig fertig bin. Wie erreiche ich das?

Aktualisiert mit Beispielcode gemäß Antwort von T.Rob:

Bitte überprüfen Sie, ob der Beispielcode in Ordnung ist.

Bezieht sich die Einstellung von MQGMO_SYNCPOINT nur auf den Aufruf meines Programms? (Da ähnliche Programme, die parallel ausgeführt werden, auch Nachrichten in dieselbe Warteschlange stellen und diese Nachrichten nicht von SYNCPOINT meines Programms betroffen sein sollten.)

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();
            }
        }
    }

Antworten auf die Frage(3)

Ihre Antwort auf die Frage