2011-04-29 54 views
0

我有一个问题给你。我有一个组件有2种方法。第一种方法需要附加到从另一个存在于链中的组件(我使用Spring集成)开始的一个超级交易,第二个方法必须附加到(用于我的应用程序设计的)另一个交易。我想要的行为是,当第二个方法抛出一个异常时,第一个方法开始并且自己重新附加到外部事务中去完成他的工作。我尝试使用Spring框架的“嵌套”传播来做到这一点,但没有成功。Bea Weblogic 10.3上的Spring嵌套事务​​支持

这是例子:

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

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