2011-04-29 3 views
0

질문이 있습니다. 두 가지 방법으로 구성 요소가 있습니다. 첫 번째 방법은 체인에있는 다른 구성 요소 (스프링 통합 사용)에서 시작한 외부 트랜잭션에 연결해야하며 두 번째 방법은 anoter 트랜잭션에 연결해야합니다 (내 응용 프로그램 디자인의 경우). 내가 원하는 동작은 두 번째 메소드가 Exception을 던지면 첫 번째 메소드가 시작되고 그 자체로 outher 트랜잭션에 다시 연결되어 작업을 수행한다는 것입니다. 나는 이것을하기 위해서 Spring Framework의 "NESTED"전파를 시도하지만 성공하지는 않는다.Bea Weblogic에서 스프링 중첩 트랜잭션 지원 10.3

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 ............ 
     } 

}

목적은 '돈 저를 허용하는 솔루션을 찾는 것이다

은 예입니다 앱 다시 쓰기/다시 생각하기 lication 흐름과 mantain에 따라 수업. 봄

감사

다미아노

답변

1

거래는 AOP와 프록시를 통해 지원됩니다. 즉, 클래스 인스턴스의 메소드가 동일한 인스턴스의 다른 메소드를 호출하면 Spring 프록시를 통해 메소드를 호출하지 않으며 Spring은 호출을 가로 채고 새 트랜잭션을 시작할 수 없다는 것을 의미합니다. REQUIRES_NEW 전달 방법을 다른 Spring 구성 요소 안에 넣어야합니다.

관련 문제