Interstage Application Server アプリケーション作成ガイド (CORBAサービス編) |
目次
索引
![]() ![]() |
第6章 アプリケーションの開発(Java言語) | > 6.18 データ型に対するマッピング |
IDL言語で構造体structを指定した場合、Java言語ではstructクラス、structHolderクラス、およびstructHelperクラスになります。
structクラス名は、IDLで定義した構造体名になります。本クラスは、inパラメタおよび復帰値を扱う場合に使用します。
以下の表にstructクラスで定義されているメンバの意味を示します。
structクラスのメンバ |
意味 |
デフォルトコンストラクタ |
何もしません。 |
コンストラクタ |
指定されたパラメタをインスタンスメンバに設定します。 |
structHolderクラス名は、以下のようにIDLで定義した構造体名+Holderになります。本クラスは、out、inoutパラメタを扱う場合に使用します。
<structHolderクラス>
[package <packageName>;] final public class <struct_class>Holder implements org.omg.CORBA.portable.Streamable { public [<packageName>.]<struct_class> value; public <struct_class>Holder() {} public <struct_class>Holder([<packageName>.]<struct_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() {...} }
以下の表にstructHolderクラスで定義されているメンバの意味を示します。
structHolderクラスのメンバ |
意味 |
デフォルトコンストラクタ |
valueメンバへの設定なしで、インスタンスを生成するた |
コンストラクタ |
指定されたパラメタをvalueメンバに設定します。 |
_read() |
要素の値を読み込みます。 |
_write() |
要素の値を書き込みます。 |
_type() |
TypeCodeを取り出します。 |
structHelperクラス名は、以下のようにIDLで定義した構造体名+Helperになります。
Helperクラスはユーザ定義型のデータのデータストリームへの書き込み、データストリームからのユーザ定義型のデータの取り出し、ユーザ定義型のTypeCode,リポジトリIDの参照等の機能を提供します。
<structHelperクラス>
[package <packageName>;] public class <struct_class>Helper { public static void insert(org.omg.CORBA.Any a, <packageName>.<struct_class> value){...} public static <packageName>.<struct_class> extract(org.omg.CORBA.Any a){...} public static org.omg.CORBA.TypeCode type(){...} public static String id(){...} public static <packageName>.<struct_class> read(org.omg.CORBA.portable.InputStream istream){...} public static void write(org.omg.CORBA.portable.OutputStream ostream, <packageName>.<struct_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(){...} }
以下の表にstructHelperクラス中で定義されているメンバの意味を示します。
structHelperクラスのメンバ |
意味 |
insert() |
要素の値を挿入します。 |
extract() |
要素の値を取り出します。 |
type() |
TypeCodeを取り出します。 |
id() |
リポジトリIDを返します。 |
IDL言語での定義が以下のように定義されていた場合について、アプリケーションプログラムの例を示します。
【IDL言語】
module ODsample{ struct samplefix { // 構造体(固定長) long para1; long para2; }; struct samplevar { // 構造体(可変長) long para1; string para2; }; interface structtest{ samplefix op2( in samplefix str1, out samplefix str2, inout samplefix str3 ); samplevar op1( in samplevar str1, out samplevar str2, inout samplevar str3 ); }; };
これをJava言語で記述すると以下のようになります。
【Java言語】
<インタフェース>
package ODsample; public interface structtestOperations { public ODsample.samplefix op2(ODsample.samplefix str1, ODsample.samplefixHolder str2, ODsample.samplefixHolder str3 ); public ODsample.samplevar op1(ODsample.samplevar str1, ODsample.samplevarHolder str2, ODsample.samplevarHolder str3 ); }
<structクラス>
package ODsample; final public class samplefix implements org.omg.CORBA.portable.IDLEntity { public int para1; public int para2; public samplefix() {} public samplefix(int para1, int para2) {...} } package ODsample; final public class samplevar implements org.omg.CORBA.portable.IDLEntity { public int para1; public java.lang.String para2; public samplevar() {} public samplevar( int para1, java.lang.String para2) {...} }
<structHolderクラス>
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() {...} }
<structHelperクラス>
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パラメタのstruct型のデータ領域は、newを使用して獲得します。inout、outパラメタの場合はstructHolderクラスを使用してデータ領域を割り当てます。
クライアントアプリケーションはin、inoutパラメタの入力値として、structクラスのインスタンスのメンバに値を設定します。 inoutパラメタでは、作成したstructクラスのインスタンスをstructHolderクラスのメンバに設定します。
inout、outパラメタの出力値を参照するには、structHolderクラスのインスタンスのvalueを参照します。
import org.omg.CORBA.*; import ODsample.*; public class structClient { public static void main(String args[]) { // ORBの前処理 // オブジェクトリファレンスの獲得 : try { // 固定長構造体 // inパラメタ用変数 int in_fix_para1 = 3; int in_fix_para2 = 10; samplefix in_fix = new samplefix( in_fix_para1, in_fix_para2 ); // outパラメタ用変数 samplefixHolder outHolder_fix = new samplefixHolder(); // inoutパラメタ用変数 int inout_fix_para1 = 20; int inout_fix_para2 = 50; samplefix inout_fix_tmp = new samplefix(inout_fix_para1, inout_fix_para2); samplefixHolder inoutHolder_fix = new samplefixHolder( inout_fix_tmp ); // 復帰値用変数 samplefix ret_fix; // サーバアプリケーションのメソッド呼出し ret_fix = target.op2( in_fix, outHolder_fix, inoutHolder_fix ); // メソッドの結果表示 // 復帰値の表示 System.out.println( ret_fix.para1 ); System.out.println( ret_fix.para2 ); // outパラメタの表示 System.out.println( outHolder_fix.value.para1 ); System.out.println( outHolder_fix.value.para2 ); // inoutパラメタの表示 System.out.println( inoutHolder_fix.value.para1 ); System.out.println( inoutHolder_fix.value.para2 ); // 可変長構造体 // inパラメタ用変数 int in_var_para1 = 3; String in_var_para2 = "test"; samplevar in_var = new samplevar( in_var_para1, in_var_para2 ); // outパラメタ用変数 samplevarHolder outHolder_var = new samplevarHolder(); // inoutパラメタ用変数 int inout_var_para1 = 20; String inout_var_para2 = "dummy"; samplevar inout_var_tmp = new samplevar(inout_var_para1, inout_var_para2); samplevarHolder inoutHolder_var = new samplevarHolder( inout_var_tmp ); // 復帰値用変数 samplevar ret_var; // サーバアプリケーションのメソッド呼出し ret_var = target.op1( in_var, outHolder_var, inoutHolder_var ); // メソッドの結果表示 // 復帰値の表示 System.out.println( ret_var.para1 ); System.out.println( ret_var.para2 ); // outパラメタの表示 System.out.println( outHolder_var.value.para1 ); System.out.println( outHolder_var.value.para2 ); // inoutパラメタの表示 System.out.println( inoutHolder_var.value.para1 ); System.out.println( inoutHolder_var.value.para2 ); } catch (java.lang.Exception e) { //エラー処理 : } } }
inout、outパラメタにデータを代入するには、inout、outのHolderクラスのvalueに設定します。
import org.omg.CORBA.*; import org.omg.PortableServer.*; import ODsample.*; // Servantクラス // サーバアプリケーションのメソッド class structServant extends structtestPOA { // 固定長構造体 public samplefix op2( samplefix in_fix, samplefixHolder outHolder_fix, samplefixHolder inoutHolder_fix ) { // 入力パラメタの表示 // inパラメタの表示 System.out.println( in_fix.para1 ); System.out.println( in_fix.para2 ); // inoutパラメタの表示 System.out.println( inoutHolder_fix.value.para1 ); System.out.println( inoutHolder_fix.value.para2 ); // 出力パラメタの設定 // outパラメタの設定 int out_fix_para1 = 123; int out_fix_para2 = 456; samplefix out_fix_tmp = new samplefix( out_fix_para1, out_fix_para2 ); outHolder_fix.value = out_fix_tmp; // inoutパラメタの設定 inoutHolder_fix.value.para1 = inoutHolder_fix.value.para1 * 10; inoutHolder_fix.value.para2 = inoutHolder_fix.value.para2 * 10; // 復帰の設定 int ret_fix_para1 = 333; int ret_fix_para2 = 777; samplefix ret_fix = new samplefix( ret_fix_para1, ret_fix_para2 ); // 復帰 return( ret_fix ); } // 可変長構造体 public samplevar op1( samplevar in_var, samplevarHolder outHolder_var, samplevarHolder inoutHolder_var ) { // 入力パラメタの表示 // inパラメタの表示 System.out.println( in_var.para1 ); System.out.println( in_var.para2 ); // inoutパラメタの表示 System.out.println( inoutHolder_var.value.para1 ); System.out.println( inoutHolder_var.value.para2 ); // 出力パラメタの設定 // outパラメタの設定 int out_var_para1 = 11111; String out_var_para2 = "out-str"; samplevar out_var_tmp = new samplevar( out_var_para1, out_var_para2 ); outHolder_var.value = out_var_tmp; // inoutパラメタの設定 inoutHolder_var.value.para1 = inoutHolder_var.value.para1 + 2000; inoutHolder_var.value.para2 = inoutHolder_var.value.para2 + "-inout-str"; // 復帰の設定 int ret_var_para1 = 0; String ret_var_para2 = "return-str"; samplevar ret_var = new samplevar( ret_var_para1, ret_var_para2 ); // 復帰 return( ret_var ); } } public class structServer { public static void main(String args[]) { try { // ORBの前処理 : // POAオブジェクトの生成 : // Servantの生成とそのPOAへの登録 : // POAManagerの活性化 : } catch (java.lang.Exception e) { //エラー処理 : } } }
目次
索引
![]() ![]() |