この特集のトップページへ
Chapter 5:ビジネスロジック層の構築

  COLUMN    自動非アクティベート機能

 ConsistentフラグやDoneフラグは,COMオブジェクト(COMコンポーネント)側でセットしない限り有効でない。COM+で管理されることを想定していないCOMコンポーネントは,当然DoneフラグやConsistentフラグなぞセットしない。Doneフラグがセットされないということは,COMクライアントがCOMオブジェクトを手放すまで存在することになるから,リソースの消費が激しくなる。そこでCOM+では,そのようなCOMオブジェクトであっても,メソッドから戻った時点で強制的にDoneフラグやConsistentフラグがセットされるようにするように設定することもできるようになっている。

 コンポーネントサービス管理ツールでCOMコンポーネントの配下のメソッドのプロパティを開くと,[全般]ページに[このメソッドが返ったときに,自動的にこのオブジェクトを非アクティブ化する]というオプションがあるのがわかる(Fig.5-33)。この項目を有効にすると,メソッドから戻ったときに自動的にDoneフラグがTrueにセットされ,COMオブジェクトが非アクティブ化される。

 また,非アクティブ化される際にCOMオブジェクトがErr.Raiseメソッドを使って実行時エラーを発生していた場合には,DoneフラグをTrueにすると同時に,ConsistentフラグをFalseに設定する。つまり,このオプションを有効にした場合,COMオブジェクト内で実行時エラーが発生したならば,トランザクションが自動的にアボートに設定されることになる(実行時エラーが発生していなかった場合,ConsistentフラグはTrueに設定される,すなわち,トランザクションはコミットされる)。

Fig.5-33 メソッドのプロパティ
fig5_33.gif

 この機能を使うと,COM+を想定していないCOMコンポーネントでも,容易にトランザクションに参加させることができる。しかし,非アクティブ化されるということは,それまでCOMオブジェクトが保持していた情報が失われるということである。そのため,COMオブジェクトがステートレスなオブジェクトでなければ,間違いなく誤動作を引き起こすので注意してほしい。

prevpg.gif Chapter 5-1 21/23 nextpg.gif