如何以编程方式获取DAO的PlatformTransactionManager?

时间:2010-12-18 15:50:08

标签: java spring transactions wicket transactionmanager

我正在使用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正在使用不同的事务管理器,例如transactionManagerUsertransactionManagerForum等等。

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

非常感谢!

-------更新-------

好吧,我已经通过将PlatformTransactionManager传递到CRUD页面来解决了这个问题(并使用transactionTemplate = new TransactionTemplate(platformTransactionManager)来生成txTemplate',并且它运行良好。虽然不能直接解决问题,但无论如何,它有效。

1 个答案:

答案 0 :(得分:3)

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

交易不应该是DAO的范畴;服务拥有和管理事务,因为可能有几个DAO参与单个事务。

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