私は、トランザクションを開始し、いくつかのリソースを登録し、別のトランザクションを開始し、前のトランザクションによって登録されたリソースに基づいて処理を実行するアプリケーションに取り組んでいます。例は次のとおりです。
登録:
@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...
}
}
2回目の取引
@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 は 1 つのトランザクション専用であることを知っているので、問題は別の方法 (リソース レジストリなど) があり、別のトランザクションで使用できるかどうかです。
ありがとう。
L