我正在尝试使用MDB(onMessage)来运行长时间运行的JDBC sql查询并将输出导出到磁盘。
我正在使用onMessage遇到超时,因为确认发生在onMessage成功完成之后。理想情况下,我想立即确认消息,因为工作的处理(JDBC查询导出)内置了自己的重试/错误处理。
是否存在MDB onMessage的方法,该方法将允许立即确认或更好地处理Java EE空间中长时间运行的进程的异步运行。
答案 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){
//...
}
}
}