![]() |
ADOS Developer's Site - XML Stadium |
![]() |
![]() |
|
![]() |
【1アクションPIPの回答側処理】目次 概要 †1アクションPIPの回答側処理について解説します。 PIPの回答側ではオブジェクトが図のような連携を行います。 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;
Sessionの生成 †PIPの回答側はRespondSessionによりセッションを生成します。 42 : Session session = new RespondSession(request 43 : .getRemotePartner(), request.getPIPID()); Sessionに、受信したPayloadContainerを入力します。それによりSessionのステータスが更新されます。 45 : session.pushMessage(request);
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();
|
Copyright 2005-2008. ADOS Co., Ltd. All Rights Reserved. |