[ADOS] ADOS Developer's Site - XML Stadium
ADOS Company slogan - XML Total Solution

 RIGHT:[[目次>Hestia Hacks]]|[[前>]]|[[次>]]
 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.