Consultor Eletrônico



Kbase 21185: How to code an application against the SonicMQ Adapter which can detect a lost connection/broker dow
Autor   Progress Software Corporation - Progress
Acesso   Público
Publicação   16/10/2008
Status: Verified

GOAL:

How to code an application against the SonicMQ Adapter which can detect a lost connection/broker down situation

FACT(s) (Environment):

Progress 9.1C
SonicMQ 3.5

FIX:

/* Installs an error handler to deal with a JMS server communication loss. */

DEFINE VARIABLE ptpsession AS HANDLE NO-UNDO.
DEFINE VARIABLE errorConsumer AS HANDLE NO-UNDO.
DEFINE VARIABLE messageConsumer AS HANDLE NO-UNDO.
DEFINE VARIABLE jmsIsOk AS LOGICAL NO-UNDO INITIAL yes.

RUN jms/ptpsession.p PERSISTENT SET ptpsession ("-H localhost -S 5162").
RUN setBrokerURL IN ptpsession ("localhost:2506").
RUN setPingInterval IN ptpsession(60).
RUN beginSession IN ptpsession.

RUN createMessageConsumer IN ptpsession(THIS-PROCEDURE, "errorHandler", OUTPUT errorConsumer).
                                            
RUN createMessageConsumer IN ptpsession(THIS-PROCEDURE, "messageHandler", OUTPUT messageConsumer).
RUN setErrorHandler IN ptpsession (errorConsumer).
RUN receiveFromQueue IN ptpsession ("SampleQ1", ?, messageConsumer).
RUN startReceiveMessages IN ptpsession.

/* Wait indefinitely for messages until the connection with the JMS server is */
/* lost with error code "-5" (shutdown the SonicMQ broker to simulate that). */

RUN waitForMessages IN ptpsession ("inWait", THIS-PROCEDURE, ?).

IF NOT jmsIsOk THEN
DO:
MESSAGE "Disconnecting from JMS Server..." VIEW-AS ALERT-BOX.
   RUN deleteSession IN ptpsession.
END.


FUNCTION inWait RETURNS LOGICAL ():
RETURN jmsIsOk.
END FUNCTION.


PROCEDURE errorHandler:
DEFINE INPUT PARAMETER messageH AS HANDLE NO-UNDO.
DEFINE INPUT PARAMETER messageConsumerH AS HANDLE NO-UNDO.
DEFINE OUTPUT PARAMETER replyH AS HANDLE NO-UNDO.

DEFINE VARIABLE errorCode AS CHARACTER NO-UNDO.
DEFINE VARIABLE errorText AS CHARACTER NO-UNDO.

ASSIGN errorCode = DYNAMIC-FUNCTION('getCharProperty':U IN messageH, "errorCode")
errorText = DYNAMIC-FUNCTION('getText':U IN messageH).

RUN deleteMessage IN messageH.

MESSAGE "From errorHandler: " errorText errorCode VIEW-AS ALERT-BOX.

IF errorCode = "-5" THEN
ASSIGN jmsIsOk = no.
END PROCEDURE.


PROCEDURE messageHandler:
DEFINE INPUT PARAMETER messageH AS HANDLE NO-UNDO.
DEFINE INPUT PARAMETER messageConsumerH AS HANDLE NO-UNDO.
DEFINE OUTPUT PARAMETER replyH AS HANDLE NO-UNDO.

MESSAGE "Message text: " DYNAMIC-FUNCTION('GetText':U IN messageH).

RUN deleteMessage IN messageH.
END PROCEDURE.