@PostConstructを使用して、ステートレスBean EJB3でタイマーを作成する方法は?

StackOverflow https://stackoverflow.com/questions/3488905

質問

プールで無国籍の豆が作成されたら、タイマーEJB3を作成したいと思います。しかし、私が使用する場合 @PostConstruct 例外が得られます:

java.lang.IllegalStateException: [EJB:010193]Illegal call to EJBContext method. The bean is in "null" state. It cannot perform 'getting the Timer Service' action(s). Refer to the EJB specification for more details.

コンテナが@PostConstructを呼び出す場合、Beanはnullでありません。それで、なぜ私はこの例外を得るのですか?


クラス

@Stateless
public class TestBean implements TestLocal {

    @Resource
    TimerService timerService;

    @PostConstruct
    public void startTimer() {
        if (timerService.getTimers().size() == 0) {
            timerService.createTimer(1 * 1000, 1 * 1000, null);
        }
    }

    @Override
    public void test() {        
    }

}

インターフェース

@Local
public interface TesteLocal {

    void test();

}

サーブレット

public class TestServlet extends HttpServlet {
    @EJB
    private TestLocal test;

    protected void doGet(....) throws .... {
        test.test();
    }
}

詳細

WebLogic Server 11gを使用しています。

役に立ちましたか?

解決

私は100%確信がありませんが、Beanクラスは実装しなければならないと思います javax.ejb.TimedObject または、注釈を付けた方法を持っています @Timeout EJBタイマーを使用します。例:

@Stateless
public class TestBean implements TestLocal {

    @Resource
    TimerService timerService;

    @PostConstruct
    public void startTimer() {
        if (timerService.getTimers().size() == 0) {
            timerService.createTimer(1 * 1000, 1 * 1000, null);
        }
    }

    @Timeout
    @TransactionAttribute(value=REQUIRES_NEW)
    public void timeoutCallback(Timer timer) {
        ...
    }

}

Weblogicはまだ上記のコードに不平を言っていますか?

PS:いずれにせよ、現在のエラーは非常に不十分に報告されています。おそらくケースを開く必要があります。

他のヒント

@PostConstructを使用して、Stateless Bean EJBでタイマーを作成することはできません。このブログを参照してください Weblogic 10クラスター環境でEJB3タイマーの使用方法 説明のために。ブログでさえWeblogicについて話していましたが、説明は他のアプリサーバーにも適用されるはずです。

コンテナは、ステートレスセッションBeanの@PostConstructで注釈された方法のタイマーサービスを許可しません。 @PostConstructで注釈が付けられた方法でTimerServiceを使用する場合は、Singleton Session Bean(@singleton)のGOを使用します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top