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

Kazuya Sugimoto sugimotokazuya @ gmail.com
2006年 12月 16日 (土) 14:20:23 JST


杉本です。

くろいわさん、ありがとうございます。
ご指摘の通りです。

あと、もう1個問題がありましたので、くろいわさんの修正に少し追加しました。
よろしくお願いします。

object component = session[componentName];

if (component != null)
{
    return component;
}

component = this.ConstructorAssembler.Assemble();

object proxy = GetProxy(receiveType);

if (proxy == null)
{
    session[componentName] = component;
}
else
{
    session[componentName] = proxy;
}

this.PropertyAssembler.Assemble(component);
this.InitMethodAssembler.Assemble(component);

if (proxy == null)
{
    return component;
}
else
{
    return proxy;
}

06/12/15 に tomoaki.kuroiwa さんは書きました:
>
> 皆様
>
> 大変お世話になっております。
> 戴いたソースでビルドし試してみました。
> 結果としては、シンプルなWebアプリケーションでは問題なくプロキシオブジェクト
> を取得することができましたが、
> 本番のアプリケーションでは、StackOverflowエラーが発生してしまい起動すること
> ができませんでした。。。
>
>
> そこで、教えていただいた内容を参考に以下のよう修正したところ
> StackOverflowエラーは発生しなくなり、かつプロキシオブジェクトを取得すること
> ができるようになりました。
>
> {
>       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);
>             if (proxy == null){
>                   session[componentName] = component;
>                   return component;
>             }else{
>                   session[componentName] = proxy;
>                   return proxy;
>             }
>       }
> }
>
>
> この修正は妥当なのでしょうか。。。いまいち自信がありません。
>
> まずはご報告まで。
> 失礼します。
>
> くろいわ



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


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