やってみようpart4(Serviceの使い方)

みなさん、わたしの不勉強をお許しください。使い方が間違っていました。
ひがさんのおっしゃるとおりServiceでうまく行きました。
コメントでServiceでもうまくいかないと書いたのはこう書いていたからです(恥をさらします)

package kizashi.scheduler.action;

import kizashi.scheduler.service.UserService;

import org.seasar.struts.annotation.Execute;
import org.seasar.struts.annotation.Required;

public class LoginAction {

    @Required
    public String loginId;
    
    @Required
    public String passwd;
    
	@Execute(validator = false)
	public String index() {
		return "login.jsp";
	}
	
	@Execute(validator = true, input="login.jsp")
	public String login() {
	    
	  new UserService().authenticate(loginId, passwd); //NG
          return "login.jsp";
    }
	
}

これじゃあきません。
ServiceさえもDIさせるということですね。
http://sastruts.seasar.org/featureReference.html#Action
に書いてありました。

package kizashi.scheduler.action;

import kizashi.scheduler.service.UserService;

import org.seasar.struts.annotation.Execute;
import org.seasar.struts.annotation.Required;

public class LoginAction {

    @Required
    public String loginId;
    
    @Required
    public String passwd;
    
    public UserService userService; // ここ
    
	@Execute(validator = false)
	public String index() {
	    return "login.jsp";
	}
	
	@Execute(validator = true, input="login.jsp")
	public String login() {
	    
            userService.authenticate(loginId, passwd);
            return "login.jsp";
    }
	
}

そしたらService側では、

    public JdbcManager jdbcManager;

と定義するだけで、ちゃあんとDIされました。
Action内で複数ServiceをDIして、2度目以降に呼ばれたService内で意図的に例外を発生させた際にちゃんと1度目の更新処理がロールバックされていることも確認しました。

言い訳ではないですが、SAStrutsのサイトには、

アクションやロジックの設定をカスタマイズするために actionCustomizerやlogicCustomizerが定義されています。

http://sastruts.seasar.org/fileReference.html#customizer

とありましたが、これは

アクションやサービスの設定をカスタマイズするために actionCustomizerやserviceCustomizerが定義されています。

の誤りなんでしょうね。

さて、次に進むぞ。