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

 
 *オブジェクトの関係 [#see246d9]
 
 PIPの開始側ではオブジェクトが図のような連携を行います。
 
 Hestiaとの疎通はDirectMessageExchangerが行います。なお、DirectMessageExchangerはRMIでHestiaと通信する場合のクラスです。JMSによって通信する場合はJMSMessageExchangerを使用します。これらはMessageExchanger型から継承されています。
 
 InitiationSessionオブジェクトはPIP開始側の1PIPプロセスを表します。
 
 *RMIによる接続 [#wd97e796]
 
 RMIによる接続にはDirectMessageExchangerクラスを使用します。RMIを使用するため、 ConnectionコンストラクタにEXCHANGE_MODE_DIRECT を指定する必要があります。また、同コンストラクタにはハンドラIDを指定します(ここでは「EIS」)。このハンドラIDはbridgehandlers.xmlに登録されているものを指定する必要があります。
 
 String host = "localhost";
 String user = null;
 String password = null;
 int exchangeMode = Connection.EXCHANGE_MODE_DIRECT;
 String handlerid = "EIS";
 Connection connection = new Connection(host, user, password,exchangeMode, null, null, null, handlerid);
 DirectMessageExchanger exchanger = new DirectMessageExchanger(connection, Configuration.getInstance());
 
 
 関連クラス
 機能
 com.ados.hestia.sdk.Connection
 Hestiaのネットワークアドレス等をパッケージしたオブジェクト。
 com.ados.hestia.sdk.Configuration
 
 com.ados.hestia.sdk.message.DirectMessageExchanger
 RMI接続を行う。
 
 *ServiceContentの生成 [#n5be4ae0]
 
 ここでは、ServiceContentのサンプルデータを内部生成しています。通常、バックエンドから入力されたXMLやCSVから、ServiceContentを生成します。しかし、ビジネスデータ以外のドキュメントIDやドキュメント生成時間などの疎通管理情報は入力データに含まれないことも多いため、EISで動的に設定するケースがあります。
 
 RootElement re = Repository.getDefault().getResolver().resolveByVersion("0C1","Pip0C1AsynchronousTestNotification", "R01.02.00");
 RootElementGenerator reg = new RootElementGenerator(re);
 reg.process();
 ServiceContent sc = new ServiceContent("0C1", re);
 sc.setGlobalDocumentFunctionCode("Request");
 DateTimeStamp d1 = new DateTimeStamp();
 String uid1 = (new UID()).toString();
 sc.setDocumentGenerationDateTime(d1);
 sc.setDocumentIdentifier(uid1);
 sc.setElementValue("fromRole/PartnerRoleDescription/PartnerDescription/BusinessDescription/GlobalBusinessIdentifier","111111111");
 sc.setElementValue("toRole/PartnerRoleDescription/PartnerDescription/BusinessDescription/GlobalBusinessIdentifier","987654321");
 
 
 ServiceContentの設定メソッド
 対応するXPath
 setGlobalDocumentFunctionCode
 /*/GlobalDocumentFunctionCode
 setDocumentGenerationDateTime
 /*/thisDocumentGenerationDateTime/DateTimeStamp
 setDocumentIdentifier
 /*/thisDocumentIdentifier/ProprietaryDocumentIdentifier
 setElementValue
 任意のパスを、ルート要素の下から指定
 
 
 関連クラス
 機能
 com.ados.hestia.parser.rnbm.particle.ServiceContent
 ServiceContentを表すクラス。
 com.ados.hestia.parser.rnbm.particle.DateTimeStamp
 RossetaNet形式の時間データを表すクラス。
 com.ados.hestia.utils.UID
 ユニークなIDを生成するクラス。
 
 *セッションの生成 [#k23dfe24]
 
 一つのセッションオブジェクトはPIPの一組のプロセスを表します。具体的には、1アクションPIPの場合は、アクション-シグナルの2メッセージの送受信を表します。2アクションPIPの場合は、アクション-シグナル-アクション-シグナルの4メッセージの送受信を表します。セッションはPIPの進行状態の情報を保持し、そのフラグを参照することによって疎通管理を行えます。
 
 Date d2 = new Date();
 String uid2 = (new UID()).toString();
 Session session = new InitiationSession(new PayloadContainer(d2, "111111111","987654321", uid2, sc, null));
 
 
 関連クラス
 機能
 com.ados.hestia.utils.UID
 ユニークなIDを生成するクラス。
 com.ados.hestia.parser.rnbm.exchange.PayloadContainer
 ServiceContentを保持し、Hestiaへ渡されるオブジェクト。
 com.ados.hestia.sdk.session.InitiationSession
 com.ados.hestia.sdk.session.Session
 セッションクラス。InitiationSessionは、自社から送信を開始(Initiation)するセッションを表す。
 
 
 *PIPメッセージの送信 [#edf97b7e]
 
 PIPメッセージを送信する前に、ハンドラ側でデータバリデーションを行う必要があります。Hestia側では送信時にデータバリデーションを行いません。
 
 PayloadContainer request = session.getMessageToSend();
 new Validator(request.getServiceContent().getElement()).validate();
 
 sendMessageメソッドを呼び出してPayloadContainerを入力すると、Hestiaへの送信が待機されます。そして、hitメソッドが呼び出されると、Hestiaへ送信されます。Hestiaからパートナーへのメッセージ送信は、ハンドラから管理できません。また、hitメソッドは、1件のPIPメッセージ送信だけでなく、送信待機された全てのメッセージ送信と、Hestiaから渡されたすべてのメッセージ受信を行います。
 
 exchanger.sendMessage(request);
 exchanger.hit();
 
 
 関連クラス
 機能
 com.ados.hestia.parser.rnbm.access.Validator
 データのバリデーションを行うクラス。
 
 *シグナルの受信 [#i71f86ae]
 
 前述のようにhitメソッドは待機中の全てのメッセージ送受信を行います。そこでメッセージが受信されれば、receiveMessageメソッドにより取得できます。そして、pushStatusメソッドを呼び出し、受信メッセージを入力します。
 
 なお、pushStatusメソッドで入力するメッセージは、セッションの一部である必要があります。したがって、*によりIDが一致するか確認します。
 
 また、シグナルメッセージの受信を待機するため、受信処理をループで周期的に実行させる必要があります。
 
 exchanger.hit();
 Container container = exchanger.receiveMessage();
 session.pushStatus((StatusContainer) container);
 

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

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