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

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