[ADOS] ADOS Developer's Site - XML Stadium
ADOS Company slogan - XML Total Solution
RIGHT:[[目次>Hestia Hacks]]|[[前>1アクションPIPの開始側処理]]|[[次>2アクションPIPの開始側処理]]

目次

#contents

*概要 [#g183d043]

1アクションPIPの回答側処理について解説します。

PIPの回答側ではオブジェクトが図のような連携を行います。

#ref(g04.gif,center)

Hestiaがパートナーからアクションメッセージを受信すると、EISとは無関係に、アクションメッセージのバリデーション後、自動的にシグナルメッセージをパートナーに送信します。さらに、HestiaはEISからStatusContainerを受信しないか、RejectのStatusContainerを受信した場合、0A1 NotificationofFailure(NOF)をパートナーに送信します。

EISはHestiaからPayloadContainerを受信した後、RespondSessionを生成し、このPIPプロセスの管理を行います。HestiaにStatusContainerを送信することにより役割を終えます。

サンプルプログラム全体を以下に示します。

【PIPReceiver.java】
 1 : import java.io.FileInputStream;
 2 : import java.util.Properties;
 3 : 
 4 : import com.ados.hestia.parser.rnbm.exchange.Container;
 5 : import com.ados.hestia.parser.rnbm.exchange.PayloadContainer;
 6 : import com.ados.hestia.parser.rnbm.exchange.StatusContainer;
 7 : import com.ados.hestia.sdk.Configuration;
 8 : import com.ados.hestia.sdk.Connection;
 9 : import com.ados.hestia.sdk.message.DirectMessageExchanger;
 10 : import com.ados.hestia.sdk.session.RespondSession;
 11 : import com.ados.hestia.sdk.session.Session;
 12 : 
 13 : public class PIPReceiver {
 14 : 
 15 :   public static void main(String[] args) {
 16 :     try {
 17 :       Properties prop = new Properties();
 18 :       prop.load(new FileInputStream("sample.properties"));
 19 :       String HOST = prop.getProperty("HOST");
 20 :       String USER = prop.getProperty("USER");
 21 :       String PASS = prop.getProperty("PASS");
 22 :       String HANDLER_ID = prop.getProperty("HANDLER_ID");
 23 : 
 24 :       Connection connection = new Connection(HOST, USER, PASS,
 25 :           Connection.EXCHANGE_MODE_DIRECT, null, null, null,
 26 :           HANDLER_ID);
 27 :       DirectMessageExchanger exchanger = new DirectMessageExchanger(
 28 :           connection, Configuration.getInstance());
 29 : 
 30 :       int time = 0;
 31 :       boolean loop = true;
 32 :       while (loop) {
 33 :         Thread.sleep(5000);
 34 :         SampleUtils.println("loop : " + time++);
 35 :         exchanger.hit();
 36 : 
 37 :         Container container = exchanger.receiveMessage();
 38 :         if (container != null) {
 39 :           SampleUtils.printContainerInformation(container);
 40 :           PayloadContainer request = (PayloadContainer) container;
 41 :           SampleUtils.printServiceContent(request.getServiceContent());
 42 :           Session session = new RespondSession(request
 43 :               .getRemotePartner(), request.getPIPID());
 44 :           SampleUtils.printSessionState("created", session);
 45 :           session.pushMessage(request);
 46 :           SampleUtils.printSessionState("pushed", session);
 47 :           session.acceptPartnerMessage();
 48 :           SampleUtils.printSessionState("accepted", session);
 49 :           StatusContainer status = session.getStatusToSend();
 50 :           SampleUtils.printSessionState("sent status", session);
 51 :           SampleUtils.printContainerInformation(status);
 52 :           exchanger.sendMessage(status);
 53 :           exchanger.hit();
 54 :           loop = false;
 55 :         }
 56 :       }
 57 : 
 58 :     } catch (Exception e) {
 59 :       e.printStackTrace();
 60 :     }
 61 :   }
 62 : 
 63 : }

*PayloadContainerの受信 [#hec3871b]

DirectMessageExchanger#hitを呼出し後、DirectMessageExchanger#receiveMessageによりメッセージを取得します。

 35 :         exchanger.hit();

 37 :         Container container = exchanger.receiveMessage();

メッセージがアクションメッセージであればPayloadContainerにキャストできます。

 40 :           PayloadContainer request = (PayloadContainer) container;

|関連クラス|機能|h
|com.ados.hestia.parser.rnbm.exchange.PayloadContainer|ServiceContentを保持し、Hestiaから渡される。|
|com.ados.hestia.parser.rnbm.exchange.Container|PayloadContainerおよびStatusContainerの上位クラス。|

*Sessionの生成 [#sdcb83a5]

PIPの回答側はRespondSessionによりセッションを生成します。

 42 :           Session session = new RespondSession(request
 43 :               .getRemotePartner(), request.getPIPID());

 45 :           session.pushMessage(request);

|関連クラス|機能|h
|com.ados.hestia.sdk.session.Session|InitiationSessionの上位クラス。|
|com.ados.hestia.sdk.session.RespondSession|回答側のPIPプロセスを表すクラス。|

*StatusContainerの送信 [#oa55232b]

パートナーからPIPメッセージを受信した時点で、Hestiaはデータバリデーションを行い、AcknowledgmentまたはExceptionを返信します。ここでの処理は、ハンドラによる、パートナーへ0C1を送信するか、何もしないかの制御を表します。

具体的には、パートナーに対して何もしない場合は、セッションのacceptPartnerMessage メソッドを呼び出します。パートナーへ0A1()を送信する場合は、*メソッドを呼び出します。これらのメソッドによりHestiaへのシグナル送信が待機され、hitメソッドにより送信が実行されます。

 47 :           session.acceptPartnerMessage();

 49 :           StatusContainer status = session.getStatusToSend();

 52 :           exchanger.sendMessage(status);
 53 :           exchanger.hit();

|関連クラス|機能|h
|com.ados.hestia.sdk.message.DirectMessageExchanger|HestiaとRMI接続を行う。|
|com.ados.hestia.parser.rnbm.exchange.StatusContainer|シグナル情報を運ぶ。|

トップ   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS

Copyright 2005-2008. ADOS Co., Ltd. All Rights Reserved.