Как программно получить PlatformTransactionManager из DAO?

Я занимаюсь разработкой универсального приложения CRUD с калиткой, которое может редактировать любые сущности Spring/JPA с реализацией шаблона AbstractDao, например UserDaoImpl, ForumDaoImpl ... и т. Д.

На моей странице калитки: я должен использовать @SpringBean, чтобы определить, какие PlatformTransactionManager использовать, например:

@SpringBean(name="transactionManagerUser")
private PlatformTransactionManager transactionManagerUser;
private TransactionTemplate txTemplate;

public CrudPage(final PageParameters pps , final AbstractDao<T> dao)
{
  super(pps);
  txTemplate= new TransactionTemplate(transactionManagerUser);
}

Проблема в том, что эти DAO используют разные менеджеры транзакций, такие как transactionManagerUser, transactionManagerForum...так далее.

Я не могу жестко закодировать эти имена txManager в моем коде. Я должен программно получить дао txManager . Как этого добиться?

Большое спасибо!

------- обновлено -------

Ну, я решил эту проблему, передав PlatformTransactionManager на страницу CRUD (и использовать transactionTemplate = new TransactionTemplate(platformTransactionManager) сгенерировать txTemplate ', и он работает хорошо. Хотя и не решает проблему напрямую, все равно работает.

1 ответ

И как вы думаете, почему вы должны использовать логику транзакций в своем коде? Spring использует аспекты для декларативного управления транзакциями, поэтому вам не нужно этого делать. Если вы думаете, что вам нужно, вы делаете это неправильно.

Транзакции не должны входить в компетенцию DAO; службы владеют транзакциями и управляют ими, поскольку в одной транзакции может участвовать несколько DAO.

Интересно, зачем вам несколько менеджеров транзакций. Если у вас есть несколько баз данных, вы должны использовать драйверы XA для каждой и один менеджер транзакций для обработки двухфазной фиксации.

Другие вопросы по тегам