1

CMTBeanからのトランザクションを手動でコミットする必要があります。複数のレコードを処理するループがあり、各レコードは独自のトランザクションで処理する必要があります。メソッドトランザクションサポートをNOT_SUPPORTEDとしてマークしてから、メソッドからトランザクションを制御したいと思いました。ただし、インスタンスをJNDIリソースとして注入することUserTransactionも、インスタンスを取得することもできませんでした。SessionContextjava:/module/UserTransaction

そのような処理のために新しいBMTBeanを導入せずに、独自のトランザクションでCMT Beanの複数のレコードを処理する機会はありますか?

4

1 に答える 1

1

CMTを使用する場合は、トランザクションを自分で混乱させないでください。

操作がトランザクションである必要があるためのメソッドを作成し、それをとしてマークしREQUIRES_NEWてから、ループから呼び出すことをお勧めします。

メソッドが呼び出されるたびに、現在のトランザクション(存在する場合)が一時停止され、操作のために新しいトランザクションが開始されます。

このようなもの:

@EJB
SomeEJBLocal anotherme;

public void loop() {
    for(/* something */) {
        anotherme.single();
    }
}

@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
public void single() {
    // do stuff
}

コンテナがトランザクションの側面を処理するには、EJBの別のインスタンスを注入し、singleを呼び出す必要があります。

于 2012-12-26T12:13:20.287 に答える