6
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import javax.ejb.Singleton;
import javax.ejb.Startup;
import javax.ejb.Timeout;
import javax.ejb.Timer;
import javax.ejb.TimerConfig;
import javax.ejb.TimerService;
import javax.inject.Inject;
import com.mysite.Config;
@Startup
@Singleton
public class Scheduler {
@Resource
private TimerService timerService;
@Inject @Config
private Logger log;
@Inject @Config
private Integer delay;
@Inject @Config
private Integer interval;
@Inject @Config
private Boolean enabled;
@PostConstruct
public void initTimer() {
if (enabled) {
TimerConfig tc = new TimerConfig();
tc.setPersistent(false);
timerService.createIntervalTimer(delay, interval, tc);
}
}
@Timeout
public void timeout(Timer timer) {
// do something
}
}
パッケージ構造:ここ(
- javaの
- dataloadersです問題のあるクラス)
- 他のパッケージ
の
- リソース
- 2回呼び出されて、タイムアウトになり二回のJBoss 7.1.1常に呼ばれ、このクラスのinitTimerメソッドにデプロイするときなど
META-INF、設定、毎回。
私は既にhereとhereから、これはJBossのバグだと思っています(これは7.1.1で修正されているようですが、明らかにそうではありません)。私の質問は、誰かが@PostConstructメソッドの二重実行を止めるために使用できる回避策を知っていますか(私はそれ以上のクラスを持っていますが、すべて同じ問題を抱えています)。
私はこのような疑問を多く見たことがありますが、それらはすべてRESTライブラリまたはSpringとCDIで接続されているため、Beanを2回初期化します。
ご協力いただきありがとうございます。
インポートステートメントとパッケージ構造を追加してください。 –
追加情報が必要な場合はお知らせください。 – michauwilliam
あなたのEJB jarはWAR内にありますか? –