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

Yasuo Higa [E-MAIL ADDRESS DELETED]
2008年 8月 6日 (水) 12:49:51 JST


ひがです。

> おはようございます。
> 
> SAStrutsで、ログイン認証用のActionとActionFormを作り、
> ActionFromをセッションに設定しています。
> 
Interceptor自身もセッションスコープで管理し、
http://s2container.seasar.org/2.4/ja/DIContainer.html#CustomizerConfigExample
のインスタンス属性がsingleton以外のインターセプタを利用する
を参考にしてください。

> 【ログイン用の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 mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user
> 


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