Skip to main content

This is documentation for Caché & Ensemble. See the InterSystems IRIS version of this content.Opens in a new tab

For information on migrating to InterSystems IRISOpens in a new tab, see Why Migrate to InterSystems IRIS?

IBM WebSphere MQ 送信アダプタの使用法

この章では、Ensemble IBM WebSphere MQ 送信アダプタ (EnsLib.MQSeries.OutboundAdapterOpens in a new tab) の動作、およびプロダクションでのこのアダプタの使用法について説明します。以下のトピックについて説明します。

全般的な動作

プロダクション内で、送信アダプタは、ユーザが作成および構成するビジネス・オペレーションに関連付けられます。このビジネス・オペレーションはプロダクション内からメッセージを受信し、メッセージ・タイプを調べ、適切なメソッドを実行します。このメソッドは、通常、関連するアダプタのメソッドを実行します。

IBM WebSphere MQ 送信アダプタ (EnsLib.MQSeries.OutboundAdapterOpens in a new tab) の設定によって、以下を指定します。

アダプタを使用するビジネス・オペレーションの作成

EnsLib.MQSeries.OutBoundAdapter を使用するビジネス・オペレーションを作成するために、新しいビジネス・オペレーション・クラスを作成します。後で、それをプロダクションに追加して、構成します

存在しなければ、適切なメッセージ・クラスを作成する必要もあります。"Ensemble プロダクションの開発" の “Ensemble メッセージの定義” を参照してください。

ビジネス・オペレーション・クラスの基本要件を以下に列挙します。

  • ビジネス・オペレーション・クラスは、Ens.BusinessOperationOpens in a new tab を拡張するものでなければなりません。

  • クラスの ADAPTER パラメータは EnsLib.MQSeries.OutboundAdapterOpens in a new tab である必要があります。

  • クラスの INVOCATION パラメータは、使用する呼び出しスタイルを指定する必要があります。以下のいずれかを使用します。

    • Queue は、メッセージが 1 つのバックグラウンド・ジョブ内で作成され、元のジョブが解放された段階でキューに配置されます。その後、メッセージが処理された段階で、別のバックグラウンド・ジョブがそのタスクに割り当てられます。これは最も一般的な設定です。

    • InProc は、メッセージが、作成されたジョブと同じジョブで生成、送信、および配信されることを意味します。このジョブは、メッセージが対象に配信されるまで送信者のプールに解放されません。これは特殊なケースのみに該当します。

  • クラスでは、少なくとも 1 つのエントリを含むメッセージ・マップを定義します。メッセージ・マップは、以下の構造を持つ XData ブロック・エントリです。

    XData MessageMap
    {
    <MapItems>
      <MapItem MessageType="messageclass">
        <Method>methodname</Method>
      </MapItem>
      ...
    </MapItems>
    }
    
    
  • クラスでは、メッセージ・マップ内で名前が付けられたすべてのメソッドを定義します。これらのメソッドは、メッセージ・ハンドラと呼ばれます。各メッセージ・ハンドラは、以下のシグニチャを持っている必要があります。

    Method Sample(pReq As RequestClass, Output pResp As ResponseClass) As %Status
    

    ここで、Sample はメソッド名、RequestClass は Ensemble 要求メッセージ・クラスの名前、ResponseClass は Ensemble 応答メッセージ・クラスの名前です。通常、これらのメソッドは、ビジネス・オペレーションの Adapter プロパティのプロパティおよびメソッドを参照します。

  • その他のオプションと一般情報は、"Ensemble プロダクションの開発" の “ビジネス・オペレーション・クラスの定義” を参照してください。

以下の例は、必要となる一般的な構造を示しています。

Class EMQS.NewOperation1 Extends Ens.BusinessOperation 
{
Parameter ADAPTER = "EnsLib.MQSeries.OutboundAdapter";

Parameter INVOCATION = "Queue";

Method SampleCall(pRequest As Ens.Request,
                  Output pResponse As Ens.Response) As %Status
{
  Quit $$$ERROR($$$NotImplemented)
}

XData MessageMap
{
<MapItems>
  <MapItem MessageType="Ens.Request">
    <Method>SampleCall</Method>
  </MapItem>
</MapItems>
}
}
Note:

