如何使用外部提供的Connection和TransactionManager引导EntityManagerFactory

时间:2018-10-12 12:32:38

标签: java hibernate jpa

正在编写要由第三方应用程序加载和执行的“组件”(.jar)。该应用程序具有一个API,可为我提供Connection,还有TransactionManager。我的组件应该参与已经运行的事务,因此不应应用任何事务管理(在提供的连接上禁止closecommitrollback)。对于与实体相关的代码,我将JPA与Hibernate实现配合使用

我应该使用哪种方法来使我的EntityManagerFactory使用这些外部提供的连接和事务管理器?对于纯Hibernate,我发现提到了ConnectionProvider接口,据称该接口应该允许我提供所需的任何Connection,但是我无法找到一种将其用于EntityManagerFactory的方法,而且我也没有并不完全了解TransactionManager的角色。

我尝试实现一个SimpleConnectionWrapperDataSource,基本上将提供的连接包装在虚拟DataSource实现中,但这失败了,因为EntityManager试图在使用它之前关闭事务,而这是禁止的操作。那么,如何明确告诉EMF永远不要弄乱我的连接?

1 个答案:

答案 0 :(得分:0)

我的同事找到了解决此问题的方法。解决方案归结为:

1)实现int,它在每次调用ConnectionProvider时返回容器提供的Connection实例(并且对于getConnection方法也有空的正文)

2)将此实现的类名称指定为closeConnection JPA属性

3)如下提供hibernate.connection.provider_class

TransactionManager