java websphere MQ

Moim celem jest wprowadzenie liczby wiadomości w pętli for do kolejki WebSphere MQ przy użyciu programowania java produktu WebSphere MQ.

Mój program java będzie działał jako samodzielny program.

Jeśli jakiś wyjątek między nimi, muszę wycofać wszystkie wiadomości.

Jeśli nie ma wyjątku, powinienem przekazać wszystkie wiadomości.

Świat zewnętrzny nie powinien widzieć moich wiadomości w kolejce, dopóki nie dokończę w pełni. Jak to osiągnąć?

Zaktualizowano kod przykładowy zgodnie z odpowiedzią T.Rob:

Sprawdź, czy kod przykładowy jest w porządku?

Czy ustawienie MQGMO_SYNCPOINT dotyczy tylko wywołania mojego programu? (ponieważ podobne programy działające równolegle będą także umieszczać wiadomości w tej samej kolejce, a te komunikaty nie powinny zostać naruszone przez SYNCPOINT mojego programu).

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

questionAnswers(3)

yourAnswerToTheQuestion