0

WebSphere 7 で Java EE アプリを使用しています。

私のアプリは、送信する必要がある電子メールをデータベースの通知テーブルに配置します。

5 分または 10 分ごとに起動し、ステータスが「PENDING」のエントリの通知テーブルをスキャンし、電子メールを送信して、ステータスを「SENT」として更新するコードを書きたいと思います。

これを 5 分または 10 分ごとに行うのに適切な Java EE テクノロジは何ですか? Java EE で利用できる「タイマー プロセス」のようなものはありますか?

どんな情報も役に立ちます、ありがとう!ロブ

4

5 に答える 5

3

そのような目的で @Schedule アノテーションを利用できます。

JavaEE 6 には、このためのタイマー サービスがあります。

http://docs.oracle.com/javaee/6/tutorial/doc/bnboy.html

@ManagedBean
@Stateless(name="MyScheduledTaskClass")
public class MyScheduledTaskClass implements Serializable{
private Logger _log = Logger.getLogger(this.getClass());

    @Schedule(minute="*/5")       //minute="*/10" if you want every 10 minutes
    public void executeTask(){
        _log.info("Scheduled task started");
        //Do some stuff here
        _log.info("Scheduled task finished");
    }

}
于 2012-05-29T14:43:05.280 に答える
3

Quartz Schedulerは優れたライブラリです。

于 2012-05-29T14:24:51.523 に答える
1

WebSphere 7 は Java EE 5 を実行するため (私はそう思います)、その点で選択肢は少し限られています。

Quartz Schedulerのようなライブラリを使用できますが、コンテナーによって管理されるスレッド プールに接続するように注意する必要があります。デフォルトでは、EJB では完全に禁止されているスレッドを独自に作成するだけだと思います (Web コンテナーでは強くお勧めしません)。

WebSphere でワーク マネージャー プールをセットアップするための構成について説明している素敵なブログ記事を見つけました: http://sanjsuya.wordpress.com/2012/01/19/asynchronousbean-was-spring-integration/

Spring を使用している場合は、WorkManagerTaskExecutor を使用して、Quartz スケジューラをこのスレッド プールに簡単に接続できます。これに関するいくつかのSpringドキュメントがあります(Spring 2からのものですが、Spring 3でも多かれ少なかれこのようなことをしていると確信しています):http://static.springsource.org/spring/docs/ 2.0.x/reference/scheduling.html

編集:私のアーキテクトは少しうんざりしています(ただし、あなたがやっている方法でそれを行うのには十分な理由があるかもしれません)。電子メールをキューではなく DB に書き込むのはなぜですか? そうすれば、受信側システムの余暇にそれらを処理することができ、WebSphere に多くのバックグラウンド作業を過負荷にすることはありません。

于 2012-05-29T14:50:31.120 に答える