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

目次

#contents

*概要 [#kdcea949]

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

2アクションPIPの回答側処理は、1アクションの回答処理と1アクションの開始処理を合わせたものとなり、処理プログラムの記述はほぼ同様です。ただし、2アクションPIPの1プロセスを通じて、同一のSessionオブジェクトが使用されます。

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

【PIPReceiver2Action.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.parser.rnbm.model.RootElement;
 8 : import com.ados.hestia.parser.rnbm.particle.ServiceContent;
 9 : import com.ados.hestia.parser.rnbm.repository.Repository;
 10 : import com.ados.hestia.sdk.Configuration;
 11 : import com.ados.hestia.sdk.Connection;
 12 : import com.ados.hestia.sdk.message.DirectMessageExchanger;
 13 : import com.ados.hestia.sdk.rnbm.randomgenerator.RootElementGenerator;
 14 : import com.ados.hestia.sdk.session.RespondSession;
 15 : import com.ados.hestia.sdk.session.Session;
 16 : import com.ados.hestia.utils.UID;
 17 : import com.ados.hestia.parser.rnbm.particle.DateTimeStamp;
 18 : 
 19 : public class PIPReceiver2Action {
 20 : 
 21 :   public static void main(String[] args) {
 22 :     try {
 23 :       Properties prop = new Properties();
 24 :       prop.load(new FileInputStream("sample.properties"));
 25 :       String HOST = prop.getProperty("HOST");
 26 :       String USER = prop.getProperty("USER");
 27 :       String PASS = prop.getProperty("PASS");
 28 :       String HANDLER_ID = prop.getProperty("HANDLER_ID");
 29 : 
 30 :       Connection connection = new Connection(HOST, USER, PASS,
 31 :           Connection.EXCHANGE_MODE_DIRECT, null, null, null,
 32 :           HANDLER_ID);
 33 :       DirectMessageExchanger exchanger = new DirectMessageExchanger(
 34 :           connection, Configuration.getInstance());
 35 : 
 36 :       Session session = null;
 37 :       int time = 0;
 38 :       boolean loop = true;
 39 :       while (loop) {
 40 :         Thread.sleep(5000);
 41 :         exchanger.hit();
 42 :         SampleUtils.printSessionState("loop=" + time++, session);
 43 : 
 44 :         Container container = exchanger.receiveMessage();
 45 :         if (container != null) {
 46 :           SampleUtils.printContainerInformation(container);
 47 :           PayloadContainer request = (PayloadContainer) container;
 48 :           SampleUtils.printServiceContent(request.getServiceContent());
 49 :           session = new RespondSession(request.getRemotePartner(),
 50 :               request.getPIPID());
 51 :           SampleUtils.printSessionState("created", session);
 52 :           session.pushMessage(request);
 53 :           SampleUtils.printSessionState("pushed", session);
 54 :           session.acceptPartnerMessage();
 55 :           SampleUtils.printSessionState("accepted", session);
 56 :           StatusContainer status = session.getStatusToSend();
 57 :           SampleUtils.printSessionState("sent status", session);
 58 :           SampleUtils.printContainerInformation(status);
 59 :           exchanger.sendMessage(status);
 60 :           exchanger.hit();
 61 : 
 62 :           SampleUtils.printContainerInformation(session
 63 :               .getPartnerMessage());
 64 :           RootElement element = Repository.getDefault().getResolver()
 65 :               .resolveByPeer(
 66 :                   request.getServiceContent().getElement());
 67 :           RootElementGenerator reg = new RootElementGenerator(element);
 68 :           reg.process();
 69 :           ServiceContent sc = new ServiceContent(request
 70 :               .getServiceContent().getPIPID(), element);
 71 :           sc.setGlobalDocumentFunctionCode("Response");
 72 :           sc.setDocumentGenerationDateTime(new DateTimeStamp());
 73 :           sc.setDocumentIdentifier((new UID()).toString());
 74 :           session.setLocalMessage(new PayloadContainer(null, request
 75 :               .getLocalPartner(), request.getRemotePartner(),
 76 :               request.getPipInstanceID(), sc, null));
 77 :           SampleUtils.printSessionState("set msg", session);
 78 :           PayloadContainer response = session.getMessageToSend();
 79 :           SampleUtils.printContainerInformation(response);
 80 :           SampleUtils.printSessionState("sent msg", session);
 81 :           SampleUtils.printServiceContent(response
 82 :               .getServiceContent());
 83 :           exchanger.sendMessage(response);
 84 :           exchanger.hit();
 85 :           loop = false;
 86 :         }
 87 :       }
 88 : 
 89 :       loop = true;
 90 :       while (loop) {
 91 :         Thread.sleep(5000);
 92 :         exchanger.hit();
 93 :         SampleUtils.printSessionState("loop=" + time++, session);
 94 : 
 95 :         Container container = exchanger.receiveMessage();
 96 :         if (container != null) {
 97 :           SampleUtils.printContainerInformation(container);
 98 :           session.pushStatus((StatusContainer) container);
 99 :           SampleUtils.printSessionState("pushed", session);
 100 :           loop = false;
 101 :         }
 102 :       }
 103 :     } catch (Exception e) {
 104 :       e.printStackTrace();
 105 :     }
 106 :   }
 107 : 
 108 : }

*Sessionの使用 [#q2469f6a]

RespondSessionによりセッションオブジェクトを生成し、そのオブジェクトにより4メッセージの処理を行います。RespondSessionは最初のPayloadContainerの受信後に生成します。

PayloadContainerの受信

 44 :         Container container = exchanger.receiveMessage();

 47 :           PayloadContainer request = (PayloadContainer) container;

Sessionの生成

 49 :           session = new RespondSession(request.getRemotePartner(),
 50 :               request.getPIPID());

受信したPayloadContainerの入力

 52 :           session.pushMessage(request);

送信するStatusContainerの取得

 54 :           session.acceptPartnerMessage();

 56 :           StatusContainer status = session.getStatusToSend();

送信するPayloadContainerの設定と取得

 74 :           session.setLocalMessage(new PayloadContainer(null, request
 75 :               .getLocalPartner(), request.getRemotePartner(),
 76 :               request.getPipInstanceID(), sc, null));

 78 :           PayloadContainer response = session.getMessageToSend();

受信したStatusContainerの入力

 95 :         Container container = exchanger.receiveMessage();

 98 :           session.pushStatus((StatusContainer) container);


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

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