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.