Bea Weblogic 10.3上的Spring嵌套事务​​支持

时间:2011-04-29 14:19:01

标签: spring transactions nested weblogic-10.x

我有一个问题要问你。我有一个有2种方法的组件。第一种方法需要附加到从链中存在的另一个组件开始的外部转换(我使用Spring Integration),第二个方法必须附加(对于我的应用程序设计)到anoter事务。我想要的行为是当第二个方法抛出异常时,第一个方法启动并自己重新附加到外部事务以完成其工作。我尝试使用Spring框架的“NESTED”传播来做到这一点,但没有成功。

这是一个例子:

public ComponentClassInterface{
         @Transactional(propagation = Propagation.REQUIRES_NEW, rollbackFor=Exception.class) /*but i have used NESTED without success and I don't want use the same transaction */
         public ObjectMessage activate(ObjectMessage message);

}

public ComponentAbstractClass implements ComponentClassInterface{

       public void updateObjectMessage(ObjectMessage message){
              /*To obtain an attached instance of previously persisted message*/
              ObjectMessage message = daoMessage.getMessageByID(message.getID);/*Here i can't retreive the message...the transaction isn't yet attached*/
              message.setSomeProperty("ChangedPropertyValue");
              daoMessage.updateItem(message);
              }
       @Override
       public abstract ObjectMessage activate(ObjectMessage message);

}

public ComponentConcreteClass extends ComponentAbstractClass{
       @Override
       public ObjectMessage activate(ObjectMessage message){
              ............ doSomeStuff ............
       }

}

目标是找到一个解决方案,允许我不重写/重新考虑应用程序流并保留类。

此致

达米亚诺

1 个答案:

答案 0 :(得分:1)

通过AOP和代理支持Spring中的事务。这意味着如果类实例的方法调用同一实例的另一个方法,它不会通过Spring代理调用该方法,并且Spring无法拦截该调用并为您启动新事务。 您需要将带有REQUIRES_NEW传播的方法放在另一个Spring组件中。