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

【1アクションPIPの回答側処理】

目次

概要

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

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

g04.gif

Hestiaがパートナーからアクションメッセージを受信すると、EISとは無関係に、アクションメッセージのバリデーション後、自動的にシグナルメッセージをパートナーに送信します。さらに、HestiaはEISからStatusContainerを受信しないか、RejectのStatusContainerを受信した場合、PIP 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の受信

DirectMessageExchanger#hitを呼出し、Hestiaからのメッセージを受信します。そして、DirectMessageExchanger#receiveMessageによりメッセージを取得します。

35 :         exchanger.hit();
37 :         Container container = exchanger.receiveMessage();

Hestiaからは、PayloadContainerかStatusContainerを受信する可能性があります。メッセージが、パートナーから開始されたアクションメッセージであれば、PayloadContainerにキャストできます。

40 :           PayloadContainer request = (PayloadContainer) container;
関連クラス機能
com.ados.hestia.sdk.message.DirectMessageExchangerHestiaとRMI接続を行う。
com.ados.hestia.parser.rnbm.exchange.PayloadContainerServiceContentを保持し、Hestiaから渡される。
com.ados.hestia.parser.rnbm.exchange.ContainerPayloadContainerおよびStatusContainerの上位クラス。

Sessionの生成

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

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

Sessionに、受信したPayloadContainerを入力します。それによりSessionのステータスが更新されます。

45 :           session.pushMessage(request);
関連クラス機能
com.ados.hestia.sdk.session.SessionInitiationSessionの上位クラス。
com.ados.hestia.sdk.session.RespondSession回答側のPIPプロセスを表すクラス。

StatusContainerの送信

ここでの処理は、パートナーへ0A1を送信するか、何もしなで正常にPIPプロセスを完了するかの制御を表します。パートナーへのAcknowledgmentまたはExceptionの返信はHestiaのみで行っており、EISはその制御を行いません。

具体的には、正常にPIPプロセスを完了する場合は、Session#acceptPartnerMessageを呼び出します。一方、パートナーへ0A1を送信する場合は、Session#rejectPartnerMessageを呼び出します。

※0A1の送信は、システムの処理が失敗した場合に行います。ビジネス上の受諾や拒否を意味するものではありません。

47 :           session.acceptPartnerMessage();

その後、StatusContainerを生成し、DirectMessageExchangerを介してHestiaへ送信します。

49 :           StatusContainer status = session.getStatusToSend();
52 :           exchanger.sendMessage(status);
53 :           exchanger.hit();
関連クラス機能
com.ados.hestia.parser.rnbm.exchange.StatusContainerシグナル情報を運ぶ。

添付ファイル: fileg04.gif 1411件 [詳細]

トップ   差分 バックアップ リロード   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: Mon, 24 Oct 2005 17:10:59 JST (6748d)

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