2

私は、トランザクションを開始し、いくつかのリソースを登録し、別のトランザクションを開始し、前のトランザクションによって登録されたリソースに基づいて処理を実行するアプリケーションに取り組んでいます。例は次のとおりです。

登録:

@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

4

1 に答える 1

0

これはかなりのオーバーヘッドですが、JMS メッセージ キューからペイロードを生成/消費させることができます。

于 2012-10-17T09:22:21.493 に答える