[Seasar-user:16491] Intercepter内で発生元Pageクラスのメンバ変数を参照したい

浅野護 [E-MAIL ADDRESS DELETED]
2008年 12月 11日 (木) 18:11:38 JST


浅野と申します。
お世話になります。

PageクラスのdoXXXメソッドが呼ばれたときに、doXXXメソッドの前後でアクセスログを出力するIntercepterクラスを作成しています。
Pageクラスのinitialize()メソッドで、自クラスのメンバ変数に値をセットしておき、アクセスログ出力Intercepterでその値を出力しようとしたのですが、initialize()でセットした値が空のままになってしまいます。
サンプルコードの抜粋を以下に記述しますが、元々このようなことは出来ないのでしょうか?

-------(サンプルSTART)-------------------

public class AaaPage {
    public String beginMessage = "";

    public Class initialize() {
        beginMessage = "begin message";
    }
    public Class doXXX() {
        …
    }
}

public class AccessLogIntercepter extends AbstractIntercepter {
    public Object invoke(MethodInvocation invocation) throws Throwable {
        Object obj = invocation.getThis();
        if (obj instanceof AaaPage) {
            String msg = ((AaaPage)obj).beginMessage;    // ここで "begin
message" が取得出来ると期待したが、空文字列が取得される
            System.out.println(msg);
        }
        Object ret = invocation.proceed();
        return ret;
    }
}
-------(サンプルEND)-------------------


環境は以下になります。
OS:WindowsXP
Seasar2:2.4.33
JDK:1.5

また上記のソースをHOT Deployで動かすと、Intercepterの「if(obj instanceof
AaaPage){」の行が、初めて通るときは「false」で判断されました。(2回目以降はtrue)
ただしCOOL Deployで動かすと、一回目もtrueになります。


よろしくお願いいたします。
-------------- next part --------------
HTMLの添付ファイルを保管しました...
URL: <http://ml.seasar.org/archives/seasar-user/attachments/20081211/48756945/attachment-0001.html>


Seasar-user メーリングリストの案内