我有一个 MDB,为了响应传入的消息,它需要以原子方式执行一系列操作,为此我们使用 CMT。处理完消息并提交事务后,我需要执行最后一个操作 - 创建任务并将其排队以在线程池中执行,我在此 MDB 中创建和更新的实体将被引用。
我试图弄清楚是否有办法让 JMS 在从 onMessage() 成功(提交后)返回时调用方法(如回调)。此回调必须在与 onMessage() 相同的位置执行。
附加信息是我们正在使用 Glassfish 3.1 和包含的 JMS 提供程序。有任何想法吗?谢谢。
这是一些希望澄清的伪代码:
public void onMessage(final Message inMessage) {
addDatabaseRecord();
addOtherDatabaseRecord();
updateDatabaseRecord();
}
@RunAfterOnMessageCommits // Hypothetical annotation
public void postCommit()
// Must not happen until transaction commits.
addToThreadPoolWorkQueue();
}