トランザクション志向メッセージングを使用すると、メッセージがグループにまとめられ、グループ内のすべてのメッセージが配信されるか、すべてのメッセージが配信されないかのどちらかになることが保証されます。このような処理は、一般にトランザクションと呼ばれています。
トランザクション志向メッセージングを実装するには、トランザクション志向マネージャと呼ばれる特殊な QAManager オブジェクトを作成します。
トランザクション志向マネージャを作成するには、次の手順に従います (C++ の場合)。
QAnywhere を初期化します。
この手順は、非トランザクション志向メッセージングの場合とまったく同じです。
#include <qa.hpp>
QAManagerFactory * factory;
factory = QAnywhereFactory_init();
if( factory == NULL ) {
// fatal error
}トランザクション志向マネージャを作成します。
QATransactionalManager * mgr;
mgr = factory->createQATransactionalManager( NULL );
if( mgr == NULL ) {
// fatal error
}非トランザクション志向マネージャの場合と同様に、プロパティ・ファイルを指定することで QAnywhere の動作をカスタマイズできます。この例では、プロパティ・ファイルは使用していません。
マネージャを初期化します。
if( !mgr->open() ) {
// display message using mgr->getLastErrorMsg();
}これで、メッセージを送信する準備ができました。次に、1 つのトランザクション内で 2 つのメッセージを送信する手順を示します。
複数のメッセージを 1 つのトランザクションで送信するには、次の手順に従います (C++ の場合)。
メッセージ・オブジェクトを初期化します。
QATextMessage * msg_1; QATextMessage * msg_2;
メッセージを送信します。
次のコードでは、1 つのトランザクション内で 2 つのメッセージを送信しています。
msg_1 = mgr->createTextMessage();
if( msg_1 != NULL )
{
msg_2 = mgr->createTextMessage();
if( msg_2 != NULL )
{
if( !mgr->putMessage( "jms_1¥¥queue_name", msg_1 ) )
{
// display message using mgr->getLastErrorMsg();
} else {
if( !mgr->putMessage( "jms_1¥¥queue_name", msg_2 ) )
{
// display message using mgr->getLastErrorMsg();
} else {
mgr->commit();
}
}
mgr->deleteMessage( msg_2 );
}
mgr->deleteMessage( msg_1 );
}commit() メソッドによって、実際にメッセージが送信されます。
SQL Anywhere Studio 9.0.2
Copyright © 1989–2005 Sybase, Inc. Portions copyright © 2001–2005 iAnywhere Solutions, Inc. All rights reserved.