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 回答