私が開発しているアプリケーションのタスクの1つは、システム上で動作している他のアプリケーションのデータをバックアップすることです。無人で実行できるように、このバックアッププロセスをスケジュールする必要があります。私はJEE6/EJB3.1 Timerユーティリティを使用しています。JEE6再デプロイ中のタイマの持続性
私はTimerHandle型のフィールドを持つJPA2を使用してデータベースに永続化するクラスBackupConfigurationを持っています。ユーザーがバックアップをスケジュールすることを決めた場合は、新しい持続タイマーを作成し、TimerHandleフィールドに値を設定します。
サーバを再起動しても問題ありません。タイマーが再起動します(すべてのタイマーが一度に起動するため、一気に慌ててしまいます)。
私がアプリケーションを再デプロイすると(これは開発中にかなり発生します)、すべてのタイマーが失われます!私は愚かにタイマーがサーバーに結びついていると仮定しましたが、アプリケーションに結びついていることが判明しました。
私の疑問は、どのような再配置でも永続的なタイマーを作る最良の方法は何ですか?
私が見ることができる唯一の解決策は、ScheduleExpressionとTimerHandleをバックアップ構成で保存することです。その後、私はハンドルがあるがタイマーがない場合、私はタイマーを再作成します。しかし、この主な問題は、タイマーがないかどうかをアプリケーションが検出するたびに、スケジュールされたすべてのエンティティを列挙することを意味します。これは現在のところ多くの仕事ではありませんが、将来的には莫大なコストがかかる可能性があります。
? WebSphere Application Serverの動作を説明していますが、明確ではありません。これが使用しているアプリケーションサーバーの場合、アンインストールを実行したときにアプリケーションサーバーが停止されていない限り、再デプロイ中に永続タイマーをクリアしないようにするオプションはないと思います(たとえば、切断されたwsadminセッションを使用)。 –
GlassFish 3.0.1を使用していますが、これは標準的な動作です。 – wobblycogs