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

Kazuya Sugimoto sugimoto
2005年 8月 24日 (水) 23:24:03 JST


杉本です。

Atsushi Fukuiさん wrote:

>確かにサービスコンポーネントとして動作させるためには署名が必要ですが、
>署名だけではなくサービス コンポーネントにするクラスは、
>System.EnterpriseServices.ServicedComponentから派生させる必要があり、
>TransactionAttribute属性も指定する必要があります。
>  
>

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的には楽に処理できるのではないでしょ
>うか。
>  
>

すいません。このあたり勉強不足で知りませんでした。SWCなんてあるんですね。

確かに、分散トランザクションが必要でなければ、ローカルトランザクションで
十分ですのでローカルトランザクションもAOPで提供したいところです。

でも1.1だと、ちょっと難しいかな・・
.NET Framework 2.0では、分散トランザクションではない方もできるように
しましょう。まだ2.0は追えてないですが。

# .NET Framework 2.0が楽しみ。

--
Kazuya Sugimoto
http://d.hatena.ne.jp/sugimotokazuya/



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