0

私のタイムゾーンでこんにちは。

EJB 3.0 認定試験の準備をしていて、「EJB3 In Action」という本を読んでいます。BMT トランザクション タイプを使用することの長所と短所のセクションでは、「ステートフル セッション Bean を使用していて、メソッド呼び出し間でトランザクションを維持する必要がある場合、BMT が唯一の選択肢になる」と述べています。この文が理解できません。次の擬似クラスがあると想像してください

 @Stateful
    @TransactionManagement(TransactionManagementType.CONTAINER)
    @TransactionAttribute(TransactionAttributeType.REQUIRED)
    public class TestBean implements Test{
        public void method1(...){...}
        public void method2(...){...}
        public void method2(...){
           method1();
           method2();

    }
}  

すべてのメソッドが REQUIRED transactionAttribute 値を持つことがクラス レベルで定義されているため、method3 が method1 と method2 を呼び出すと、これらのメソッドは method3 を呼び出したときに作成されたトランザクションに参加しますよね?この疑問について私を明確にすることができますか? よろしくお願いします

4

1 に答える 1

0

「メソッド呼び出し全体でトランザクションを維持する」-Bean 内の呼び出しではなく、クライアントから Bean へのさまざまなメソッド呼び出しを指します。

デフォルトでは、セッション Bean では、メソッド呼び出しごとに個別のトランザクションが作成され、メソッドの最後で終了する必要があります (提供されたトランザクションで既に呼び出されていない限り)。

ステートフル セッション Bean では、1 つのメソッドでトランザクションを開始できます。その後、クライアントはいくつかのメソッドを呼び出し (引き続き同じトランザクションに参加します)、最後にメソッドを呼び出して、トランザクションをコミットまたはロールバックします (チェックアウトやキャンセルなど)。しかし、このようにトランザクションを手動で管理できるようにするには、BMT が必要です。

もう少し明確になることを願っています。

于 2014-06-03T03:04:31.660 に答える