RIGHT:[[目次>Hestia Hacks]]|[[前>1アクションPIPの回答側処理]]|[[次>2アクションPIPの回答側処理]]
RIGHT:[[目次>Hestia Hacks#SDKDevDuide]]|[[前>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();