0

数週間前に、いくつかのタスクをオンデマンドでスケジュールするためのEJB 3.0 TimerServiceを開発しました(ユーザーがボタンをクリックすると、いくつかのタスクを実行するためのタイマーが作成されます)。これまでのところ、今日までうまく機能しています。

昨日、de TimerServiceを含むEJBを再デプロイして、いくつかのプロパティを更新しました。今日は、いくつかのプロパティが作成されていても、タイマーは起動されませんでした。

¿これは正常ですか?つまり、ejbTimeOutのシグネチャを変更しない場合、再デプロイ後にいつものように起動するべきではありませんか?

4

4 に答える 4

2

タイマーを永続的にするには、ここで説明するように TimerHandle を使用します。

後で参照できるように Timer オブジェクトを保存するには、その getHandle メソッドを呼び出して、TimerHandle オブジェクトをデータベースに保存します。(TimerHandle オブジェクトはシリアライズ可能です。) Timer オブジェクトを再インスタンス化するには、データベースからハンドルを取得し、ハンドルで getTimer を呼び出します。TimerHandle オブジェクトは、リモートまたは Web サービス インターフェイスで定義されたメソッドの引数として渡すことはできません。つまり、リモート クライアントと Web サービス クライアントは、Bean の TimerHandle オブジェクトにアクセスできません。ただし、ローカル クライアントにはこの制限はありません。

http://docs.oracle.com/javaee/5/tutorial/doc/bnboy.htmlから取得

于 2013-02-20T12:48:16.773 に答える
1

タイマーはデフォルトで永続的です。サーバーを再起動すると、アプリケーションなどを再デプロイすると、おそらくそれらが見落とされた場合、タイムアウトになります。

私は過去に同様の問題に直面しました。したがって、以前の既存のタイマーをすべてキャンセルして、後で新しいタイマーを作成することをお勧めします。

于 2013-02-19T11:16:43.540 に答える
0

--keepstate フラグを true に設定して asadmin redeploy コマンドを使用します。

完全な例:

asadmin redeploy --keepstate=true --name=taskee-1.0-SNAPSHOT target/taskee-1.0-SNAPSHOT.war

詳細:

http://www.oracle.com/technetwork/articles/java/pongef-1517943.html

于 2015-09-16T05:53:20.547 に答える
0

これが EJB 3.0 の動作です。EJB 3.1 では、タイマー サービスが大幅に改善されました。デプロイが成功すると作成される自動タイマーをサポートします。EJB 3.1 へのアップグレードがオプションかどうかを確認することをお勧めします。

EE6 チュートリアル:タイマー サービスの使用

エンタープライズ Bean タイマーは、プログラムによるタイマーまたは自動タイマーのいずれかです。プログラム タイマーは、TimerService インターフェイスのタイマー作成メソッドの 1 つを明示的に呼び出すことによって設定されます。java.ejb.Schedule または java.ejb.Schedules アノテーションが付けられたメソッドを含むエンタープライズ Bean が正常にデプロイされると、自動タイマーが作成されます。

于 2013-02-19T15:17:23.203 に答える