我正在使用wicket开发一个通用的CRUD应用程序,它可以使用AbstractDao模式的实现来编辑任何Spring / JPA实体,例如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的名称。 我必须以编程方式获取dao的txManager。如何实现?
非常感谢!
-------更新-------
好吧,我已经通过将PlatformTransactionManager
传递到CRUD页面来解决了这个问题(并使用transactionTemplate = new TransactionTemplate(platformTransactionManager)
来生成txTemplate',并且它运行良好。虽然不能直接解决问题,但无论如何,它有效。
答案 0 :(得分:3)
为什么你认为你应该在你的代码中加入事务逻辑? Spring使用方面以声明方式管理事务,因此您不必这样做。如果你认为你需要,那你做错了。
交易不应该是DAO的范畴;服务拥有和管理事务,因为可能有几个DAO参与单个事务。
我想知道你为什么需要几个交易经理。如果您有多个数据库,则应该为每个数据库使用XA驱动程序,并使用单个事务管理器来处理两阶段提交。