スタジオには、上記のようなビジネス・オペレーション・スタブの作成に使用できるウィザードが用意されています。このウィザードにアクセスするには、[ファイル][新規作成] をクリックし、[プロダクション] タブをクリックします。次に [ビジネス・オペレーション] をクリックして [OK] をクリックします。

メッセージ・ハンドラ・メソッドの作成

EnsLib.MQSeries.OutboundAdapterOpens in a new tab で使用するビジネス・オペレーション・クラスを作成する場合の主なタスクは、通常、このアダプタで使用するメッセージ・ハンドラ、つまり、Ensemble メッセージを受信して IBM WebSphere MQ サーバにメッセージを送信するメソッドの記述です。

各メッセージ・ハンドラ・メソッドは、以下のシグニチャを持っている必要があります。

Method Sample(pReq As RequestClass, Output pResp As ResponseClass) As %Status

ここで、Sample はメソッド名、RequestClass は Ensemble 要求メッセージ・クラスの名前、ResponseClass は Ensemble 応答メッセージ・クラスの名前です。

通常、このメソッドは以下の操作を実行します。

  1. 受信要求メッセージを調べます。

  2. アダプタの SendMessage() メソッドを呼び出し、IBM WebSphere MQ の構成されたキューにメッセージを送信します。

    Note:

    Ensemble で長い文字列が有効でない場合、メッセージの長さが 32 KB 未満でなければなりません。

  3. 応答を調べます。

  4. 応答内の情報を使用して、Ensemble 応答メッセージ (Ens.ResponseOpens in a new tab またはサブクラスのインスタンス) を作成します。メソッドは出力としてこのメッセージを返します。

    メッセージ・クラスの定義方法は、"Ensemble プロダクションの開発" の “Ensemble メッセージの定義” を参照してください。

  5. 必ず出力引数 (pOutput) を設定します。通常、応答メッセージと同じように設定します。この手順は必須です。

  6. 適切なステータスを返します。この手順は必須です。

使用可能なメソッド

このアダプタは、以下のメソッドを提供します。

SendMessage()
Method SendMessage(pBody) As %Status

IBM WebSphere MQ メッセージの構成されたキューにメッセージを送信します。pBody にはデータ型または文字ストリームを使用できますが、バイナリ・データやオブジェクトは使用できません。

以下のビジネス・オペレーションは、メッセージを IBM WebSphere MQ に送信します。

Class EMQS.Operation Extends Ens.BusinessOperation 
{

Parameter ADAPTER = "EnsLib.MQSeries.OutboundAdapter";

Parameter INVOCATION = "Queue";

Method Send(pRequest As OutboundMsg, Output pResponse As OutboundMsgResponse) As %Status
{
    Set string=pRequest.Body

    //Get part of the message so that we can provide
    //some information in the response message
    Set snippet=$Extract(string,1,50)

    //send the message to the configured queue
    Set status=..Adapter.SendMessage(string)
    If $$$ISERR(status) {
        Do $System.Status.DisplayError(status)
        Quit $$$ERROR($$$GeneralError,"Error sending message")
    }

    //create the response message
    Set pResponse=##class(EMQS.OutboundMsgResponse).%New()
    Set pResponse.Body="Message sent: "_snippet

    Quit status
}

XData MessageMap
{
<MapItems>
    <MapItem MessageType="EMQS.OutboundMsg">
        <Method>Send</Method>
    </MapItem>
</MapItems>
}

}

ビジネス・オペレーションの追加と構成

ビジネス・オペレーションを Ensemble プロダクションに追加するには、管理ポータルを使用して以下の操作を行います。

  1. カスタム・ビジネス・オペレーション・クラスのインスタンスを Ensemble プロダクションに追加します。

  2. ビジネス・オペレーションを有効化します。

  3. IBM WebSphere MQ キューにアクセスしてメッセージを送信するアダプタを構成します。具体的には、以下を行います。

    これらのトピックについては、“IBM WebSphere MQ アダプタに関する設定” の節で説明します。

  4. プロダクションを実行します。

FeedbackOpens in a new tab