- PR -

Webアプリケーションで処理をスケジューリングする方法

投稿者投稿内容
タコス
会議室デビュー日: 2004/12/21
投稿数: 9
投稿日時: 2004-12-21 16:25
初めて投稿させて頂きます。よろしくお願いします。

Webアプリケーションで定期的(毎日深夜1時など)に実行したい処理をスケジューリングする方法を教えていただきたいと思います。
スレッドを生成しtimerクラスのscheduleメソッドを使用する方法を考えましたが、スレッドを常駐させるのは処理に負荷がかかるのでできれば避けたいと考えています。

開発にはWebSphere5.1を使用しています。
(株)ぽち
ぬし
会議室デビュー日: 2002/09/10
投稿数: 376
投稿日時: 2004-12-21 16:49
Threadといっても、処理負荷がかかるのは処理がコールされた
時に限りますよね。リソースは食うでしょうがさほど気にする
ほどの量でもないと思いますが。

Webアプリの作りがどうなっているのかわかりませんが、処理
ロジックをEJBで切り離しているとかであれば、batでEJBを
定期的にコールすればいいでしょうし。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2004-12-21 16:51
JMX にタイマの機能があります。
"javax.management.timer.Timer"について調べてみてはいかがでしょうか。
http://java.sun.com/products/JavaManagement/

[ メッセージ編集済み 編集者: インギ 編集日時 2004-12-21 16:51 ]
skulker
ベテラン
会議室デビュー日: 2004/06/08
投稿数: 67
投稿日時: 2004-12-21 17:03
本当に常駐スレッドのひとつやふたつを気にするようなシビアな要件なんですかね・・・。
普通にスレッドにした方が素直だと思いますが。

WAS5.0 Enterprise、WBISF5.1、WAS6.0 ならIBMとBEAが提出しているJSR236に基づく、TimerとかAlarmとかSchedulerとかのサービスがありますけど。
http://publib-b.boulder.ibm.com/abstracts/sg246932.html?Open
マーサ
ベテラン
会議室デビュー日: 2004/11/26
投稿数: 87
投稿日時: 2004-12-21 17:29
引用:

Webアプリケーションで定期的(毎日深夜1時など)に実行したい処理をスケジューリングする方法を教えていただきたいと思います。


って、Webアプリで定期的に指示を出すと言うことなんですか?
それとも、単に処理のスケジューリングをするだけなのですか・・・?

プラットフォームがUNIX系ならcrontabと言うものがあるので、アプリを起動する時間や間隔を指定する方法も有ります。
具体的には、起動アプリを設定しておいて、スケジューリングファイルのような物をWebから登録しておけば、設定した時間に処理が実行される(起動アプリがスケジューリングファイルを読み込み実行する)・・・と言う方法もありますよ。
#見当違いだったら済みません。。。
タコス
会議室デビュー日: 2004/12/21
投稿数: 9
投稿日時: 2004-12-21 17:30
沢山のご意見ありがとうございます。

やはりスレッドを利用する方法が良いようですね。もう一度考えてみたいと思います。
また、JMXやskulker様のおっしゃるサービスに関する知識がないので、詳しく調べてみたいと思います。

一つ良く分からない点があるのですが、
(株)ぽち様>batでEJBを定期的にコールすればいいでしょうし。
というのは実際にどのようなbatを作ればよいのでしょうか。
簡単に教えていただけると幸いです。


komey
ベテラン
会議室デビュー日: 2003/11/27
投稿数: 76
投稿日時: 2004-12-21 17:31
皆さんとちょっと視点を変えて。

常駐スレッド&タイマを作りこむするのが面倒なら、タスクを実行するサーブレットを用意しておいて、(UNIXの場合)cronに設定したシェルスクリプトで、そのサーブレットにHTTPアクセスするとかはいかがでしょう?

(株)ぽち
ぬし
会議室デビュー日: 2002/09/10
投稿数: 376
投稿日時: 2004-12-21 17:38
引用:

一つ良く分からない点があるのですが、
(株)ぽち様>batでEJBを定期的にコールすればいいでしょうし。
というのは実際にどのようなbatを作ればよいのでしょうか。
簡単に教えていただけると幸いです。



ああ、これはその行いたい処理がEJBによりキレイに切り離しされてる場合

public static void main( ..... ) {
....EJBコール
}

みたいな単体アプリ作って、それをwindowsであればタスクスケジューラとか
UNIXであれば他の方が言っておられるようなcrontabとかで仕込ませておけば
定期バッチが作れますよね、ってことです。

あまりスマートじゃないかもしれないけど。

スキルアップ/キャリアアップ(JOB@IT)