[Seasar-user:2930] S2Struts でActionクラスに定義されたsessionコンポーネントについて

Shigeru Matsumoto matsumoto
2005年 11月 24日 (木) 23:38:58 JST


お世話になります。松本と申します。

S2Struts+S2DaoにてWebアプリを作っています。
Actionクラスやコンポーネントクラスのインスタンス管理について教えて下さい。

ActionクラスはSingleton(デフォルトのまま)で例えばユーザ毎(HttpSession毎)に
管理したいログインした際のログイン情報等のコンポーネントをinstance=sessionで
定義したとします(UserSessionとします)
<component name="UserSession" class="sample.UserSessionImpl" instance="session"/>

この時下記の様なActionを作ったとします。

public class LoginAction extends LookupDispatchAction {

	private UserSession userSession;
	
    public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
		
		userSession.setUser_uid(request.getParameter("userId"));
		return mapping.findForward("success");
		
	}
	public UserSession getUserSession() {
		return userSession;
	}
	public void setUserSession(UserSession userSession) {
		this.userSession = userSession;
	}
}

public class SampleAction extends LookupDispatchAction {

	private UserSession userSession;
	private Logic logic;
	
	public SampleAction(Logic logic){
		this.logic = logic;
	}
    public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
		
		log.debug("user_id = " + userSession.getUser_uid());

		return mapping.findForward("success");
		
	}
	public UserSession getUserSession() {
		return userSession;
	}
	public void setUserSession(UserSession userSession) {
		this.userSession = userSession;
	}
}

この時User1の人がログインしてuserSessionにIDをセットし
このアクションが呼ばれた際、最初の1回目はSampleActionのインスタンスが
作成されDIのsetUserSessionメソッドが呼ばれます。

次に別のUser2が同様の手順を行った場合
SampleActionのインスタンスは再利用されますがDIのメソッドは呼ばれないの
ですがuserSessionの値はこのUser2の値に変わっていました。

instance=sessionで管理されているUserSessionはいつどの段階で値がセット
されるのでしょうか?
解かりにくい説明ですいません。

よろしくお願い致します。





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