3.2.2.1.2 注意事項

通常、この方法で事前アクティブ化されたオブジェクトの場合、クラッシュすると状態を回復することはできません。(最初の遅延アクティブ化で設定するには、状態が複雑すぎるか、一貫性を維持できないと考えられるからです。)これは、基本的にオブジェクトが1回のアクティブ化期間のみ有効であることを示しており、効果的なオブジェクトのテクニックです。

ただし、「1回」という使い方のために問題が発生する場合があります。クライアントが状態を含むプロセスにつながるオブジェクト参照を保持しており、クラッシュするとその状態を再度作成することができないので、クライアントの次の呼出しが自動的にオブジェクトを新しくアクティブ化することがないように注意を払う必要があります。新しくアクティブ化するとオブジェクトが不当な状態を持つことになるからです。

この問題を解決する方法は、オブジェクトがTPフレームワークによって自動的にアクティブ化されないようにすることです。activate_object呼出しの結果としてTobjS::ActivateObjectFailed例外をTPフレームワークに提供した場合、TPフレームワークはアクティブ化を実行せず、CORBA::OBJECT_NOT_EXIST例外をクライアントに返します。クライアントにはイテレータ(または類似)パターンについての知識があるので、こうした状況について想定しています。クライアントは反復を再起動するように準備する必要があります。

ノート:

TPフレームワーク自体でオブジェクト参照が有効ではなくなったことを検出できるようになれば、こうした保護措置は不要になります。特に、activate_objectメソッドが呼び出される可能性を考慮せずに済みます。TPフレームワークが変更される場合、activate_objectは呼び出されず、フレームワーク自体がOBJECT_NOT_EXIST例外を生成するようになります。