Если я поместил 'mode = "aspectj" в тег tx: annotation-driven, то Spring-данные обрабатывают транзакции только в файлах @Repository, а не в классах @Service.@Transactional в @Service игнорируется
Вот мой @Service, чтобы получить пользователей:
@Service
public class RepositoryAuthService implements AuthService{
@Resource
AuthUserRepository userRepository;
@Transactional(propagation = Propagation.REQUIRED)
@Override
public User findByCredentials(String userName, String password){
User user = userRepository.getByCredentials(userName, password);
TransactionAspectSupport.currentTransactionStatus().toString();
...
}
Вот моя весна-контекст:
<tx:annotation-driven mode="aspectj" transaction-manager="transactionManager" />
<jpa:repositories base-package="my.jpatest.dao.auth" />
<context:component-scan base-package="my.jpatest.dao.auth">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Repository" />
</context:component-scan>
<bean class="my.jpatest.dao.auth.RepositoryAuthService" id="authService" />
Исключение:
org.springframework.transaction.NoTransactionException: No transaction aspect-managed TransactionStatus in scope
at org.springframework.transaction.interceptor.TransactionAspectSupport.currentTransactionStatus(TransactionAspectSupport.java:111)
at my.jpatest.dao.auth.RepositoryAuthService.findByCredentials(RepositoryAuthService.java:34)
Я попытался 'AspectJ' с ' proxy-target-class = "true", но не помогло. Без mode = "aspectj" все в порядке: соединение остается после вызова репозитория, как и ожидалось.
Существует подробная статья об этом, но это довольно долго: http://doanduyhai.wordpress.com/2011/11/20/spring-transactional-explained/
Любые советы?
С уважением: Бенс