タイプドオブジェクトラッパーを,idl2cppコンパイラ(C++)またはidl2javaコンパイラ(Java)で生成した<interface_name>ObjectWrapperクラスから派生させてください。コードサンプル21-10にAccountインタフェース用タイプドオブジェクトラッパーのインプリメンテーション(Java)を示します。このクラスはAccountObjectWrapperインタフェースから派生していて,balanceメソッドの単純なキャッシングインプリメンテーションを提供していることに注意してください。balanceメソッドは次のような手順で処理を実行します。
class CachingAccountObjectWrapper : public Bank::
AccountObjectWrapper {
public:
CachingAccountObjectWrapper() :
_inited((CORBA::Boolean)0) {}
CORBA::Float balance() {
cout << "+CachingAccountObjectWrapper:
Before Calling Balance" << endl;
if (! _inited) {
_balance = Bank::AccountObjectWrapper::balance();
_inited = 1;
} else {
cout << "+ CachingAccountObjectWrapper:
Returning Cached Value" << endl;
}
cout << "+ CachingAccountObjectWrapper:
After Calling Balance" << endl;
return _balance;
}
. . .
};
package BankWrappers;
public class CachingAccountObjectWrapper extends
Bank.AccountObjectWrapper {
private boolean _initialized = false;
private float _balance;
public float balance() {
System.out.println(
"+ CachingAccountObjectWrapper: Before calling balance: ");
try {
if( !_initialized ) {
_balance = super.balance();
_initialized = true;
} else {
System.out.println(
"+ CachingAccountObjectWrapper: Returning Cached value");
}
return _balance;
}finally {
System.out.println(
"+ CachingAccountObjectWrapper: After calling balance: ");
}
}
}