Interstage Application Server アプリケーション作成ガイド (CORBAサービス編) |
目次
索引
![]() ![]() |
第5章 アプリケーションの開発(Java言語) | > 5.13 サーバアプリケーションのプログラミング (動的スケルトンインタフェース:DSI) |
ゲートウェイでは、以下に示す処理を行います。
ゲートウェイの実装例を以下に示します。
【ゲートウェイ実装例】
class DsiServant extends org.omg.PortableServer.DynamicImplementation { public void invoke(org.omg.CORBA.ServerRequest req) { org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init(); String name = req.operation(); //1メソッド名の取得 if (name.equals("add")) //メソッド名の解析 { //2パラメタリストの設定 //パラメタリストの作成 org.omg.CORBA.NVList args = orb.create_list(2); //パラメタ情報の登録 org.omg.CORBA.Any _a = orb.create_any(); _a.type(orb.get_primitive_tc( org.omg.CORBA.TCKind.tk_long)); args.add_value("a", _a, org.omg.CORBA.ARG_IN.value); org.omg.CORBA.Any _b = orb.create_any(); _b.type(orb.get_primitive_tc( org.omg.CORBA.TCKind.tk_long)); args.add_value("b", _b, org.omg.CORBA.ARG_IN.value); //3パラメタの解析 req.arguments(args); int a = _a.extract_long(); int b = _b.extract_long(); //処理部の起動 org.omg.CORBA.IntHolder ret = new org.omg.CORBA.IntHolder(); UserMethod um = new UserMethod(); ret.value = um.method1(a, b); //4復帰情報の設定 org.omg.CORBA.Any _ret = orb.create_any(); _ret.type(orb.get_primitive_tc( org.omg.CORBA.TCKind.tk_long)); _ret.insert_long(ret.value); req.set_result(_ret); return; } throw (new org.omg.CORBA.BAD_OPERATION( 0, org.omg.CORBA.CompletionStatus.COMPLETED_MAYBE)); } //5実装が必要なメソッド public java.lang.String[] _all_interfaces( org.omg.PortableServer.POA poa, byte[] objectId) { return ids; } private static java.lang.String[] ids = {"IDL:ODsample/intf:1.0"}; } //処理部 class UserMethod { public int method1( int a, int b ){ //必要な処理を記述 return( a + b ); } }
ゲートウェイを実装するServantオブジェクトは、org.omg.PortableServer.DynamicImplementationを継承するものとして作成します。また、クライアントからのリクエストに対して起動されるメソッドとしてinvoke()メソッドを実装します。起動の際、invoke()の引数としてServerRequestクラスのオブジェクト(上記例ではreq)が渡されます。
【ゲートウェイServantの必須メソッド(1)】
public void invoke(org.omg.CORBA.ServerRequest req)
渡されたServerRequestクラスに登録されているオペレーション名をorg.omg.CORBA.ServerRequest.operation()メソッドにより取得します。
生成したNVListオブジェクトを引数としてorg.omg.ServerRequest.arguments()メソッドを呼び出します。この結果、アプリケーションに渡すパラメタ値が取得されます。
org.omg.CORBA.ServerRequest.set_result()メソッドを発行して復帰情報の設定を行います。
ゲートウェイを実装するServantはOMG規約上_all_interfaces()メソッドを実装しておく必要があります。上記の例のように、org.omg.PortableServer.POAクラスのオブジェクト、byte配列オブジェクトを引数とし、インタフェースリポジトリID相当の文字列("IDL:xxx:1.0")を最初の要素に持つString配列オブジェクトを戻り値とする形式で実装します。引数の値をメソッド内部で扱う必要は特にありません。
【ゲートウェイServantの必須メソッド(2)】
public java.lang.String[] _all_interfaces( org.omg.PortableServer.POA poa, byte[] objectId)
目次
索引
![]() ![]() |