PlatformTransactionManager

PlatformTransactionManager

我正在使用wicket开发通用的CRUD应用程序,该应用程序可以使用AbstractDao模式的实现来编辑任何Spring / JPA实体,例如UserDaoImpl,ForumDaoImpl ... etc

在我的检票口页面中:
我必须使用@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正在使用不同的事务管理器,例如transactionManagerUsertransactionManagerForum ...等。

我无法在代码中硬编码这些txManager的名称。
我必须以编程方式获取dao的txManager。如何实现呢?

非常感谢 !

- - - - 更新 - - - -

好吧,我已经通过将PlatformTransactionManager传递到CRUD页面(并使用transactionTemplate = new TransactionTemplate(platformTransactionManager)生成txTemplate')来解决此问题,并且效果很好。尽管不能直接解决问题,但还是可以。

最佳答案

为什么您认为应该在代码中放入事务逻辑? Spring使用方面来声明式管理事务,因此您不必这样做。如果您认为需要,那说明您做错了。

交易不应该是DAO的职责;服务拥有并管理交易,因为单个交易中可能有多个DAO。

我想知道为什么您需要几个事务管理器。如果您有多个数据库,则应为每个数据库使用XA驱动程序,并使用一个事务管理器来处理两阶段提交。

08-04 17:07