Consultor Eletrônico



Kbase P57318: SonicMQ Adapter - 4GL Code to add an Error Handler in PTP Session
Autor   Progress Software Corporation - Progress
Acesso   Público
Publicação   10/10/2005
Status: Unverified

GOAL:

SonicMQ Adapter - 4GL Code to add an Error Handler in PTP Session

GOAL:

How to trap for a "-5" conneciton loss error

FACT(s) (Environment):

Progress 9.1C
SonicMQ 3.5

FIX:

This example adds an error handler to a Point-to-Point (PTP) session to detect a lost connection.

/* Installs an error handler to deal with a JMS server communication
loss. */
DEFINE VARIABLE ptpsession AS HANDLE.
DEFINE VARIABLE errorConsumer AS HANDLE.
DEFINE VARIABLE messageConsumer AS HANDLE.
DEFINE VARIABLE jmsIsOk AS LOGICAL INIT 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.

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 VAR errorCode AS CHAR NO-UNDO.
DEFINE VAR errorText AS CHAR 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
jmsIsOk = no.
END.

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.