[seasar-dotnet:421] Re: S2AOP.NET でinstance=sessionのコンポーネントでAOPが効かない

Kazuya Sugimoto sugimotokazuya @ gmail.com
2006年 12月 15日 (金) 01:43:12 JST


杉本です。

おぉ。1時間も小谷さんが早かったのにデバッグに必死で
気づきませんでした。ありがとうございます。>小谷さん。

06/12/15 に koyakさんは書きました:
> くろいわ様
>
> 初めまして。小谷と申します。
>
> instance=sessionのときにプロキシを返す処理を実際に行う
> メソッドを見てみたところ、確かに最初の一回目の
> 生成時はGetProxyからプロキシオブジェクトが
> 生成されて返されていますが、
> 2回目(sessionにcomponent(実装クラス)が乗っている状態)の
> ときにはその中の実装クラスが返されるように
> なっているように見えますね。
>
> -----------------------------------------------------------
> Seasar.Framework.Container.Deployer.SessionComponentDeployer
>
> public override object Deploy(Type receiveType)
> {
>         (途中省略)
>         object component = session[componentName];
>         if(component != null) return component;
>
>         component = this.ConstructorAssembler.Assemble();
>         session[componentName] = component;
>         this.PropertyAssembler.Assemble(component);
>         this.InitMethodAssembler.Assemble(component);
>
>         object proxy = GetProxy(receiveType);
>         return proxy == null ? component : proxy;
> }
> -------------------------------------------------------------
>
> 実際に動かして試してみたわけではないので
> 的外れなことを言ってしまっているかもしれませんが、
> session[componentName] = component;
> をGetProxyの後ろの方にもってきて、
> return proxy == null ? component : proxyの代わりに
> if( proxy == null ){
>         session[componentName] = component;
>         return component;
> }
> else{
>         session[componentName] = proxy;
>         return proxy;
> }
> としてみると如何でしょうか?
>
> ===========================
> koyak
> kotani.k @ buildsystem.jp
> ===========================
>
> tomoaki.kuroiwa @ informatix.co.jp wrote:
> >
> > はじめまして、くろいわと申します。
> > いつも大変お世話になっております。
> >
> > S2AOP.NETをASP.NETにて使用しています。S2AOP.NETについて質問です。
> > App.diconで定義したinstance=sessionと設定したコンポーネントを、aspx.csの
> > Page_Load()上で取得しています。
> > このコンポーネントですが、1回目取得したときはAOPのプロキシオブジェクトが
> > 返ってくるようなのですが、
> > 2回目以降は実体のオブジェクトの方が返って来てしまいます。なのでAOPが効きま
> > せん。
> > (ブラウザの再読込みボタンで確認しました。セッションは維持できています。)
> >
> > AOPでロギングしているため、毎回プロキシオブジェクトの方を取得する必要があり
> > 困っています。
> > どうすれば解決できるのかアドバイス頂けませんでしょうか。
> >
> > ■App.dicon
> > <?xml version="1.0" encoding="utf-8" ?>
> > <components>
> >       <component name="echo" class="Hello" instance="session">
> >             <property name="Session">session</property>
> >             <aspect pointcut=".*">measurement</aspect>
> >       </component>
> >       <component name="measurement" class="MeasurementInterceptor" />
> > </components>
> >
> >
> > ■aspx.cs
> > protected void Page_Load(object sender, EventArgs e)
> > {
> >       Response.Cache.SetCacheability(HttpCacheability.NoCache);
> >
> >       IHello hello =
> > (IHello)SingletonS2ContainerFactory.Container.GetComponent(typeof(IHello),
> > "echo");
> >       string msg = string.Empty;
> >
> >       if(hello is Hello)      //1回目はfalseになる。2回目以降はtrueになる
> >       {
> >             msg = "プロキシじゃないです";
> >       }
> >       else
> >       {
> >             msg = "プロキシです";
> >       }
> >       Label1.Text = hello.Echo("こんにちは") + " " + msg;
> > }
> >
> >
> > 現在の環境は以下の通りです。
> > VB2005、ASP.NET2.0(C#)、S2Container.NET 1.2.7
> > S2AOP.NETは標準実装を利用しています。
> >
> > カットオーバー間際に、はまっております。
> > どうぞ、よろしくお願いいたします。
> >
> > くろいわ
> >
> > _______________________________________________
> > seasar-dotnet mailing list
> > seasar-dotnet @ ml.seasar.org
> > https://ml.seasar.org/mailman/listinfo/seasar-dotnet
> >
> >
>
> _______________________________________________
> seasar-dotnet mailing list
> seasar-dotnet @ ml.seasar.org
> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>


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


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