Interstage Application Server アプリケーション作成ガイド (CORBAサービス編) |
目次
索引
![]() ![]() |
第6章 アプリケーションの開発(Java言語) | > 6.18 データ型に対するマッピング |
IDL言語で列挙型enumを指定した場合、Java言語ではenumクラスとenumHolderクラスとenumHelperクラスになります。
enumクラスには、以下のように要素を識別するためのメンバと、メンバにアクセスするためのメソッドが定義されています。本クラスは、inパラメタおよび復帰値を扱う場合に使用します。enumクラス名は、以下のようにIDLで定義したenum名(enumName)になります。
<enumクラス>
[package <packageName>] public final class <enumName>{ public static final int _<label_1> = <labelValue>; public static final <enumName> <label_1> = new <enumName>(_<label_1>); : public static final int _<label_n> = <label Value>; public static final <enumName> <label_n> = new <enumName>(_<label_n>); public int value() {...} public static <enumName> from_int(int value) {...} } private <enumName>(int value) { } }
以下の表にenumクラス中で定義されているメンバの意味を示します。
enumクラスのメンバ |
意味 |
value() |
要素の値を取り出します。 |
from_int() |
要素の値を指定して、要素名を取り出します。 |
enumHolderクラスは、以下のようにIDLで定義したenum名+Holderとなります。本クラスは、outやinoutパラメタを受け渡す場合に使用します。
<enumHolderクラス>
[package <packageName>;] final public class <enumName>Holder implements org.omg.CORBA.portable.Streamable { public [<packageName>.]<enumName> value; public <enumName>Holder() { } public <enumName>Holder([<packageName>.]<enumName> 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(){...} }
以下の表にenumHolderクラス中で定義されているメンバの意味を示します。
enumHolderクラスのメンバ |
意味 |
value |
要素の値。 |
デフォルトコンストラクタ |
valueメンバへの設定なしで、インスタンスを生成するために使用します。 |
コンストラクタ |
valueメンバにパラメタで指定された要素の値を設定します。 |
_read() |
要素の値を読み込みます。 |
_write() |
要素の値を書き込みます。 |
_type() |
TypeCodeを取り出します。 |
enumHelperクラスは、以下のようにIDLで定義したenum名+Helperになります。
Helperクラスはユーザ定義型のデータのデータストリームへの書き込み、データストリームからのユーザ定義型のデータの取り出し、ユーザ定義型のTypeCode、リポジトリIDの参照等の機能を提供します。
<enumHelperクラス>
[package <packageName>;] public class <enumName>Helper { public static void insert (org.omg.CORBA.Any a,[<packageName>.]<enumName> value){...} public static [<packageName>.]<enumName> extract (org.omg.CORBA.Any a){...} public static org.omg.CORBA.TypeCode type(){...} public static [<packageName>.]<enumName> read(org.omg.CORBA.portable.InputStream istream){...} public static void write(org.omg.CORBA.portable.OutputStream ostream, [<packageName>.]<enumName> value){...} 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(){...} }
以下の表にenumHelperクラス中で定義されているメンバの意味を示します。
enumHelperクラスのメンバ |
意味 |
insert() |
要素の値を挿入します。 |
extract() |
要素の値を取り出します。 |
type() |
TypeCodeを取り出します。 |
id() |
リポジトリIDを返します。 |
IDL言語での定義が以下のように定義されていた場合について、アプリケーションプログラム例を示します。
【IDL言語】
module ODsample{ enum EnumType { a, b, c }; interface enumtest{ EnumType op( in EnumType in_p, out EnumType out_p, inout EnumType io_p ); }; };
これをJava言語にマッピングすると以下のようになります。
【Java言語】
<インタフェース>
package ODsample; public interface enumtestOperations { public ODsample.EnumType op(ODsample.EnumType in_p, ODsample.EnumTypeHolder out_p, ODsample.EnumTypeHolder io_p ); }
<enumクラス>
package ODsample; public final class EnumType implements org.omg.CORBA.portable.IDLEntity { public static final int _a = (int)0; public static final EnumType a = new EnumType(_a); public static final int _b = (int)1; public static final EnumType b = new EnumType(_b); public static final int _c = (int)2; public static final EnumType c = new EnumType(_c); public static final EnumType MAX_VALUE = new EnumType(Integer.MAX_VALUE); public int value(){...} public static EnumType from_int(int i){...} private EnumType(int value){ } }
<enumHolderクラス>
package ODsample; public class EnumTypeHolder implements org.omg.CORBA.portable.Streamable { public ODsample.EnumType value; public EnumTypeHolder() { } public EnumTypeHolder(ODsample.EnumType 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(){...} }
<enumHelperクラス>
package ODsample; public class EnumTypeHelper { public static void insert(org.omg.CORBA.Any a, ODsample.EnumType value){...} public static ODsample.EnumType 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.EnumType read(org.omg.CORBA.portable.InputStream istream){...} public static void write(org.omg.CORBA.portable.OutputStream ostream, ODsample.EnumType value){...} }
import org.omg.CORBA.*; import ODsample.*; public class enumClient { public static void main(String args[]) { // ORBの前処理 // オブジェクトリファレンスの獲得 : try{ // inパラメタ用変数 EnumType in = EnumType.a; //outパラメタ用変数 EnumTypeHolder outHolder = new EnumTypeHolder(); // inoutパラメタ用変数 EnumTypeHolder inoutHolder = new EnumTypeHolder( EnumType.b ); // 復帰値用変数 EnumType result; // サーバアプリケーションのメソッド呼出し result = target.op( in, outHolder, inoutHolder ); // メソッドの結果表示 System.out.println( result.value() ); System.out.println( outHolder.value.value() ); System.out.println( inoutHolder.value.value() ); } catch ( java.lang.Exception e ) { //エラー処理 : } } }
Java言語でinパラメタをサーバアプリケーションに受け渡す場合には、直接enumクラスのインスタンスにデータを設定します。また、out、inoutパラメタとしてサーバアプリケーションにパラメタを受け渡す場合には、new演算子を使用して各データ型のenumHolderクラスのインスタンスを生成します。inoutパラメタには、enumクラスのデータを設定します。設定には、以下の2つの方法があります。
【デフォルトコンストラクタを使用した方法】
EnumTypeHolder a = new EnumTypeHolder(); //デフォルトコンストラクタ a.value = EnumType.c; //データの代入
【コンストラクタを使用した方法】
EnumTypeHolder b = new EnumTypeHolder(EnumType.c); //コンストラクタ
なお、サーバの処理結果はout、inoutパラメタおよび復帰値の各インスタンスのvalueに値が設定されます。
import org.omg.CORBA.*; import org.omg.PortableServer.*; import ODsample.*; // Servantクラス // サーバアプリケーションのメソッド class enumServant extends enumtestPOA { public EnumType op( EnumType in, EnumTypeHolder outHolder, EnumTypeHolder inoutHolder ) { // 入力パラメタの表示 System.out.println( in.value() ); System.out.println( inoutHolder.value.value() ); // 出力パラメタの設定 outHolder.value = EnumType.b; inoutHolder.value = EnumType.c; // 復帰 return( EnumType.a ); } } public class enumServer { public static void main(String args[]) { try { // ORBの前処理 : // POAオブジェクトの生成 : // Servantの生成とそのPOAへの登録 : // POAManagerの活性化 : } catch (java.lang.Exception e) { //エラー処理 : } } }
Java言語でinパラメタを参照する場合、inパラメタのインスタンスのvalueで参照します。inoutパラメタを参照するには、enumHolderクラスからenumクラスのインスタンスを取り出し、このインスタンスのvalueで参照します。また、out、inoutパラメタとしてクライアントアプリケーションにパラメタを返す場合、enumHolderクラスからenumクラスのインスタンスを取り出し、このインスタンスに直接設定します。
目次
索引
![]() ![]() |