[Seasar-s2dotnet 70] Re: s2.NETのAOPの実装について

Atsushi Fukui afukui
2005年 8月 21日 (日) 19:51:00 JST


こんにちは、福井です。

On Fri, 19 Aug 2005 22:38:07 +0900
subject: [Seasar-s2dotnet 67] Re: s2.NETのAOPの実装について
太一 <ryushi @ gmail.com>さん wrote:

> ここを読むと、トランザクション管理下に置かれるコンポーネントは、
> 厳密な署名が為されている状態でなければならないように読めます。

確かにサービスコンポーネントとして動作させるためには署名が必要ですが、
署名だけではなくサービス コンポーネントにするクラスは、
System.EnterpriseServices.ServicedComponentから派生させる必要があり、
TransactionAttribute属性も指定する必要があります。
また、Assembly属性としてApplicationNameやApplicationId、ロールベースセキュ
リティを利用する場合は、SecurityRole属性を指定する必要があります。サービ
スコンポーネントをサーバ コンポーネントとして動作させる場合(COM+ではサー
バ コンポーネントとして動作させないとメリットの多くが享受できません)こ
のコンポーネントが依存しているすべてのアセンブリをGACに登録する必要があ
ります。
つまり、サービスコンポーネントによるトランザクション サービスはAOPによる
サポートにはあまり向いていないのではと私は思います。

> 僕が懸念しているのは、
> Emitしたアセンブリで実装されたコンポーネントは、
> 果たしてCOM+トランザクションに参加出来るのか、否か?
> です。

サービス コンポーネントの登録に関するわずらわしさを軽減するために、
COM+ 1.5ではServices Without Component(SWC)という機能が追加されていま
す。この機能はWindows Server 2003とWindows XP SP2の.NET Framework 1.1で
利用できます。具体的にはSystem.EnterpriseServices.ServiceDomainクラスの
EnterメソッドとLeaveメソッドによってトランザクション スコープを管理しま
すが、この場合、署名の必要はありません。AOPでのトランザクションのサポー
トにはこちらのほうが向いているのではないかと思います。

この機能は.NET Framework 2.0では、System.Transactions.TransactionScopeク
ラスとしてより強化されています。

AOPとは直接関係はないですが、トランザクションの機能を実現するのに安易に
COM+トランザクションを利用するのは危険です。単一データソースに対するトラ
ンザクションの利用では、SqlTransactionやOleDbTransactionによるローカルな
トランザクションを利用すべきです。サービスコンポーネントが提供する自動ト
ランザクションはMS DTCを利用するため処理速度が低下します。
 .NET 2.0のTransactionScopeクラスはこのあたりをうまく処理していてローカ
ル トランザクションと分散トランザクションを内部で透過的に切り替えます。
なので.NET Framework 2.0ではよりAOP的には楽に処理できるのではないでしょ
うか。


-- 
福井 厚 Atsushi Fukui 
MSMVP for Visual Developer - Solutions Architect(Jan 2005)
blog: http://www.users.gr.jp/blogs/fukui/
NAgileで行こう! http://www.fortunatewell.com/



seasar-dotnet メーリングリストの案内