[Seasar-user:15279] CoolDeployモードで@Componentアノテーションを使用した時の挙動

黒川博之 [E-MAIL ADDRESS DELETED]
2008年 8月 6日 (水) 10:16:42 JST


おはようございます。

SAStrutsで、ログイン認証用のActionとActionFormを作り、
ActionFromをセッションに設定しています。

【ログイン用のActionFrom】
@Component(instance = InstanceType.SESSION)
public class LoginForm implements Serializable {

    private static final long serialVersionUID = 1L;

    public String userName;
    public String passWord;
}

ログイン用のActionでは、userName/passWordが未入力の場合
エラーとしています。

【ログイン用Action】
public class LoginAction {

    @Resource
    @ActionForm
    protected LoginForm loginForm;

    @Execute(validator = false)
    public String index() {
        return "login.jsp";
    }

    @Execute(validate = "validateLogin", input = "login.jsp")
    public String login() {
        System.out.println(loginForm.userName);
        System.out.println(loginForm.passWord);
        return "/employee?redirect=true";
    }

    public ActionErrors validateLogin() {
        ActionErrors errors = new ActionErrors();

        if (loginForm.userName.length() == 0) {
            errors.add("userName", new
ActionMessage("errors.login.userName"));
        }

        if (loginForm.passWord.length() == 0) {
            errors.add("passWord", new
ActionMessage("errors.login.passWord"));
        }

        return errors;
    }
}

ログイン成功後、別のAction(EmployeeAction)にリダイレクトしているのですが
そのActionでは、独自に作ったLoginInterceptorをアスペクトしています。

【独自Interceptor】
public class LoginInterceptor extends AbstractInterceptor {
    private static final long serialVersionUID = 1L;

    @ActionForm
    public LoginForm loginForm;

    public Object invoke(MethodInvocation invocation) throws Throwable {
    System.out.println("ログインしているか検証します。");
    System.out.println(loginForm.userName);
    System.out.println(loginForm.passWord);
    if ((loginForm.userName != null) || (loginForm.passWord != null)) {
        System.out.println("OKです");
        return invocation.proceed();
    }
    System.out.println("NGです");
    return "/login?redirect=true";
    }
}

【リダイレクト先のアクション】
@Aspect("loginInterceptor")
public class EmployeeAction {
    @Execute(validator = false)
    public String index() {
        return "index.jsp";
    }
}


このような構成で、
・HotDeploy
・WarmDeploy
では問題なくEmployeeActionへリダイレクトされるのですが、CoolDeploy時には
LoginActionで取得したuserName/passWordがnullとなってしまいます。

CoolDeployでは、サーバー起動時に全てのコンポーネントをdeployしているようですが 



これが原因なのでしょうか?

また、何か解決策はありますでしょうか?

長くなりましたが、よろしくお願いします。

【環境】
s2-framework-2.4.26.jar
s2extension-2.4.26.jar
s2-tiger-2.4.26
sa-struts-1.0.3-rc1.jar



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