Java EEの時間指定バッチプロセスにはどのようなツールがありますか?
質問
私の雇用主は、稼働している Java EE WebSphere アプリケーションで時限バッチ プロセスを実行するように私に依頼しました。毎日午後11時30分に特定のクラスを実行することになっています。
私は Java EE にも WebSphere サーバー (開発環境では Tomcat) にもあまり詳しくなく、調べてみましたが、見つかったのは Java タイマー クラスに関するものだけで、それを設定したり呼び出したりする方法はわかりませんでした。 。
web.xmlファイルの編集も必要なようです。
助けていただければ幸いです。
解決
オープンソースを見るべきです クォーツライブラリ オープンシンフォニーより。とても使いやすく、このような用途に最適です。
TimerTasks は、将来の短期間で何かを実行する場合に最適です。しかし、このような長い時間枠で繰り返し実行する場合には、Quartz が優れています。今後のタスクのリストをファイルやデータベースなどの永続ストレージに保存することもできるため、アプリケーションが再起動されても、今後の時間指定されたジョブが失われることはありません。
また、Spring フレームワークには Quartz の素晴らしい抽象化があります。
他のヒント
WebSphere では、スケジューラ サービスを使用して、Java クラスのメソッドの実行をトリガーできます。スケジューラは、ジョブの実行をスケジュールするためのカレンダー (cron と同様) を提供します。また、独自のカレンダーを開発することもできます。
WAS 6.1 ドキュメントのスケジューラーについて説明したページへのリンクを次に示します。
http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/index.jsp
EJB 3.1 には、タイマー サービスが改良されているほか、ユーザーの介入なしでタスクを開始するためにサーブレットを使用する必要がなくなるアプリケーション ライフサイクル フックが搭載されています。
これで質問のタイトルには答えられるかもしれませんが、WebSphere で実行されているレガシー アプリケーション (6 か月以上前に書かれた ;)) に関する「本当の」質問の場合は、起動サーブレットと EJB タイマー サービスを使用することをお勧めします。
EJB 3.0 (およびリリースされ次第 3.1) には、いくつかの優れた注釈があります ;)
他には紹介しません 図書館 本当に必要でない限り。タイマー サービスは、毎日任意のジョブを実行するのに十分です。
HTH、
マーティン
web.xml では、起動時にロードされるサーブレットを構成できます。
構文:
u003Cservlet servlet-name='hello'n servlet-class='test.HelloWorld'>
<起動時のロード/>
</サーブレット>
これを行うと、サーブレットの init メソッドで、必要なことをすべて実行するように Timer / TimerTask を設定できます。TimerTask はスレッドに似ていますが、いつ実行するかをスケジュールできる点が異なります。
Quartz は、標準の JBoss 4.2.x ディストリビューションの一部です。
これは非常に優れたライブラリであり、多くの作業を行わずに簡単なワークフローを定義することもできます。
WebSphere ではスケジューリングはサポートされていません。
UNIX を使用している場合は、crontab を使用して WebSphere アプリケーションのページへのリクエストをスケジュールできます。Windows では、ページへのリクエストをスケジュールすることもできると思います。私の crontab では、Web ページへのリクエストを毎日 8:45 にスケジュールします。
45 8 * * * GET http://www.domain.com/myBatch?securitykey=verysecret
これで、毎朝 myBatch サーブレットが呼び出され、そこでその時点で必要なことをすべて実行できるようになります。他の人がこのページを呼び出してバッチを開始するのを避けるために、securitykey パラメータを追加しました。