我正在开发一个应用程序,它启动一个事务,注册一些资源,启动另一个事务,并根据前一个事务注册的资源执行处理。示例如下:
寄存器:
@Stateless
@LocalBean
public class Register {
@Resource TransactionSynchronizationRegistry tsr;
public void registerResource(String id, Resource r) {
tsr.putResource(id, r);
}
}第一笔交易
@Stateless
@LocalBean
public class FirstTransaction {
@Inject Register r;
@Inject SecondTransaction st;
public void doRegistering(Resource r) {
r.registerResource("key", r);
st.doProcess();
// do other operations...
}
}第二笔交易
@Stateless
@LocalBean
public class SecondTransaction {
@Resource TransactionSynchronizationRegistry tsr;
/*
* start new transaction in order to ensure that
* there won't be any rollback on any operations
* performed by this method if its caller fails
*/
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
public void doProcess() {
Resource r = (Resource) tsr.getResource("key");
// start processing resource...
}
}但是,由于在注册资源后创建了新的事务,因此我无法再次访问相同的TransactionSynchronizationRegistry。我知道TransactionSynchronizationRegistry只用于一个事务,所以问题是是否有另一种方法,例如资源注册,我可以在不同的事务中使用。
谢谢。
我
发布于 2012-10-17 17:22:21
这是一个相当大的开销,但您可以让它们从JMS消息队列中产生/使用有效负载。
https://stackoverflow.com/questions/12929811
复制相似问题