- PR -

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

投稿者投稿内容
タコス
会議室デビュー日: 2004/12/21
投稿数: 9
投稿日時: 2004-12-21 19:25
引用:


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

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




なるほど、分かりやすい説明助かります。

しかし、わがままなんですが、できれば1Webアプリケーション内でスケジュールを組んで処理を実行させたいと考えています。

引用:


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




そうですね。その方法も考えたのですが、セキュリティ的にどうなのでしょうか。もしかしたら、第3者からそのサーブレットにアクセスされ処理を実行されてしまう可能性もあるのではないのでしょうか。
(株)ぽち
ぬし
会議室デビュー日: 2002/09/10
投稿数: 376
投稿日時: 2004-12-21 19:40
そもそもWebアプリWebアプリと言う事から

通常画面からユーザが手動で入力し実行する処理を
自動で定期的に実行させたい


で認識は合っているでしょうか?

また、Webアプリの構成は、単純な

HTML(JSP)→Servlet→HTML(JSP)

でこちらも認識合っているでしょうか?
raystar
ぬし
会議室デビュー日: 2003/01/16
投稿数: 251
お住まい・勤務地: Tokyo/Japan
投稿日時: 2004-12-21 19:46
こんばんわ。

私が好きなやり方は

Contenxtリスナーで WEBアプリスタート時に
Timerスレッドをまわすってのがありますけどね。

WEBアプリ終了時に落ちます。
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2004-12-21 20:44
引用:

そうですね。その方法も考えたのですが、セキュリティ的にどうなのでしょうか。もしかしたら、第3者からそのサーブレットにアクセスされ処理を実行されてしまう可能性もあるのではないのでしょうか。



シェルスクリプトとセキュリティには何も関連ないですよ。
キチンと安全に動かせるように作るだけです。
それはシェルもWEBも一緒です。

スレッドを使えばいいという意見が多数出ていますが、私も同意です。
タイマースレッドは待機中、指定時間になるまで
無限ループするというようなイメージをお持ちではないでしょうか?
スレッドの待機中はプログラムの負荷にはなりませんよ。
タコス
会議室デビュー日: 2004/12/21
投稿数: 9
投稿日時: 2004-12-21 20:53
引用:


通常画面からユーザが手動で入力し実行する処理を
自動で定期的に実行させたい





その点について記述がハッキリしていないですね。すみません;

外部からのアクセスなしにWebアプリケーションで実装されている機能を
自動で定期的に実行させたい。


と言うことになります。

引用:


HTML(JSP)→Servlet→HTML(JSP)




Webアプリの処理の流れはおっしゃる通りです☆実行したい処理自体はServletに記述しています。

引用:


Contenxtリスナーで WEBアプリスタート時に
Timerスレッドをまわすってのがありますけどね。




なるほど、参考になります。スレッドを生成するタイミングはWebアプリ起動時が良いと思っていました。

引用:


タイマースレッドは待機中、指定時間になるまで
無限ループするというようなイメージをお持ちではないでしょうか?




・・・おもいっきり思っていました。
違うんですね(汗)大変勉強になります。それも考慮に入れて対応方法を検討したいと思います。

koe
大ベテラン
会議室デビュー日: 2003/07/13
投稿数: 198
投稿日時: 2004-12-22 00:19
引用:

タコスさんの書き込み (2004-12-21 20:53) より:
外部からのアクセスなしにWebアプリケーションで実装されている機能を
自動で定期的に実行させたい。



該当する機能のみServlet API非依存のクラスにリファクタリングするのが
最適のように思いますが、既存のコードの修正を避けたいのであれば、
HttpUnitを使って、ブラウザからのユーザの操作と同等のリクエストを
Webサーバに送るJavaプログラムを作り、cron等を使って定期的に実行する、
という方法はどうでしょうか。

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