打開新的事務使用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)
我希望在調用該方法之前提交數據。
在此先感謝, 射線。
「如果你想讓工作承諾,你必須讓現有的事務上下文完全終止,」你怎麼做? – rayman 2011-06-14 12:44:35
只有在當前事務處理方法執行完畢後,您才必須調用'updateSubscriberInBlockingList'方法。事務總是與線程關聯。如果一個JTA事務管理器(TM)發現一個事務與一個線程相關聯,它將掛起現有的事務,並開始新的事務。因此,如果您需要實現該目標,您必須沒有與當前線程關聯的交易。 – 2011-06-14 12:51:52
是的..但問題是我必須執行此方法()updateSubscriberInBlockingList)並且只有在它完成後才能繼續執行我的代碼。我將如何完成當前的交易方法執行? – rayman 2011-06-14 12:56:50