Consultor Eletrônico



Kbase P53538: Sonic 4GL adapter sending and receiving JMSCorrelationASByte
Autor   Progress Software Corporation - Progress
Acesso   Público
Publicação   13/11/2003
Status: Unverified

GOAL:

Sonic 4GL adapter sending and receiving JMSCorrelationASBytes

FACT(s) (Environment):

Progress 9.1D

FIX:

/* Code example for sending and receiving JMSCorrelationASBytes
tested with 9.1D07 and SonicMQ 5.01 build 806 */

DEFINE VARIABLE pubsubsession AS HANDLE.
DEFINE VARIABLE consumerH AS HANDLE.
DEFINE VARIABLE messageH AS HANDLE.
DEF VAR scorID AS CHAR INITIAL "414D512049524F4E20202020202020203EFA809D00176893".
DEF VAR sendrawID AS RAW .
DEF VAR receivedrawID AS RAW.
DEF VAR ssend AS CHAR.
DEF VAR sreceived AS CHAR.
DEF VAR i AS INT.

i = 1.

DO WHILE i < (LENGTH (scorID) + 1) :
PUT-BYTE(sendrawID,i) = ASC(SUBSTRING(scorID,i,1)) .
i = i + 1 .
END.


i = 1 .
DO WHILE i < (LENGTH (scorID) + 1) :
ssend = ssend + STRING(CHR(get-byte(sendrawID,i))) .
i = i + 1 .
END.

MESSAGE "Sending: " ssend .


/* Creates a session object. */
RUN jms/pubsubsession.p PERSISTENT SET pubsubsession ("-H localhost -S 5162 ").
RUN setBrokerURL IN pubsubsession ("localhost:2506").
RUN SETUSER IN pubsubsession ("Administrator").
RUN setPassword IN pubsubsession ("Administrator").

RUN beginSession IN pubsubsession.

/* Start receiving messages */
RUN startReceiveMessages IN pubsubsession.

/* Create a text message */
RUN createTextMessage IN pubsubsession (OUTPUT messageH).
RUN setText IN messageH ("This is a test message.").

RUN setJMSCorrelationIDAsBytes IN messageH (sendrawID).

/* Creates a consumer for the reply */
RUN createMessageConsumer IN pubsubsession (
THIS-PROCEDURE, /* This proc will handle it */
"testHandler", /* name of internal procedure */
OUTPUT consumerH).

RUN subscribe IN pubsubsession ("TestTopic", /* name of topic */
?, /* Subscription is not durable */
?, /* No message selector */
no, /* Want my own messages too */
consumerH). /* Handles the incoming messages*/

/* Publish the message onto the TestTopic topic. Handle the reply in the
testHandler internal procedure.
*/
RUN publish IN pubsubsession ("TestTopic", messageH, ?, ?, ?).


/* Wait forever to receive messages since "u1" is never applied. */
WAIT-FOR u1 OF THIS-PROCEDURE.

PROCEDURE testHandler:
DEFINE INPUT PARAMETER replyH AS HANDLE.
DEFINE INPUT PARAMETER msgConsumerH AS HANDLE.
DEFINE OUTPUT PARAMETER responseH AS HANDLE.

/* Display the reply from SonicMQ Should be same as sent. */
DISPLAY "reply text: " DYNAMIC-FUNCTION('getText':U IN replyH) FORMAT "X(30)".
receivedrawID = DYNAMIC-FUNCTION('getJMSCorrelationIDAsBytes':U IN replyH).

i = 1 .
DO WHILE i < (LENGTH (scorID) + 1) :
sreceived = sreceived + STRING(CHR(get-byte(receivedrawID,i))) .
i = i + 1 .
END.

MESSAGE "Received: " sreceived VIEW-AS ALERT-BOX.

RUN deleteMessage IN replyH.

END.