このセクションでは、アダプターでのビジネス・オブジェクトの処理を具体的に示す例を紹介します。
下記のサンプル・コードは、「Hello World」という簡単なメッセージを WebSphere MQ に書き込むコネクター・コードです。
/********************************************** *Create the MQSession object and access the MQQueueManager and (local) MQQueue **********************************************/ MQSession MQSess = new MQSession(); iDispatch = MQSess.AccessQueueManager("COMTest"); MQQueueManager QMgr = new MQQueueManager(iDispatch); QMgr.Connect(); MQQueue MyQueue=new MQQueue(QMgr.AccessQueue_4("SYSTEM.DEFAULT.LOCAL.QUEUE",17)); MyQueue.Open(); MQMessage PutMsg = new MQMessage(MQSess.AccessMessage()); //write a string to the message PutMsg.WriteString("Hello World";); //put the message on the queue MyQueue.Put(PutMsg); MyQueue.Close(); QMgr.Disconnect();
以下の画面例は、コネクターの呼び出し順序の例に示したコードが正常に機能するために必要なビジネス・オブジェクト構造とアプリケーション固有の情報を示しています。以下の画面例で説明するビジネス・オブジェクトは、Create 動詞を使用しています。
図 5 は、トップレベルのビジネス・オブジェクト MQ_MQSession を示しています。このビジネス・オブジェクトは、メソッド・シーケンス内で最初に作成されるオブジェクトにあたります。Create 動詞の ASI には、AccessQueueManager と指定されています。これは、MQQueueManager オブジェクトへのアクセスを可能にする関数です。
AccessQueueManager は、Integer 型のオブジェクトを戻します。このオブジェクトが MQQueueManager のコンストラクターに渡されると、MQQueueManager プロキシーのインスタンスが作成されます。
ビジネス・オブジェクト・レベルの ASI にストリング proxy_class=mqtest.MQSession が指定されていることに注意してください。これは、現在のビジネス・オブジェクトに対応する COM コンポーネントを表すプロキシー・オブジェクトを示しています。proxy_class ASI の詳細については、表 4 を参照してください。
図 6 は、親オブジェクト (MQSession) から最下位の子までを含む、ビジネス・オブジェクト階層を示しています。
AccessQueueManager は、iDispatch ポインターを戻すメソッドです。このポインターは、MQQueueManager (ビジネス・オブジェクトの Return_Value 属性に指定されています) にマップされています。MQQueueManager は、図 6 に示すビジネス・オブジェクト構造に含まれる子オブジェクト MQ_MQQueueManager によって表現される、プロキシー・オブジェクトです。
図 7 では、ビジネス・オブジェクト MQ_MQQueueManager の動詞 Create のメソッド・シーケンスを示します。
このシーケンスは、次の 3 つのメソッドで構成されています。
図 6 に示したように、BO 構造に含まれる AccessQueue_4 は、MQ_MQQueue というプロキシー・オブジェクトを戻します。このとき、コネクターは、AccessQueue_4 を実行した後、戻されたプロキシー・オブジェクト (AccessQueue_4 の子) を、MQ_MQQueueManager の呼び出しシーケンスの 3 番目、つまり最後のメソッドである Disconnect を実行する前 に処理します。
図 8 は、AccessQueue_4 の子 (図 6) である MQ_MQQueue のメソッド・シーケンスを示します。この呼び出しシーケンスは、次の 3 つのメソッドで構成されています。
Put メソッドは MQMessage を引数とするので、コネクターは、Put メソッドを実行する前 に MQMessage オブジェクトを作成する (そして作成したオブジェクトに対してメソッドを実行する) 必要があります。
コネクターの処理動作には再帰的な性質があります。つまり、Put は、AccessQueue_4 (図 6) の親である MQ_MQQueueManager (図 7) の Disconnect メソッドを実行する前 に実行されます。
図 9 は、MQMessage のメソッド・シーケンスを示しています。このシーケンスは、単純ストリングを引数とする WriteString メソッドのみを呼び出します。この例では、引数は「Hello World」メッセージです。このメッセージが WebSphere MQ に書き込まれます。コネクターでは、その後、このセクションで説明した再帰的シーケンスに従ってメソッドの処理が続行されます。コネクターは、WriteString を呼び出した後、階層を「引き返し」、MQ_MQQueue (図 8) の Close メソッドを実行し、MQ_MQQueueManager (図 7) の Disconnect メソッドを実行します。