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

目次

#contents

*概要 [#d32814ba]

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

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

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

【PIPSender2Action.java】
 1 : import java.io.FileInputStream;
 2 : import java.util.Date;
 3 : import java.util.Properties;
 4 : 
 5 : import com.ados.hestia.parser.rnbm.access.Validator;
 6 : import com.ados.hestia.parser.rnbm.exchange.Container;
 7 : import com.ados.hestia.parser.rnbm.exchange.PayloadContainer;
 8 : import com.ados.hestia.parser.rnbm.exchange.StatusContainer;
 9 : import com.ados.hestia.parser.rnbm.model.RootElement;
 10 : import com.ados.hestia.parser.rnbm.particle.DateTimeStamp;
 11 : import com.ados.hestia.parser.rnbm.particle.ServiceContent;
 12 : import com.ados.hestia.parser.rnbm.repository.Repository;
 13 : import com.ados.hestia.sdk.Configuration;
 14 : import com.ados.hestia.sdk.Connection;
 15 : import com.ados.hestia.sdk.message.DirectMessageExchanger;
 16 : import com.ados.hestia.sdk.rnbm.randomgenerator.RootElementGenerator;
 17 : import com.ados.hestia.sdk.session.InitiationSession;
 18 : import com.ados.hestia.sdk.session.Session;
 19 : import com.ados.hestia.utils.UID;
 20 : 
 21 : public class PIPSender2Action {
 22 : 
 23 :   public static void main(String[] args) {
 24 :     try {
 25 :       Properties prop = new Properties();
 26 :       prop.load(new FileInputStream("sample.properties"));
 27 :       String HOST = prop.getProperty("HOST");
 28 :       String USER = prop.getProperty("USER");
 29 :       String PASS = prop.getProperty("PASS");
 30 :       String HANDLER_ID = prop.getProperty("HANDLER_ID");
 31 :       String SENDER = prop.getProperty("SENDER");
 32 :       String RECEIVER = prop.getProperty("RECEIVER");
 33 : 
 34 :       Connection connection = new Connection(HOST, USER, PASS,
 35 :           Connection.EXCHANGE_MODE_DIRECT, null, null, null,
 36 :           HANDLER_ID);
 37 :       DirectMessageExchanger exchanger = new DirectMessageExchanger(
 38 :           connection, Configuration.getInstance());
 39 : 
 40 :       RootElement re = Repository.getDefault().getResolver()
 41 :           .resolveByVersion("0C2", "Pip0C2AsynchronousTestRequest",
 42 :               "R01.01.00");
 43 :       RootElementGenerator reg = new RootElementGenerator(re);
 44 :       reg.process();
 45 :       ServiceContent sc = new ServiceContent("0C2", re);
 46 :       sc.setGlobalDocumentFunctionCode("Request");
 47 :       sc.setDocumentGenerationDateTime(new DateTimeStamp());
 48 :       sc.setDocumentIdentifier((new UID()).toString());
 49 :       sc.setElementValue(
 50 :           "fromRole/PartnerRoleDescription/PartnerDescription/BusinessDescription/GlobalBusinessIdentifier",
 51 :               SENDER);
 52 :       sc.setElementValue(
 53 :           "toRole/PartnerRoleDescription/PartnerDescription/BusinessDescription/GlobalBusinessIdentifier",
 54 :               RECEIVER);
 55 : 
 56 :       Session session = new InitiationSession(new PayloadContainer(
 57 :           new Date(), SENDER, RECEIVER, (new UID()).toString(), sc,
 58 :           null));
 59 :       SampleUtils.printSessionState("created", session);
 60 :       PayloadContainer request = session.getMessageToSend();
 61 :       SampleUtils.printSessionState("got", session);
 62 :       SampleUtils.printContainerInformation(request);
 63 :       SampleUtils.printServiceContent(request.getServiceContent());
 64 :       new Validator(request.getServiceContent().getElement()).validate();
 65 :       exchanger.sendMessage(request);
 66 :       SampleUtils.printSessionState("sent", session);
 67 : 
 68 :       int time = 0;
 69 :       boolean loop = true;
 70 :       while (loop) {
 71 :         Thread.sleep(5000);
 72 :         exchanger.hit();
 73 :         SampleUtils.printSessionState("request loop=" + time++, session);
 74 : 
 75 :         Container container = exchanger.receiveMessage();
 76 :         if (container != null) {
 77 :           SampleUtils.printContainerInformation(container);
 78 :           session.pushStatus((StatusContainer) container);
 79 :           SampleUtils.printSessionState("pushed", session);
 80 :           loop = false;
 81 :         }
 82 :       }
 83 : 
 84 :       loop = true;
 85 :       while (loop) {
 86 :         Thread.sleep(5000);
 87 :         exchanger.hit();
 88 :         SampleUtils.printSessionState("response loop=" + time++,
 89 :             session);
 90 : 
 91 :         Container container = exchanger.receiveMessage();
 92 :         if (container != null) {
 93 :           SampleUtils.printContainerInformation(container);
 94 :           PayloadContainer response = (PayloadContainer) container;
 95 :           SampleUtils.printServiceContent(response
 96 :               .getServiceContent());
 97 :           session.pushMessage(response);
 98 :           SampleUtils.printSessionState("pushed", session);
 99 :           session.acceptPartnerMessage();
 100 :           SampleUtils.printSessionState("accepted", session);
 101 :           StatusContainer status = session.getStatusToSend();
 102 :           SampleUtils.printSessionState("sent status", session);
 103 :           SampleUtils.printContainerInformation(status);
 104 :           exchanger.sendMessage(status);
 105 :           exchanger.hit();
 106 :           loop = false;
 107 :         }
 108 :       }
 109 : 
 110 :     } catch (Exception e) {
 111 :       e.printStackTrace();
 112 :     }
 113 :   }
 114 : 
 115 : }

*Sessionの使用 [#b25b3dc1]

InitiationSessionによりセッションオブジェクトを生成し、そのオブジェクトにより4メッセージの処理を行います。

Sessionの生成

 56 :       Session session = new InitiationSession(new PayloadContainer(
 57 :           new Date(), SENDER, RECEIVER, (new UID()).toString(), sc,
 58 :           null));

送信するPayloadContainerの取得

 60 :       PayloadContainer request = session.getMessageToSend();

受信したStatusContainerの入力

 75 :         Container container = exchanger.receiveMessage();

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

受信したPayloadContainerの入力

 91 :         Container container = exchanger.receiveMessage();

 94 :           PayloadContainer response = (PayloadContainer) container;

 97 :           session.pushMessage(response);

送信するStatusContainerの取得

 99 :           session.acceptPartnerMessage();

 101 :           StatusContainer status = session.getStatusToSend();


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

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