마자니
22
2018-06-13 19:48:36 작성 2018-06-13 20:07:52 수정됨
3
493

spring 트랜잭션(@Transaction) 사용 중 서비스 사이의 연동 관련 문의


spring 기반에서 서비스를 개발하고 있으며, 트랜잭션은 spring의 @Transactional 어노테이션을 사용하고 있습니다. @Transactional를 사용하는 서로 다른 클래스 (AAA클래스, BBB클래스) 사이의 연동은 불가능한 것인지 문의하고자 합니다. 예를 들어 AAA클래스에서 BBB클래스를 연동하는것으로의 코드를 아래와 같이 작성해 보았습니다. (DAO는 mybatis를 사용하고 있습니다.)

-----------------------------------------------------------------

@Service
public class AAA {

    @Autowired

    private BBB bbb;

    @Transactional(propagation=Propagation.REQUIRED)

    public void doAction (){

        Dao_xxx_update();

        bbb.Dao_yyy_update();

    }

}

-----------------------------------------------------------------

@Service
public class BBB {

    @Transactional(propagation=Propagation.REQUIRED)

    public void doAction (){

        Dao_yyy_update();

    }

}

-----------------------------------------------------------------

AAA => BBB를 연동해 보고자 위와 같이 구성해 보았습니다.

결과는 spring Context로드 시(WAS(Tomcat)에 의해 로드) 아래와 같은 에러가 발생하였습니다.

org.springframework.beans.ConversionNotSupportedException: Failed to convert value of type 'com.sun.proxy.$Proxy23 implementing

아마도 @Transactional 어노테이션이  AOP proxy를 구성하는데 있어서 문제가 생긴것으로 생각이 되는데요, AOP 선언적 트랜잭션(어노테이션이든, xml설정이든)에 의해서 관리되는 서비스 빈의 경우 서비스사이의 연동은 불가한 것인지 궁금합니다.


혹시 이것이 불가능한 것이라면, 스프링 기반에서의 서비스 빈과 서비스 빈 사이의 연동은 DB커넥션을 서로 주거니 받거니 하면서 처리 해야 하는 것일 까요?


아니면 AAA클래스에서 BBB클래스를 연동할 때 @Autowired 로 연동하지 말고 BBB bbb = new BBB() 로 객체 생성해서 연동 해야 맞는 것일까요? (==>실제로 이렇게 할 수가 없는것이 BBB객체에 @Autowired로 주입된 빈들이 잔뜩있어서 설계상 맞지 않습니다. 실제로 해봤습니다.)


경험 많으신 분들의 의견을 듣고 싶습니다.

감사합니다.


0
0
  • 답변 3

  • LichKing
    11k
    2018-06-13 20:03:22

    저거... AAA에서 BBB를 빼면 잘 돼요?

    0
  • 마자니
    22
    2018-06-13 21:41:04

    AAA에 autowired로 injection 되어있는 bbb를 제거하고 bbb 빈 연동부를 주석처리하면 스프링 context 로드할때는 문제가 발생하지는 않습니다만 AAA객체에서 BBB객체를 연동하려는 목적을 달성할 수 없게 됩니다. 

    0
  • LichKing
    11k
    2018-06-13 21:51:44

    음... 이거때문일지는 잘 모르겠는데 이거 참고해보세요

    https://steemkr.com/kr-dev/@nhj12311/aop-cglib-java-aop-4

    0
  • 로그인을 하시면 답변을 등록할 수 있습니다.