| 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 ) {
//エラー処理
:
}
}
}
目次
索引
![]()
|