2010-08-31 33 views
3

一個本地EJB試想以下兩個EJB3.0無狀態會話bean,每實現一個本地接口和它們部署到同一個容器:EJB 3.0事務邊界調用從另一個

public class EjbA { 
    @EJB 
    private ejbB; 

    public void methodA() { 
     for (int i=0; i<100; i++) { 
      ejbB.methodB(); 
     } 
    }  
} 

public class EjbB { 
    public void methodB() { 
     ... 
    } 
} 

當是了methodA調用,每次調用methodB都會導致新的事務開始並提交?或者,既然這些都是本地bean,那麼有一個事務在methodA被調用時開始並由methodB重用?

乾杯!

回答

2

這取決於你的交易屬性 - 你可以用@TransactionAttribute註釋設置爲之一:必需

  • REQUIRES_NEW

    • SUPPORTS
    • 強制性
    • NOT_SUPPORTED
    • 永遠不要

    REQUIRED是默認值,並且如果沒有到位的事務將啓動新的事務,否則容器將使用現有的事務。

    REQUIRES_NEW告訴容器始終啓動新的事務。

    其他選項在我的經驗中不太常用 - 但它們都在EJB規範中定義。

    例如:

    @Stateless 
    public class EjbA { 
        @EJB 
        private ejbB; 
    
        @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW) 
        public void methodA() { 
         for (int i=0; i<100; i++) { 
          ejbB.methodB(); 
         } 
        }  
    } 
    

    ...將使了methodA()總是在一個新的事務中運行。

  • 1

    它取決於您如何定義每種方法的交易策略。

    如果需要在方法B和A:它會使用相同的事務兩個

    如果所需的和需要新的B:將方法B

    創造新的交易