2010-04-27 7 views
0

Groovy 클래스에서 시작하지 않은 Spring 트랜잭션 (클래스 수준, 프록시, 주석 중심)에 대한 경험이있는 사람이 있습니까? 설명 할 수없는 LazyInitialization 예외로 인해 stacktrace에 트랜잭션을 시작하라는 호출이 포함되어 있지 않은 것으로 나타났습니다. 미친 듯이 들리지만 Groovy가 Transactional 주석을 사용하는지 궁금해해야합니다.Groovy에서 Transactional annotation을 사용하는 데 문제가 있습니다

답변

1

사실 나는 문제의 원인을 발견했습니다. Spring 설명서 (강조 표시된 부분에서) :

24.5.1. AOP - 스크립팅 된 bean을 조언하는 것 Spring AOP 프레임 워크를 사용하여 스크립트 된 bean을 조언하는 것이 가능합니다. Spring AOP 프레임 워크는 실제로 조언을받는 bean이 스크립트 빈 (scripted bean)이 될 수 있다는 것을 모르고 있기 때문에 사용하거나 사용하려고하는 모든 AOP 사용 사례와 기능이 스크립트 된 빈 (bean)으로 작동합니다. 스크립트 빈을 조언 할 때주의해야 할 것이 하나 있습니다. 클래스 기반 프록시를 사용할 수 없으므로 인터페이스 기반 프록시를 사용해야합니다. 당신은 물론 스크립트 된 bean을 조언하는 것에 국한되지 않고 ... 지원되는 동적 언어로 aspect를 작성하고 다른 bean을 조언하기 위해 그러한 bean을 사용할 수도 있습니다. 동적 언어 지원의 고급 사용법이 될 것입니다.

제 문제는 클래스 기반 프록시를 사용하고 있다는 것입니다.

+0

흠 몇 가지 예를 게시 할 수 있습니까? – hudi

0

당신이 Grails를를 사용하는 경우, 당신은 트랜잭션 주석에 대한 대안으로

MyDomainClass.withTransaction {  
    // Code within the transaction goes here 
} 

를 사용하여 시도 할 수 있습니다. 코드가이 접근 방식과 함께 작동하면 문제의 원인이 주석임을 확신 할 수 있습니다 (영구 솔루션으로 보이지 않을 수도 있음).

관련 문제