私が取り組んでいる JSF-2 アプリケーションでは、ユーザーがアクションを実行したときにサーバー側のタイマーを開始する必要があります。
このタイマーは、アプリケーション自体に関連している必要があるため、ユーザー セッションが閉じられても存続する必要があります。
この問題を解決するために、java.util.Timer クラスを使用して、Application スコープの Bean でタイマー オブジェクトをインスタンス化することを考えました。
それは良い解決策になるでしょうか?これを達成するための他のより良い方法はありますか? ありがとう
2667 次
1 に答える
3
EJB コンテナなし
コンテナーに ejb 機能 (tomcat、jetty など) がない場合は、Quartz スケジューラー ライブラリを使用できます: http://quartz-scheduler.org/
また、いくつかの優れたコード サンプルもあります: http://quartz-scheduler.org/documentation/quartz-2.1.x/examples/Example1
EJB 3.1
アプリケーション サーバーに EJB 3.1 (glassfish、Jboss) がある場合、タイマーを作成する Java ee 標準の方法があります。主に @Schedule および @Timeout アノテーションを調べます。
このようなものはあなたのユースケースをカバーするかもしれません(タイマーが切れると@Timeoutアノテーションが付けられたメソッドが呼び出されます)
import javax.annotation.Resource;
import javax.ejb.Stateless;
import javax.ejb.Timeout;
import javax.ejb.Timer;
import javax.ejb.TimerConfig;
import javax.ejb.TimerService;
@Stateless
public class TimerBean {
@Resource
protected TimerService timerService;
@Timeout
public void timeoutHandler(Timer timer) {
String name = timer.getInfo().toString();
System.out.println("Timer name=" + name);
}
public void startTimer(long initialExpiration, long interval, String name){
TimerConfig config = new TimerConfig();
config.setInfo(name);
config.setPersistent(false);
timerService.createIntervalTimer(initialExpiration, interval, config);
}
}
于 2012-12-07T12:38:13.397 に答える