WebSphere Message Service Clients for C/C++ and .NET, Version 1.2 オペレーティング・システム: Linux, Windows

C++ でのメッセージ・リスナーおよび例外リスナーの使用法

C++ アプリケーションは、メッセージ・リスナーを使用してメッセージを非同期に受信し、例外リスナーを使用して接続の問題に関する通知を非同期に受信します。

関連概念
実行時に処理できるエラー状態

C++ でのメッセージ・リスナーの使用法

メッセージを非同期に受信するには、C++ アプリケーションが抽象クラス MessageListener に基づくメッセージ・リスナー・クラスを定義する必要があります。 メッセージ・リスナー・クラスは、onMessage() メソッドの実装を 提供する必要があります。アプリケーションはこのクラスをインスタンス化してメッセージ・リスナーを作成し、 1 つ以上のメッセージ・コンシューマーにこのメッセージ・リスナーを登録するため 各メッセージ・コンシューマーの setMessageListener() メソッドを呼び出します。その後、メッセージ・コンシューマーのメッセージが着信すると、XMS は onMessage() メソッドを呼び出してこのメッセージを配信します。XMS ではメッセージ・リスナーのコピーは作成されません。このため、XMS が onMessage() メソッドを呼び出す時点でメッセージ・リスナーが使用可能であることをアプリケーションが確認する必要があります。

セッションの複数のメッセージ・コンシューマーに対して 1 つのメッセージ・リスナーが登録されている場合、一度に 1 つの onMessage() メソッドのみを実行できます。この状況の詳細と、アプリケーションがメッセージの同時配信を必要とする場合の対処については、非同期メッセージ配信を参照してください。

メッセージ・コンシューマーへのメッセージの非同期配信を停止するには、アプリケーションが setMessageListener() メソッドを再度呼び出し、メッセージ・リスナーへのポインターではなく NULL ポインターをパラメーターとして渡します。 メッセージ・リスナーの登録がこの方法で取り消されている場合を除き、メッセージ・コンシューマーが存在している間はメッセージ・リスナーが存在している必要があります。

既存のメッセージ・リスナーの登録を取り消さずに、新規メッセージ・リスナーをメッセージ・コンシューマーに登録できます。既存のメッセージ・リスナーの onMessage() メソッドを実行中に新規メッセージ・リスナーを登録すると、 アクティブなメソッドが正常に完了し、後続のメッセージはすべて、新規メッセージ・リスナーの onMessage() メソッドの呼び出しにより処理されます。 トランザクションの進行中にメッセージ・リスナーが変更されると、新規メッセージ・リスナーの onMessage() メソッドの呼び出しによりトランザクションが完了します。

onMessage() メソッドを使用してメッセージ・リスナー・クラスを実装する例を以下のコード・フラグメントに示します。
#include <xms.hpp>
using namespace std;
class MyMsgListener : public xms::MessageListener
{
public:
virtual xmsVOID onMessage(const xms::Message * pMsg);
};
-------–--------------------------------------------
xmsVOID MyMsgListener::onMessage(const xms::Message * pMsg)
{
if (pMsg != NULL)
{
cout << pMsg->getJMSCorrelationID() << endl;
cout << pMsg->getJMSMessageID() << endl;
if (pMsg->getType() == XMS_MESSAGE_TYPE_BYTES)
{
xms::BytesMessage * pBytes = (xms::BytesMessage *) pMsg;
cout << pBytes->readUTF() << endl;
}
delete pMsg;
}
}
XMS は onMessage() メソッドの呼び出し時にメッセージを指すポインターを渡すため、アプリケーションが delete 演算子を使用してメッセージを解放する必要がある点に注意 してください。
アプリケーションがこのメッセージ・リスナー・クラスを使用してメッセージ・コンシューマーへのメッセージの非同期配信を実装する例を以下のコード・フラグメントに示します。
#include <xms.hpp>
using namespace std;
int main(int argc, char *argv[])
{
int nRC = 0;
xms::ConnectionFactory cf;
xms::Connection conn;
xms::Session sess;
xms::Destination dest;
xms::MessageConsumer msgConn;
MyMsgListener msgLst;
try
{
cf.setIntProperty(XMSC_CONNECTION_TYPE, XMSC_CT_RTT);
cf.setIntProperty(XMSC_RTT_CONNECTION_PROTOCOL, XMSC_RTT_CP_TCP);
cf.setStringProperty(XMSC_RTT_HOST_NAME, "localhost");
cf.setIntProperty(XMSC_RTT_PORT, 1506);
conn = cf.createConnection();
sess = conn.createSession();
dest = xms::Destination(XMS_DESTINATION_TYPE_TOPIC, "test");
msgConn = sess.createConsumer(dest);
msgConn.setMessageListener(&msgLst);
conn.start();
while(xmsTRUE)
{
Sleep(1000);
cout << "Waiting..." << endl;
}
}
catch(exception & ex)
{
nRC = -1;
}
return(nRC);
}

C++ での例外リスナーの使用法

例外リスナーの使用法は、基本的にメッセージ・リスナーの使用法と似ています。

C++ アプリケーションは、抽象クラス ExceptionListener に基づく例外リスナー・クラスを定義する必要があります。例外リスナー・クラスは、onException() メソッドの実装を 提供する必要があります。アプリケーションはこのクラスをインスタンス化して例外リスナーを作成し、 setExceptionListener() メソッドを呼び出して例外リスナーを接続に登録します。その後、XMS が接続の問題を 検出すると、XMS は onException() メソッドを呼び出してアプリケーションに例外を渡します。XMS では例外リスナーのコピーは作成されません。このため、XMS が onException() メソッドを呼び出した時点で例外リスナーが使用可能であることをアプリケーションが確認する必要があります。

接続の問題の非同期レポートを停止するには、アプリケーションが setExceptionListener() メソッドを再度呼び出し、例外リスナーを指すポインターではなく NULL ポインターを パラメーターとして渡します。 例外リスナーの登録がこの方法で取り消されている場合を除き、接続が存在している間は例外リスナーが存在している必要があります。

XMS は onException() メソッドの呼び出し時に例外を指すポインターを渡すため、アプリケーションが C++ delete 演算子を使用して例外を解放する必要がある点に注意 してください。


Concept topic

ご利用条件 | フィードバック (英語のみ)

Timestamp icon最終更新: 8 Jun 2006
(C) Copyright IBM Corporation 2005, 2006. All Rights Reserved.
このインフォメーション・センターでは Eclipse テクノロジーが採用されています。(http://www.eclipse.org)