| Interstage Application Server アプリケーション作成ガイド (CORBAサービス編) |
目次
索引
![]()
|
| 第11章 CORBAアプリケーションの高度な使い方 | > 11.1 Factory |
private領域を使用する場合のプログラミング例を以下に示します。
IDLでattributeを定義すると、インプリメンテーションクラス用のprivateデータ域にマッピングされます。この領域はサーバアプリケーションが管理します。attributeの詳細は、“属性宣言(attribute)のマッピング”を参照してください。
サーバアプリケーションのprivate領域の設定/参照メソッドの実装例を以下に示します。
// attribute x の設定(固定長データ)
void
ODsample_intf1_impl::x( CORBA::Long l, CORBA::Environment &env )
throw( CORBA::Exception )
{
__x = l;
}
// attribute x の参照(固定長データ)
CORBA::Long
ODsample_intf1_impl::x( CORBA::Environment &env )
throw( CORBA::Exception )
{
return( __x );
}
// attribute y の設定(可変長データ)
void
ODsample_intf1_impl::y( const CORBA::Char* s, CORBA::Environment &env )
throw( CORBA::Exception )
{
__y = (const CORBA::Char *)s;
}
// attribute y の参照(可変長データ)
CORBA::Char *
ODsample_intf1_impl::y( CORBA::Environment &env )
throw( CORBA::Exception )
{
CORBA::Char *tmp;
tmp = CORBA::string_alloc(strlen(__y));
strcpy( tmp, __y );
return( tmp );
}
また、IDLコンパイラの生成するヘッダファイルに直接privateデータを設定することもできます。そのとき、文字列等の可変長データを使用する場合は、獲得した領域を解放する必要があります(“終了処理のプログラミング”を参照してください)。
class ODsample_intf1_impl : public _sk_ODsample_intf1
{
public:
ODsample_intf1_impl();
~ODsample_intf1_impl();
// Attribute Method ( for _get )
CORBA::Long x(
.......
private :
CORBA::Long __x;
CORBA::String_var __y;
// ユーザ追加領域
long user_data;
char *data;
};
private領域を使用した場合は、アプリケーション実行時にクライアントごとにインスタンスを持たせるため、OD_impl_instコマンド実行時(インプリメンテーションリポジトリ登録)に"iswitch=ON"を指定する必要があります(詳細は“リファレンスマニュアル(コマンド編)”の“OD_impl_inst”を参照してください)。
クライアントアプリケーションでのattributeの使用例を以下に示します。
// attribute x の設定(固定長データ) target->x( 3, env ); // attribute x の参照(固定長データ) CORBA::Long result = target->x( env ); // attribute y の設定(可変長データ) CORBA::Char *dummy = CORBA::string_alloc(7); strcpy( dummy, "testabc" ); target->y( dummy, env ); // attribute y の参照(可変長データ) CORBA::Char *data = target->y( env ); cout << "data = " << data << endl;
目次
索引
![]()
|