Collection Contents 前へ 次へ PDF

QAnywhere ユーザーズ・ガイド

QAnywhere クライアント・アプリケーションの作成

トランザクション志向メッセージングの実装


トランザクション志向メッセージングを使用すると、メッセージがグループにまとめられ、グループ内のすべてのメッセージが配信されるか、すべてのメッセージが配信されないかのどちらかになることが保証されます。このような処理は、一般にトランザクションと呼ばれています。

トランザクション志向メッセージングを実装するには、トランザクション志向マネージャと呼ばれる特殊な QAManager オブジェクトを作成します。

トランザクション志向マネージャを作成するには、次の手順に従います (C++ の場合)。

  1. QAnywhere を初期化します。

    この手順は、非トランザクション志向メッセージングの場合とまったく同じです。

    #include <qa.hpp>
    QAManagerFactory *   factory;
    
    factory = QAnywhereFactory_init();
    if( factory == NULL ) {
        // fatal error
    }
  2. トランザクション志向マネージャを作成します。

    QATransactionalManager *   mgr;
    
    mgr = factory->createQATransactionalManager( NULL );
    if( mgr == NULL ) {
        // fatal error
    }

    非トランザクション志向マネージャの場合と同様に、プロパティ・ファイルを指定することで QAnywhere の動作をカスタマイズできます。この例では、プロパティ・ファイルは使用していません。

  3. マネージャを初期化します。

    if( !mgr->open() ) {
       // display message using mgr->getLastErrorMsg();
    }

これで、メッセージを送信する準備ができました。次に、1 つのトランザクション内で 2 つのメッセージを送信する手順を示します。

複数のメッセージを 1 つのトランザクションで送信するには、次の手順に従います (C++ の場合)。

  1. メッセージ・オブジェクトを初期化します。

    QATextMessage *   msg_1;
    QATextMessage *   msg_2;
  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() メソッドによって、実際にメッセージが送信されます。


Collection Contents 前へ 次へ PDF