在事务中打开新事务时提交

| 使用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)
我希望在调用该方法之前先提交数据。 提前致谢, 射线。     
已邀请:
           现在,方法updateSubscriberInBlockingList()用@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)注释。      我希望在调用该方法之前先提交数据。 鉴于您正在使用容器管理的事务,因此是不可能的。其背后的理由是,当容器已经在执行事务时,开始新事务将导致原始事务被挂起。提交新事务后,将恢复原始事务。 对于EJB容器,此行为是不可配置的,并且JTA事务管理器应遵守JTA规范中指定的行为,该行为是从X / Open DTP事务模型派生的。在X / Open DTP模型中,如果有一个新事务开始,而另一个正在进行中,则当前事务将被挂起,并在以后的某个时间点恢复。应该注意的是,没有一种事务模型可以(我还没有研究全部)允许提交当前事务并开始新的事务。我只看到在各种事务处理模型中都支持嵌套事务或挂起事务。 如果要提交工作,则必须使现有事务上下文完全终止,以便提交现有事务,然后启动新事务。     
        将“远程调用之前”逻辑也放入带有REQUIRES_NEW注释的单独的bean方法中。因此,您将进行三笔交易: 一种用于主方法(但是在完成远程调用之前它不会做任何事情); 一个用于远程呼叫之前的逻辑; 一个用于远程呼叫。     

要回复问题请先登录注册