Interstage Application Server SOAPサービス ユーザーズガイド
目次 索引 前ページ次ページ

第7章 送達保証機能の実装> 7.2 サーバシステムがメッセージを受け取るPUSHモデル> 7.2.3 PUSHモデル送信クライアントの送信アプリケーション作成

7.2.3.2 送信アプリケーションの準備

 送達保証機能の送信アプリケーションでは、JAXM APIの ProviderConnectionクラスを使ってSOAPメッセージを送信します。

 SOAPメッセージを送信するユーザアプリケーションは、まず受信者に対する仮想コネクションを作成します。この時点では実際のリクエストは行なわれません。

     :
 ProviderConnectionFactory conFactory =
     ProviderConnectionFactory.newInstance();
 ProviderConnection con = conFactory.createConnection();

 次に、SOAPメッセージを作成するためのMessageFactoryインタフェースを取得します。ここで送達保証のメッセージを作成するため、createMessageFactoryメソッドの引数に "SOAPReliable" を指定します。
 Interstage SOAPサービスの送達保証機能では、"SOAPReliable"以外のSOAPメッセージは作成できません。

 MessageFactory msgFactory = con.createMessageFactory("SOAPReliable");

 次に、送信するSOAPメッセージを準備します。
 送信するSOAPメッセージはMessageFactoryインタフェースから取得したSOAPMessageクラスに対して設定していきます。SOAPMessageクラスには、メッセージングの際に使用するものと同様のAPIを使って、送信するSOAPメッセージの構築を行います。

 SOAPメッセージの構築方法については、“SAAJ-APIによるSOAPメッセージの処理”を参照してください。

 SOAPMessage message = msgFactory.createMessage();

 SOAPMessageクラスに対して、送信先とメッセージ種別を設定します。ここで指定するのは、受信サーバと合意した受信サーバID、およびメッセージ種別IDです。

 設定APIを使用する際、以下の例のようにSOAPMessageクラスをSOAPReliableMessageクラスにキャストする必要があります。SOAPReliableMessageクラスの詳細なAPIについては、付属のJavaDOCを参照してください。

 SOAPReliableMessage relMessage = (SOAPReliableMessage)message;
 // 送信先を登録する
 relMessage.setReceiver("server");
 // メッセージ種別を登録する
 relMessage.setMessageType("furikomi");

 最後にSOAPメッセージの送信を指示します。引数にはMessageFactoryインタフェースから生成し、JAXM APIを用いて SOAP メッセージを設定したSOAPMessageクラスを指定します。

 //メッセージ送信
 con.send(message);

 これにより、作成したSOAPメッセージが、メッセージ格納場所に格納され、SOAPメッセージの送信処理が開始されます。

 PUSHモデルの場合、SOAPメッセージが格納された時点で、受信サーバに対してSOAPメッセージの送信が行なわれます。受信サーバへのメッセージ送信が失敗した場合はタイムアウトするまで自動的に再送が行なわれますので、受信サーバの用意に関わらずアプリケーションからの送信を行うことができます。

 指定された再送回数、再送を行っても正しい受信確認が行えなかった場合、SOAPメッセージの送信が失敗します。その場合は、“Webサービス・コンテナのカスタマイズ”の“クライアント機能のログ”で指定したログファイルに、SOAPメッセージの送信に失敗した旨のログが出力されます。
 Interstage SOAPサービスのサーバパッケージをインストールしている場合は、送達保証メッセージの送信に失敗すると、システムのログにエラーメッセージが出力されます。

 送信アプリケーションが起動している間は、SOAPReliableSendMessageListenerインタフェースを実装したクラスを用意することによって、送信アプリケーションがメッセージ送信の成功を検知できます。
 以下がこのクラスの実装例です。

 SOAPReliableSendMessageListener listener = new SOAPReliableSendMessageListener()
 {
   public void messageSent(SOAPReliableMessageEvent event) {
   // 成功時の処理
     String messageId = event.getMessageId();
       :
   }
 };

 作成したクラスインスタンスは、以下のようにして登録します。

 ((SOAPReliableConnection)con).addSendMessageListener(listener);

 送信アプリケーションに渡されるイベントクラスの詳細については、付属のJavaDOCを参照してください。

 また、SOAPReliableSendMessageErrorListenerインタフェースを実装したクラスを用意することによって、送信アプリケーションがメッセージ送信の失敗を検知できます。
 以下がこのクラスの実装例です。

 SOAPReliableSendMessageErrorListener listener =
               new SOAPReliableSendMessageErrorListener() {
   public void messageSendError(SOAPReliableMessageErrorEvent event) {
   // 失敗時の処理
     String messageId = event.getMessageId();
     int code = event.getErrorCode();
       :
   }
 };

 作成したクラスインスタンスは、以下のようにして登録します。

 ((SOAPReliableConnection)con).addSendMessageErrorListener(listener);

 送信アプリケーションに渡されるイベントクラスの詳細については、付属のJavaDOCを参照してください。

 なおこの方法では、送信アプリケーションの再起動後には、送信アプリケーションへの通知は行なわれません。再起動後のメッセージ送信の失敗、成功はログファイルを参照してください。


目次 索引 前ページ次ページ

All Rights Reserved, Copyright(C) 富士通株式会社 2005