Interstage Application Server アプリケーション作成ガイド (CORBAサービス編) |
目次
索引
![]() ![]() |
第6章 アプリケーションの開発(Java言語) | > 6.17 データ型に対するマッピング |
IDL言語で共用体unionを指定した場合、Java言語では、unionクラス、unionHolderクラス、およびunionHelperクラスになります。
unionクラス名は、IDLで定義した共用体名になります。本クラスは、inパラメタおよび復帰値を扱う場合に使用します。
以下の表にunionクラスで定義されているメンバの意味を示します。
unionクラスのメンバ |
意味 |
デフォルトコンストラクタ |
何もしません。 |
弁別子へのアクセスメソッド |
弁別子へのアクセスメソッド名はdiscriminatorになります。 |
メンバへの設定メソッド |
メンバへの設定メソッド名はメンバ名になります。 |
メンバの参照メソッド |
メンバの参照メソッド名はメンバ名になります。 |
unionHolderクラス名は、IDLで定義した共用体名+Holderになります。本クラスは、out、inoutパラメタを扱う場合に使用します。
<unionHolderクラス>
[package <packageName>;] final public class <union_class>Holder implements org.omg.CORBA.portable.Streamable { public [<packageName>.]< union _class> value; public < union _class>Holder() {} public < union _class>Holder([<packageName>.]< union _class> value) {...} public void _read(org.omg.CORBA.portable.InputStream i) {...} public void _write(org.omg.CORBA.portable.OutputStream o){...} public org.omg.CORBA.TypeCode _type() {...} }
以下の表にunionHolderクラスで定義されているメンバの意味を示します。
unionHolderクラスのメンバ |
意味 |
デフォルトコンストラクタ |
valueメンバへの設定なしで、インスタンスを生成するために使用します。 |
コンストラクタ |
指定されたパラメタを value メンバに設定します。 |
_read() |
要素の値を読み込みます。 |
_write() |
要素の値を書き込みます。 |
_type() |
TypeCodeを取り出します。 |
unionHelperクラス名は、以下のようにIDLで定義した共用体名+Helperになります。
Helperクラスはユーザ定義型のデータのデータストリームへの書き込み、データストリームからのユーザ定義型のデータの取り出し、ユーザ定義型のTypeCode,リポジトリIDの参照などの機能を提供します。
<unionHelperクラス>
[package <packageName>;] public class <union_class>Helper { public static void insert(org.omg.CORBA.Any a, <packageName>.<union_class> value){...} public static <packageName>.<union_class> extract(org.omg.CORBA.Any a){...} public static org.omg.CORBA.TypeCode type(){...} public static String id(){...} public static <packageName>.<union_class> read(org.omg.CORBA.portable.InputStream istream){...} public static void write(org.omg.CORBA.portable.OutputStream ostream, <packageName>.<union_class> value){...} public java.lang.Object read_Object(org.omg.CORBA.portable.InputStream istream){...} public void write_Object(org.omg.CORBA.portable.OutputStream ostream, Object value){...} public java.lang.String get_id( ){...} public org.omg.CORBA.TypeCode get_type(){...} }
以下の表にunionHelperクラス中で定義されているメンバの意味を示します。
unionHelperクラスのメンバ |
意味 |
insert() |
要素の値を挿入します。 |
extract() |
要素の値を取り出します。 |
type() |
TypeCodeを取り出します。 |
id() |
リポジトリIDを返します。 |
IDL言語での定義が以下のように定義されていた場合について、アプリケーションプログラムの例を示します。
【IDL言語】
module ODsample{ union samplefix switch(long){ // 共用体(固定長) case 1: long para1; case 2: long para2; }; union samplevar switch(long){ // 共用体(可変長) case 1: long para1; case 2: string para2; }; interface uniontest{ samplefix op2( in samplefix uni1, out samplefix uni2, inout samplefix uni3 ); samplevar op1( in samplevar uni1, out samplevar uni2, inout samplevar uni3 ); }; };
これをJava言語で記述すると以下のようになります。
【Java言語】
<インタフェース>
package ODsample; public interface uniontestOperations { public ODsample.samplefix op2(ODsample.samplefix uni1, ODsample.samplefixHolder uni2, ODsample.samplefixHolder uni3 ); public ODsample.samplevar op1(ODsample.samplevar uni1, ODsample.samplevarHolder uni2, ODsample.samplevarHolder uni3 ); }
<unionクラス>
package ODsample; final public class samplefix implements org.omg.CORBA.portable.IDLEntity { private int _discriminator; private java.lang.Object value; public samplefix() {} public int discriminator(){...} public int para1() throws org.omg.CORBA.BAD_OPERATION{...} public void para1( int value ){...} public int para2() throws org.omg.CORBA.BAD_OPERATION{...} public void para2( int value ){...} } package ODsample; final public class samplevar implements org.omg.CORBA.portable.IDLEntity { private int _discriminator; private java.lang.Object value; public samplevar() {} public int discriminator(){...} public int para1() throws org.omg.CORBA.BAD_OPERATION{...} public void para1( int value ){...} public java.lang.String para2() throws org.omg.CORBA.BAD_OPERATION{...} public void para2( java.lang.String value ){...} }
<unionHolderクラス>
package ODsample; public class samplefixHolder implements org.omg.CORBA.portable.Streamable { public ODsample.samplefix value; public samplefixHolder() {} public samplefixHolder(ODsample.samplefix value) {...} public void _read(org.omg.CORBA.portable.InputStream i) {...} public void _write(org.omg.CORBA.portable.OutputStream o) {...} public org.omg.CORBA.TypeCode _type() {...} } package ODsample; public class samplevarHolder implements org.omg.CORBA.portable.Streamable { public ODsample.samplevar value; public samplevarHolder() {} public samplevarHolder(ODsample.samplevar value) {...} public void _read(org.omg.CORBA.portable.InputStream i) {...} public void _write(org.omg.CORBA.portable.OutputStream o) {...} public org.omg.CORBA.TypeCode _type() {...} }
<unionHelperクラス>
package ODsample; public class samplefixHelper { public static void insert(org.omg.CORBA.Any a, ODsample.samplefix value){...} public static ODsample.samplefix extract(org.omg.CORBA.Any a){...} public static String id(){...} public java.lang.Object read_Object(org.omg.CORBA.portable.InputStream istream){...} public void write_Object(org.omg.CORBA.portable.OutputStream ostream, Object value){...} public java.lang.String get_id( ){...} public org.omg.CORBA.TypeCode get_type(){...} private static org.omg.CORBA.TypeCode _type; synchronized public static org.omg.CORBA.TypeCode type(){...} public static ODsample.samplefix read(org.omg.CORBA.portable.InputStream istream){...} public static void write(org.omg.CORBA.portable.OutputStream ostream, ODsample.samplefix value){...} } package ODsample; public class samplevarHelper { public static void insert(org.omg.CORBA.Any a, ODsample.samplevar value){...} public static ODsample.samplevar extract(org.omg.CORBA.Any a){...} public static String id(){...} public java.lang.Object read_Object(org.omg.CORBA.portable.InputStream istream){...} public void write_Object(org.omg.CORBA.portable.OutputStream ostream, Object value){...} public java.lang.String get_id( ){...} public org.omg.CORBA.TypeCode get_type(){...} private static org.omg.CORBA.TypeCode _type; synchronized public static org.omg.CORBA.TypeCode type(){...} public static ODsample.samplevar read(org.omg.CORBA.portable.InputStream istream){...} public static void write(org.omg.CORBA.portable.OutputStream ostream, ODsample.samplevar value){...} }
inパラメタのunion型のデータ領域は、newを使用して獲得します。inout、outパラメタの場合はunionHolderクラスを使用してデータ領域を割り当てます。unionデータの参照/設定は、メンバ参照関数、弁別子アクセス関数を使用します。
import org.omg.CORBA.*; import ODsample.*; public class unionClient { public static void main(String args[]) { // ORBの前処理 // オブジェクトリファレンスの獲得 : try{ // 固定長構造体 // inパラメタ用変数 samplefix in_fix = new samplefix(); in_fix.para1( 100 ); // 共用型変数をpara1の型で初期化 // outパラメタ用変数 samplefixHolder outHolder_fix = new samplefixHolder(); // inoutパラメタ用変数 samplefix inout_fix_tmp = new samplefix(); inout_fix_tmp.para1( 200 ); // 共用型変数をpara2の型で初期化 samplefixHolder inoutHolder_fix = new samplefixHolder(inout_fix_tmp); // 復帰値用変数 samplefix ret_fix; // サーバアプリケーションのメソッド呼出し ret_fix = target.op2( in_fix, outHolder_fix, inoutHolder_fix ); // メソッドの結果表示 // 復帰値の表示 switch( ret_fix.discriminator() ) { case 1: System.out.println( ret_fix.para1() ); break; case 2: System.out.println( ret_fix.para2() ); break; } // outパラメタの表示 switch( outHolder_fix.value.discriminator() ) { case 1: System.out.println( outHolder_fix.value.para1() ); break; case 2: System.out.println( outHolder_fix.value.para2() ); break; } // inoutパラメタの表示 switch( inoutHolder_fix.value.discriminator() ) { case 1: System.out.println( inoutHolder_fix.value.para1() ); break; case 2: System.out.println( inoutHolder_fix.value.para2() ); break; } // 可変長構造体 // inパラメタ用変数 samplevar in_var = new samplevar(); in_var.para1( 500 ); // 共用型変数をpara1の型で初期化 // outパラメタ用変数 samplevarHolder outHolder_var = new samplevarHolder(); // inoutパラメタ用変数 samplevar inout_var_tmp = new samplevar(); inout_var_tmp.para1( 200 ); // 共用型変数をpara2の型で初期化 samplevarHolder inoutHolder_var = new samplevarHolder(inout_var_tmp); // 復帰値用変数 samplevar ret_var; // サーバアプリケーションのメソッド呼出し ret_var = target.op1( in_var, outHolder_var, inoutHolder_var ); // メソッドの結果表示 // 復帰値の表示 switch( ret_var.discriminator() ) { case 1: System.out.println( ret_var.para1() ); break; case 2: System.out.println( ret_var.para2() ); break; } // outパラメタの表示 switch( outHolder_var.value.discriminator() ) { case 1: System.out.println( outHolder_var.value.para1() ); break; case 2: System.out.println( outHolder_var.value.para2() ); break; } // inoutパラメタの表示 switch( inoutHolder_var.value.discriminator() ) { case 1: System.out.println( inoutHolder_var.value.para1() ); break; case 2: System.out.println( inoutHolder_var.value.para2() ); break; } } catch (java.lang.Exception e) { //エラー処理 : } } }
inout、outパラメタにデータを代入するには、inout、outのHolderクラスのvalueに設定します。
import org.omg.CORBA.*; import org.omg.PortableServer.*; import ODsample.*; // Servantクラス // サーバアプリケーションのメソッド class unionServant extends uniontestPOA { public samplefix op2( samplefix in_fix, samplefixHolder outHolder_fix, samplefixHolder inoutHolder_fix ) { // 入力パラメタの表示 // inパラメタの表示 switch( in_fix.discriminator() ) { case 1: System.out.println( in_fix.para1() ); break; case 2: System.out.println( in_fix.para2() ); break; } // inoutパラメタの表示と設定 switch( inoutHolder_fix.value.discriminator() ) { case 1: System.out.println( inoutHolder_fix.value.para1() ); // 共用型変数をpara1の型からpara2の型に変更 inoutHolder_fix.value.para2( inoutHolder_fix.value.para1() * 100 ); break; case 2: System.out.println( inoutHolder_fix.value.para2() ); // 共用型変数をpara2の型からpara1の型に変更 inoutHolder_fix.value.para1( inoutHolder_fix.value.para2() * 100 ); break; } // 出力パラメタの設定 // outパラメタの設定 samplefix out_fix_tmp = new samplefix(); out_fix_tmp.para2( 999 ); // 共用型変数をpara2の型で初期化 outHolder_fix.value = out_fix_tmp; // 復帰の設定 samplefix ret_fix = new samplefix(); ret_fix.para1( 0 ); // 共用型変数をpara1の型で初期化 // 復帰 return( ret_fix ); } public samplevar op1( samplevar in_var, samplevarHolder outHolder_var, samplevarHolder inoutHolder_var ) { // 入力パラメタの表示 // inパラメタの表示 switch( in_var.discriminator() ) { case 1: System.out.println( in_var.para1() ); break; case 2: System.out.println( in_var.para2() ); break; } // inoutパラメタの表示と設定 switch( inoutHolder_var.value.discriminator() ) { case 1: System.out.println( inoutHolder_var.value.para1() ); // 共用型変数をpara1の型からpara2の型に変更 inoutHolder_var.value.para2( "inout-str-add-ret" ); break; case 2: System.out.println( inoutHolder_var.value.para2() ); // 共用型変数をpara2の型からpara1の型に変更 inoutHolder_var.value.para1( 5000 ); break; } // 出力パラメタの設定 // outパラメタの設定 samplevar out_var_tmp = new samplevar(); out_var_tmp.para2( "out-str" ); // 共用型変数をpara2の型で初期化 outHolder_var.value = out_var_tmp; // 復帰の設定 samplevar ret_var = new samplevar(); ret_var.para2( "ret-str" ); // 共用型変数をpara1の型で初期化 // 復帰 return( ret_var ); } } public class unionServer { public static void main(String args[]) { try { // ORBの前処理 : // POAオブジェクトの生成 : // Servantの生成とそのPOAへの登録 : // POAManagerの活性化 : } catch ( java.lang.Exception e ) { //エラー処理 : } } }
目次
索引
![]() ![]() |