[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 メーリングリストの案内