やってみよう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が定義されています。
の誤りなんでしょうね。
さて、次に進むぞ。