2012-05-31 2 views
2

У меня есть метод, который аннотируется аннотацией @Transactional. Этот метод не вызван с помощью прокси-сервера Spring, но мне нужно каким-то образом обеспечить создание транзакции без использования этого прокси-сервера.spring принудительная транзакционная логика для аннотированного метода

Можно ли реализовать?

+2

Что об использовании [ 'TransactionTemplate'] (http://static.springsource.org/spring/docs/current/ Javadoc-апи/орг/springframework/сделки/поддержки/TransactionTemplate.html)? Если вы заинтересованы, я разберу его в ответ и предоставлю несколько подробностей. –

+0

@ TomaszNurkiewicz, TransactionTemplate помог мне решить мою проблему. –

ответ

2

Вы можете использовать TransactionTemplate начать транзакцию вручную при условии блока кода/обратного вызова:

final TransactionTemplate transactionTemplate = new TransactionTemplate(transactionManager); 

transactionTemplate.execute(new TransactionCallback<String>() 
{ 
    @Override 
    public String doInTransaction(TransactionStatus status) 
    { 
     //... 
     return "Some result"; 
    } 
}); 

Или, если вам не нужен результат:

transactionTemplate.execute(new TransactionCallbackWithoutResult() 
{ 
    @Override 
    protected void doInTransactionWithoutResult(TransactionStatus status) 
    { 
     //... 
    } 
}); 

Конечно, вы можете также определить TransactionTemplate как фасоль весны и вводить ее непосредственно. В противном случае вы можете создать его каждый раз, когда вам это нужно, но тогда вам нужно впрыснуть менеджер транзакций:

@Resource 
private PlatformTransactionManager transactionManager; 
Смежные вопросы