2011-09-13 13 views
0

いくつかのエンティティを読み込み、いくつかのwsを呼び出して、いくつかのエンティティを書き込み/更新するジョブをスケジュールしたいと思っています。このジョブは月の後、例えば01amに処理する必要があります。私はこの問題について2つの問題があります。まず、スケジューラは一定のパラメータを取る、私のrequeirementスケジューラはいくつかのUIを介して調整する必要があります。これを行う適切な方法はありますか?それ以外の場合は、たとえば30分ごとにスケジューラを調整しなければならず、メソッドの内部では、満たされているかどうかにかかわらず、いくつかの可変時間値を調べなければなりません。 2番目の問題は、スケジューラーメソッドの中にあります。usertransactionが起動しています。私がutx.startを呼び出すメソッドを呼び出すと、「スレッドはすでにトランザクションに関連付けられています」というメッセージが表示されます。 exp。何をすればよいでしょうか?推薦pls。前もって感謝します。EJBタイマー使用の推奨事項

答えて

0

可変スケジュール式を作成する場合は、TimerService(@Resource Timerservice _timerServiceなど)を取得してから、@ Timeoutメソッドを呼び出すcreateCalendarTimerメソッドを使用する必要があります。タイマーのスケジュールは不変なので、UIは新しいタイマーを作成する前に、getTimers()を使用して既存のタイマーを検索/キャンセルする必要があります(getInfo()と一致させるなど)。

@Timeoutメソッドは、包含するBeanのトランザクション機能を継承します。 Beanがコンテナ管理のトランザクションを使用している場合、UserTransactionは機能しません。

+0

あなたが提案したように、可変スケジュール式の作成問題を解決しました。一方、私はまだトランザクションの問題については問題があります。私はCRUD操作を提供するModelOperationsというクラスを持っています。このクラスをMy Timerクラスに挿入しますが、メソッドをModelOperationsから呼び出すと、「スレッドはすでにトランザクションに関連付けられています」というメッセージが表示されます。以来、私の永続メソッドにはutx.begin、commitなどの呼び出しが含まれています。あなたの意見では、再利用性のために何をすべきですか?ご助力ありがとうございます。 –

+0

コードをリファクタリングして、UserTransaction.begin/endなしでビジネスロジックのみを実行するメソッドを呼び出すことができます。 –

0

マネージドBeanを公開して、このタイマーをJMXコンソールで管理することができます。

2番目の問題として、トランザクションをコンテナで管理するように設定したようです。次に、メソッドが起動すると、トランザクションが自動的に開始されます。この自動管理を無効にすることもできますし、プログラム管理を避けてコンテナにトランザクションを管理させることもできます。

関連する問題