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.