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