2009-06-21 10 views
0

J2EEコンテナで実行したいバックグラウンドジョブに対して、スタートアップサーブレットを作成し、Timer Service APIを使用して(What tools are there for timed batch processes in J2EE?の回答で)管理対象タイマーを作成することを提案しました。サーブレットの起動コードでJ2EEタイマーサービスAPIを使用するにはどうすればよいですか?

タイマーを作成するには、タイマーAPIを実装するコンテキストが必要です。 (Example

Servletクラスでは、initメソッドをオーバーライドしますが、ServletContextにのみアクセスできますが、SessionContextにはアクセスできません。 ServletContextにはタイマーを作成するメソッドがありませんので、私はここで止まっています。

サーブレットの起動コードでJ2EEタイマーサービスにアクセスするにはどうすればよいですか?

+0

は、あなたがのためにタイマーを必要とすると思いますか?詳細が役立ちます。 – duffymo

答えて

2

私はタイマージョブが聞こえるときはいつでも、これをJava EEアプリケーションサーバーから切り離すべきだとは思っていません。 Quartzやオペレーティングシステムのスケジュールされたタスク、AutoSysのようなバッチマネージャのようなものを使うことができますが、サーブレットに埋め込むことはサーブレットの誤用のようです。

Java EE 5コンテナには、EJBであるTimerServiceがあります。おそらくthisはそれを並べ替えるのに役立ちます。

+0

Sunの例では、エンタープライズBeanのビジネスメソッドでタイマーが作成されます。したがって、このステートレスセッションBeanのクライアントクラスを作成し、このサーブレットのインスタンスを作成し、それを使用してタイマー作成メソッドを呼び出す必要があります。 – mjn

+0

はい。 Java EE Webアプリケーションに何らかのサーブレットを既に持っていると仮定するのは合理的です。 init()メソッドにコードを追加します。 – duffymo

1

サーブレットのスタートアップコード(すべての再デプロイメントの後に実行される)を使用する代わりに、EJBの起動時にタイマーを開始するのがよりクリーンであることがわかりました。 EJB 3.1とシングルトンEJBで、これは今はるかに少ないコードで可能です:

http://blogs.oracle.com/kensaks/entry/application_startup_shutdown_callbacks

関連する問題