0

我正在开发一个带有 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 ',并且效果很好。虽然没有直接解决问题,但无论如何,它可以工作。

4

1 回答 1

3

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

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

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

于 2010-12-18T18:32:08.787 回答