質問

私の雇用主は、稼働している 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 タイマー サービスを使用することをお勧めします。

J2EE 1.4 (EJB 2.1) のタイマー サービス

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 パラメータを追加しました。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top