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

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

目次

概要

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の使用

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
Last-modified: Mon, 24 Oct 2005 17:11:21 JST (4863d)

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