我正在使用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正在使用不同的事务管理器,例如
transactionManagerUser
,transactionManagerForum
...等。我无法在代码中硬编码这些txManager的名称。
我必须以编程方式获取dao的txManager。如何实现呢?
非常感谢 !
- - - - 更新 - - - -
好吧,我已经通过将
PlatformTransactionManager
传递到CRUD页面(并使用transactionTemplate = new TransactionTemplate(platformTransactionManager)
生成txTemplate')来解决此问题,并且效果很好。尽管不能直接解决问题,但还是可以。 最佳答案
为什么您认为应该在代码中放入事务逻辑? Spring使用方面来声明式管理事务,因此您不必这样做。如果您认为需要,那说明您做错了。
交易不应该是DAO的职责;服务拥有并管理交易,因为单个交易中可能有多个DAO。
我想知道为什么您需要几个事务管理器。如果您有多个数据库,则应为每个数据库使用XA驱动程序,并使用一个事务管理器来处理两阶段提交。