Oracle Objects for OLE C++ Class Library
Release 9.2

Part Number A95896-01
Go To Documentation Library
Home
Go To Product List
Book List
Go To Table Of Contents
Contents

Master Index

Feedback

Dequeuing Messages

This topic includes examples for dequeuing RAW (string of characters) and user-defined type messages.

Note: For more information about sample code, see Sample Code and Applications.

Dequeuing RAW (string of characters) Messages:

#include <oracl.h>

OSession osess ;

int DequeueRaw();

int main(int argc, char **argv)

{

int retVal = 0;

OStartup(OSTARTUP_MULTITHREADED);

try

{

osess.Open();

if ( ! osess.IsOpen() )

{

cout << "Session not opened: Error: " << osess.GetErrorText() << endl;

osess.Close();

OShutdown();

return -1;

}

retVal = DequeueRaw();

}

catch(OException oerr)

{

cout << "Exception while dequeuing message : " << oerr.GetErrorText() << endl;

retVal = -1;

}

OShutdown();

return retVal;

}

// This function dequeues a message of default

// type (string of characters) from the raw_msg_queue.

// Gets the message priority after dequeuing

// Checks if any message with correlation like 'AQ' is available

// on the queue.

int DequeueRaw()

{

ODatabase odb;

OAQ oaq;

OAQMsg oaqmsg;

OValue msg;

const char *msgid = 0;

odb.Open(osess, "ExampleDB", "SCOTT", "TIGER");

// Open the 'raw_msg_queue'

oaq.Open(odb,"raw_msg_queue");

// Get an instance of the default message(of RAW type)

oaqmsg.Open(oaq);

// Dequeue a message

msgid = oaq.Dequeue();

// Retrieve the message attributes

oaqmsg.GetValue(&msg);

const char *msgval = msg;

cout <<"Message '"<<msgval<<"' dequeued at priority : "<<oaqmsg.GetPriority()<<endl;

// Dequeue message with correlation like "AQ"

oaq.SetCorrelate("%AQ%");

oaq.SetDequeueMode(OAQ_DQ_REMOVE);

msgid = oaq.Dequeue();

// Retrieve the message attributes

char msgval[101];

long len = oaqmsg.GetValue(msgval,100);

msgval[len] = '\0';

cout<<"Message '"<<msgval<<"' dequeued at priority : "<<oaqmsg.GetPriority()<<endl;

//Close all of the objects

oaqmsg.Close();

oaq.Close();

odb.Close();

return 0;

}

Dequeuing User-Defined Type Messages:

// This function dequeues a message of user-defined type MESSAGE_TYPE

// from the msg_queue.

// Gets the message priority after dequeuing

// Checks if any message with correlation like 'SCOTT' is available on the queue.

int DequeueObject()

{

ODatabase odb;

OAQ oaq;

OAQMsg oaqmsg;

const char *msgid = 0;

OValue msg;

char subject[255];

char text[255];

odb.Open(osess, "ExampleDB", "SCOTT", "TIGER");

// Open the 'msg_queue'

oaq.Open(odb,"msg_queue");

// Get an instance of the udt MESSAGE_TYPE (check out schema for details)

oaqmsg.Open(oaq, OTYPE_OBJ, "MESSAGE_TYPE");

// Dequeue message with correlation like "SCOTT"

oaq.SetCorrelate("%SCOTT%");

oaq.SetDequeueMode(OAQ_DQ_REMOVE);

msgid = oaq.Dequeue();

// Retrieve the message attributes

// Get the subject,text attributes of the message

OObject msgval;

oaqmsg.GetValue(&msgval);

msgval.GetAttrValue("subject", subject,255);

msgval.GetAttrValue("text", text,255);

cout<<"Message '"<<(subject ? subject :"")<<"' & Body : '"<<text<<"' dequeued at priority : "<<oaqmsg.GetPriority()<<endl;

msgid = 0;

oaq.SetNavigation(OAQ_DQ_FIRST_MSG);

oaq.SetCorrelate("");

// Dequeue a message

msgid = oaq.Dequeue();

// Retrieve the message attributes

OObject msgval;

oaqmsg.GetValue(&msg);

msgval = msg;

// Get the subject,text attributes of the message

msgval.GetAttrValue("subject", subject,255);

msgval.GetAttrValue("text", text,255);

cout<<"Message '"<<(subject ? subject :"")<<"' & Body : '"<<text<<"' dequeued at priority : "<<oaqmsg.GetPriority()<<endl;

// Close all of the objects

oaqmsg.Close();

oaq.Close();

odb.Close();

return 0;

}


 
Oracle
Copyright © 1998, 2002 Oracle Corporation.

All Rights Reserved.
Go To Documentation Library
Home
Go To Product List
Book List
Go To Table Of Contents
Contents

Master Index

Feedback