2011-06-14 50 views
3

打開新的事務使用EJB3.0中,WebLogic 11g中,JDBC而內交易

我調用它在另一個部署EAR遠程運行的方法提交。

在遠程部署正在調用該方法,但它與 @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)

的問題是,所有我在數據庫中做正在不會在遠程方法調用之前的邏輯提交至遠程方法完成註解。

我願意做一個承諾,讓邏輯採取「前」地方」,當我遠程調用後返回到正常繼續。

任何想法?

一些代碼來解釋:

@CallByReference 
@Stateless(mappedName = "ejb/OperatorProccessBean") 
@Local({ OperatorProccessBeanLocal.class }) 
@Remote({ OperatorProccessBeanRemote.class }) 
public class OperatorProccessBean implements OperatorProccessBeanLocal, 
OperatorProccessBeanRemote 
{ 

... 

    SBNDispatchBeanRemote SBNDispatchBean = (SBNDispatchBeanRemote) context.lookup("ejb/SBNDispatchBean#com.mirs.sbn.dispatch.SBNDispatchBeanRemote"); 
    if (SBNDispatchBean == null) 
    { 
      logger.error(TAG + " SBNDispatchBean is null"); 

    } 
    else 
    { 
     //until here I want all my data to be commited without waiting for the upcoming remote method to finish 
     SBNDispatchBean.updateSubscriberInBlockingList(...); 
    } 
... 
} 

現在方法updateSubscriberInBlockingList()標註有

@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)

我希望在調用該方法之前提交數據。

在此先感謝, 射線。

回答

2

現在方法updateSubscriberInBlockingList()與@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)

註釋欲被調用該方法之前COMMITED的數據。

鑑於您正在使用容器管理的事務處理,這是不可能的。這背後的基本原理是,當容器已經在執行交易時,那麼啓動新的交易將導致原始的暫停。當新交易已經提交時,原始交易將被恢復。

此行爲不可配置,對於EJB容器和JTA事務管理器,預計遵守從X/Open DTP事務模型派生的JTA規範中指定的行爲。在X/Open DTP模型中,如果有新事務處於啓動狀態,而另一個正在進行中,則當前狀態將暫停,並在稍後的時間點恢復。應當指出的是,沒有交易模型,將可能(我沒有研究過全部)允許提交當前事務並開始一個新的。我只看到了各種事務處理模型中支持的嵌套事務或暫停事務。

如果您想要承擔工作,必須完全終止現有事務上下文,以便現有事務將提交,然後啓動新事務。

+0

「如果你想讓工作承諾,你必須讓現有的事務上下文完全終止,」你怎麼做? – rayman 2011-06-14 12:44:35

+0

只有在當前事務處理方法執行完畢後,您才必須調用'updateSubscriberInBlockingList'方法。事務總是與線程關聯。如果一個JTA事務管理器(TM)發現一個事務與一個線程相關聯,它將掛起現有的事務,並開始新的事務。因此,如果您需要實現該目標,您必須沒有與當前線程關聯的交易。 – 2011-06-14 12:51:52

+0

是的..但問題是我必須執行此方法()updateSubscriberInBlockingList)並且只有在它完成後才能繼續執行我的代碼。我將如何完成當前的交易方法執行? – rayman 2011-06-14 12:56:50

1

把「遠程呼叫之前的」邏輯與REQUIRES_NEW註解以及一個單獨的bean方法。您將因此有三筆交易:

  • 一個用於主要方法(但在遠程調用完成之前不會執行任何操作);
  • 一個用於遠程調用之前的邏輯;
  • 一個用於遠程調用。