2011-04-29 85 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組件中。