JSF画面でボタン等からtimer()を起動した場合、エラーは発生しませんか?
timerメソッド自体に問題ないことは検証されているということで宜しいでしょうか。
原因かは分かりませんが、ApplicationScoped指定の場合はSerializableのimplementsが必要ではないでしょうか。自分はManagedBeanは使用したことが無く、CDIによるScheduleしか試したこが無いので済みません。
@Namedは使用していませんが、以下が試したことの有るソースです。
java
1package beans;
2
3import java.text.SimpleDateFormat;
4import java.util.Date;
5import java.util.logging.Logger;
6import javax.annotation.PostConstruct;
7import javax.ejb.Schedule;
8import javax.ejb.Stateless;
9import javax.inject.Inject;
10
11@Stateless
12public class TimerService {
13
14 @Inject
15 transient Logger log;
16
17 @Schedule(second = "*/1", minute = "*", hour = "*", persistent = false)
18 public void myTimer() {
19 SimpleDateFormat fmt = new SimpleDateFormat("M/dd hh:mm:ss");
20 log.fine("■タイマーサービス■" + fmt.format(new Date()));
21 }
22
23 @PostConstruct
24 public void check() {
25 log.info("★オブジェクトを構築しました");
26 }
27}
28
java
1package beans;
2
3import java.util.logging.Level;
4import java.util.logging.Logger;
5import javax.enterprise.context.Dependent;
6import javax.enterprise.inject.Produces;
7import javax.enterprise.inject.spi.InjectionPoint;
8import javax.inject.Inject;
9
10@Dependent
11public class LoggerProducer {
12
13 @Inject
14 InjectionPoint point;
15
16 @Produces
17 public Logger getLogger() {
18 String className = point.getMember().getDeclaringClass().getName();
19 Logger logger = Logger.getLogger(className);
20 logger.setLevel(Level.ALL); // すべてのレベルのログを出力する
21 return logger;
22 }
23}
アプリケーションサーバのログか、IDEの出力画面でメッセージが確認できると思います。
引用元参考書はこちらになります。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/09/07 00:08
2016/09/07 00:33
2016/09/07 02:47
2016/09/07 03:13
2016/09/07 08:27
2016/09/07 08:28
2016/09/07 08:28