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

太一 ryushi
2005年 8月 19日 (金) 22:38:19 JST


太一です。佐藤繋がりですね…。

ILをEmitしてアスペクトを実装する上で、
僕が以前に引っかかった事があります。
僕自身が、COM+に対する理解が浅い為、
厳密にどういう事なのか理解出来ないので出来ればお答えを頂きたいな…と思い
ます。

まず、

Visual C# .NET コンポーネントで COM+ トランザクションを使用する方法
http://support.microsoft.com/default.aspx?scid=kb;ja;816141

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

次に、

System.Reflection.Emit.AssemblyBuilder
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpref/html/frlrfsystemreflectionemitassemblybuilderclasstopic.asp

より抜粋。
「KeyPair を使用した動的アセンブリへの署名は、アセンブリがディスクに保存
されるまで有効ではありません。
したがって、遷移動的アセンブリでは厳密な名前が機能しません。」

と、あります。

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

例え、アスペクトを実装したとしても、
それがトランザクションに参加出来ないケースがあるのは、
かなり問題になるかと思います。

僕の個人的な見解ですが、
thisポインタへのメソッド呼び出しにアスペクトが掛からない事は、
それに比べれば、結構些細な事かなぁ…と思います。

以上

Kazunori Satoh wrote:
>  佐藤と申します。
> 
>  私はコミッタではありませんが.NETのAOPに関しては非常に興味があります。
> 
> 
>>これは、thisポインタがHogeImplのインスタンスに対する実参照を返すためで、
>>これによってAopProxyのコードがバイパスされてしまいます。ターゲットのク
>>ラスをContextBoundObjectから直接または間接に派生すれば、thisポインタも
>>TranspaerntProxyポインタとして返すようになりますが、現在のS2.NETの実装
>>では(ContextAttribute内で作成されるなどの)ContextPropertyによって
>>IMessageSinkを透過的に挿入しているわけではないので、例えターゲットクラ
>>スをContextBoundObjectから派生させたとしても自前のRealProxy(AopProxy)
>>のInvokeが呼び出されるわけではなく、規定のRealProxyが呼び出されるだけ
>>で、結果は同じです。
> 
> 
>   AopProxyが単なるRealProxyからの派生クラスであることを考えると現在の
>   振る舞いはご指摘の通りだと思います。
> 
> 
>>spring.NETのようにSystem.Reflection.Emit(またはCodeDOM)を使った動的
>>コード生成の手法への変更も視野に入れても良いのではと私は思いますが、み
>>なさんはどうでしょうか?
> 
> 
>   同感です。パフォーマンスに問題が出そうなContextBoundsObjectを
>   使うよりもILのEmitやCodeDomでの実装を使いたい所ですね。
>   なにより、まずは透過プロキシを使うことによる制限を無くしたいと思います。
> 
>   私の日記(http://d.hatena.ne.jp/Kazzz/)の方で.NETのDIコンテナにおける
>   AOPの実装に関して実際にILのEmitを使用した実装について試している最中
>   です。
> 
>   AOP機能を動かすことまではできたのですが別な型を生成するためにDI
>   コンテナによるプロパティ等の注入が上手くいっていない状況です。
>   何か良いアィディアが無いかなと仕事の合間に考えている最中です。
> 
> ************************************************************************
> * Kazunori Satoh <kazz2 @ joy.hi-ho.ne.jp_NOSPAM>
> * http://d.hatena.ne.jp/Kazzz/
> *
> **
> 
> 
> _______________________________________________
> Seasar-s2dotnet mailing list
> Seasar-s2dotnet @ lists.sourceforge.jp
> http://lists.sourceforge.jp/mailman/listinfo/seasar-s2dotnet
> 


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