我想在MDB的onMessage结束后创建一些进程。
我认为我可以使用EJB的@asyncronous来实现它。但我担心这个方法可以在调用者线程结束之前启动。
有没有办法确保这个异步方法在调用者线程结束后启动,至少调用者线程提交它自己的事务。
谢谢,美好的一天。
答案 0 :(得分:1)
您可以通过使用其他MDB来实现此目的,如果您从事务中发布消息,则在提交发布者事务之前不会发布消息:
@MessageDriven...
public class MDB1 {
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public void onMessage(Message message) {
...
producer.send(msg1); // msg1 will be published at commit of this transaction
...
myMethod1();
}
}
和,
@MessageDriven... // Consumes msg1
public class MDB2 {
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public void onMessage(Message message) {
...
myMethod2();
...
}
}
这种方式(并使用CMT),在msg
返回之前不会发布消息MDB1.onMessage()
,因此在MDB2.myMethod2()
返回之前永远不会执行MDB1.onMessage()