2

最新の Liberty への移行申請中に、Timer の作成に問題が発生しました。Timer は、initialize() メソッド (@PostConstruct) の @Singleton アノテーション付きクラスで作成されます。コードは十分に簡単です:

ScheduleExpression schedule = new ScheduleExpression();
setScheduleExpressionTime(schedule);

TimerConfig timerConfig = new TimerConfig();
timerConfig.setPersistent(false);
timerScheduled = timerService.createCalendarTimer(schedule, timerConfig);

アプリケーションをデプロイすると、永続化タイマーのデータソースを作成するという提案で例外が発生します。私は知っています-タイマーはデフォルトで永続的であり、その状態を維持するにはデータソースとテーブルが必要ですが、非永続性を作成するように依頼します。

サーバー機能から持続タイマーのサポートを削除しようとしていました (Java EE 7 フルプラットフォーム機能を Java™ EE 7 Web プロファイルに変更したため、ejb-3.2 は不要になりました)。そして今、例外があります: CNTR4019E: 永続タイマーを作成またはアクセスできません。永続的な EJB タイマーは、server.xml ファイルで構成されたどの機能でもサポートされていません。

したがって、サーバーは非永続タイマーを作成するという私の要件を無視し、常に永続性を作成しようとしているようです。このコードは、以前は一部の古い WAS (JEE6) で機能していましたが、現在はデプロイできませんでした。

誰かがこの問題を抱えていましたか?私は何か間違ったことをしているかもしれませんか?前もって感謝します。

4

2 に答える 2

0

その理由がわかりました。それは本当に私のせいです。タイマー作成で一ヶ所抜けました。timerService は、タイマーを作成するために 2 回使用されます。1回目は上記の場所で、2回目はイベント内です。2 回目は次のようになります。

timerService.createTimer(NB_OF_MILLISECONDS_UNTIL_FIRST_START, null);

一部の古い WAS バージョンでは、このコードは非永続タイマーを作成していた可能性がありますが、今のところ、次のように変更する必要があります。

TimerConfig timerConfig = new TimerConfig();
timerConfig.setPersistent(false);
timer = timerService.createSingleActionTimer(NB_OF_MILLISECONDS_UNTIL_FIRST_START, timerConfig);

タイマーを作成するときは注意してください。:-) ご協力ありがとう御座います。

于 2017-10-30T16:50:31.710 に答える