0

MDB (onMessage) を使用して長時間実行される JDBC SQL クエリを実行し、出力をディスクにエクスポートしようとしています。

onMessage が正常に完了した後に確認応答が行われるため、onMessage でタイムアウトが発生しています。理想的には、作業の処理 (JDBC クエリのエクスポート) には独自の再試行/エラー処理が組み込まれているため、メッセージをすぐに確認したいと思います。

この即時確認を可能にするMDB onMessageのアプローチ、またはJava EE空間内で長時間実行されるプロセスの非同期実行を処理するより良い方法はありますか?

4

1 に答える 1

0

TransactionManagementType.BEAN を使用して、メッセージを手動で確認できます。

@MessageDriven
@TransactionManagement(TransactionManagementType.BEAN)
public class TestMDB implements MessageListener {
    @Resource
    UserTransaction tx;

    @Override
    public void onMessage(Message msg) {
        String txt="";
        try {
            tx.begin();     
            TextMessage txtMsg = (TextMessage) msg;
            txt = txtMsg.getText();
            tx.commit();
        } catch (Exception e) {
            try {
                tx.rollback();
            } catch (Exception e1) {
                //....
            }
        }
        // call some EJB transactional method 
        // or
        try {
            tx.begin();
            //do some db stuff
            tx.commit();
        }catch(Exception e){
            //...
        }
    }
}
于 2013-07-11T14:52:23.937 に答える