私は、servletとejbというwarで構成されるearアプリケーションを持っています。EEアプリケーション用のEJBとプレーンCDIの予約済みタイマーの実践パターン
@ javax.ejb.Scheduleのためだけにejbが必要でした。毎分実行しなければならないことは、戦争アプリによって傍受されるCDIイベントを発生させることです。
CDIイベントは、クラスが同じクラスローダーを共有している場合にのみ接続されるため、これは機能しません。 EJBとWARは異なるパッケージ - 異なるクラスローダーです。
だから私は(それに最も基本的な形です)このパターンを思い付いた:
@javax.enterprise.context.ApplicationScoped
public class TimerMockUp {
@Resource(mappedName="java:jboss/ee/concurrency/executor/cacheService") Executor ex;
@Inject Event<SomeEvent> evt;
@PostConstruct
private void initTimer(){
ex.execute(()->{
try{
while(true){
evt.fire(new SomeEvent());
Thread.sleep(4000);
}
} catch (Exception ex){
}
});
}
この上のあなたのテイクは何ですか?あなたはこれが長いターンで信頼できると思いますか?同じことを達成するために他にどのような選択肢がありますか?
という理由だけで。私はそれがejb-3.xアプリケーションだと思います。なぜあなたは耳を展開する必要があり、すべてを戦争に入れることはできませんか? – aschoerk
初期の意図はWARを持つことだけでしたが、Timerの必要性は... EJBの領域になりました。しかし、その後、CDIイベントのヒックアップが起こった。 – hrs
あなたは、あなたのEJBをWARに入れることができますか、バージョン2.xで作業していますか?次のURLを参照してください。https://docs.oracle.com/cd/E19798-01/821-1841/gippi/index.html – aschoerk