2014-01-14 16 views
6

@PostConstruct 7、私は次のクラス持っ

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、設定、毎回。

私は既にherehereから、これはJBossのバグだと思っています(これは7.1.1で修正されているようですが、明らかにそうではありません)。私の質問は、誰かが@PostConstructメソッドの二重実行を止めるために使用できる回避策を知っていますか(私はそれ以上のクラスを持っていますが、すべて同じ問題を抱えています)。

私はこのような疑問を多く見たことがありますが、それらはすべてRESTライブラリまたはSpringとCDIで接続されているため、Beanを2回初期化します。

ご協力いただきありがとうございます。

+0

インポートステートメントとパッケージ構造を追加してください。 –

+0

追加情報が必要な場合はお知らせください。 – michauwilliam

+0

あなたのEJB jarはWAR内にありますか? –

答えて

0

アプリのパッケージ化に問題があり、2番目のアプリが下にあり、 'xml config'が再び選択されてオブジェクトが2回構築されました。私の悪い、ヒントのための@hwellmannのおかげです。

関連する問題