他のEJBから非同期EJBメソッドを呼び出しています。 このメソッドは負荷が重いため(データベース操作)、呼び出し元に制御を戻し、分離されたスレッドでビジネスを行う必要があります。EJB非同期呼び出しが呼び出し元に制御を戻しません
APIによると、これはそれを行うための方法のようになります。
リモートインターフェース:
@Remote
public interface MyEJBRemote {
@Asynchronous
void myMethod() throws RuntimeException;
}
EJBクラス:
@LocalBean
@Stateless
@TransactionAttribute(TransactionAttributeType.NEVER)
public class MyEJB implements MyEJBRemote {
@Override
public void myMethod() throws RuntimeException {
//for testing
while (true){
Thread.sleep(5000);
logger.info("Running asynchronous method");
}
//Method code here
}
}
発信者コード:
@LocalBean
@Stateless
@TransactionAttribute(TransactionAttributeType.NEVER)
public class MyEJBCaller {
@EJB
private MyEJB myEJB;
public void request() throws RuntimeException {
logger.info("Begin");
myEJB.myMethod();
logger.info("End");
}
}
テスト用私は非同期メソッド内に無限ループを作成しました。 理論上、ログは「開始」 - 「終了」 - 「非同期メソッドの実行」と表示されるはずですが、「終了」に達することはありません。
私に何か不足していますか?なぜメソッドへの呼び出しが呼び出し側に制御を返さないのですか?
私はJBoss EAP 6.4サーバーを使用しています。それはサーバー側の構成上の問題になりますか?
ありがとうございました! それを試しましたが、私はまだ同じ結果を得ています。 EJBにリモートインタフェースがある場合でも、ローカルアプリケーションから呼び出しが行われます。多分それは問題ですか? – Arkaitz