JBoss 4.2.2 MDB长期运行OnMesage

时间:2013-05-13 14:58:45

标签: java-ee jboss jms ejb-3.0 message-driven-bean

我正在尝试使用MDB(onMessage)来运行长时间运行的JDBC sql查询并将输出导出到磁盘。

我正在使用onMessage遇到超时,因为确认发生在onMessage成功完成之后。理想情况下,我想立即确认消息,因为工作的处理(JDBC查询导出)内置了自己的重试/错误处理。

是否存在MDB onMessage的方法,该方法将允许立即确认或更好地处理Java EE空间中长时间运行的进程的异步运行。

1 个答案:

答案 0 :(得分: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){
            //...
        }
    }
}