ADOS Developer's Site - XML Stadium |
【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); |
Copyright 2005-2008. ADOS Co., Ltd. All Rights Reserved. |