正在编写要由第三方应用程序加载和执行的“组件”(.jar
)。该应用程序具有一个API,可为我提供Connection,还有TransactionManager
。我的组件应该参与已经运行的事务,因此不应应用任何事务管理(在提供的连接上禁止close
,commit
和rollback
)。对于与实体相关的代码,我将JPA与Hibernate实现配合使用
我应该使用哪种方法来使我的EntityManagerFactory
使用这些外部提供的连接和事务管理器?对于纯Hibernate,我发现提到了ConnectionProvider
接口,据称该接口应该允许我提供所需的任何Connection,但是我无法找到一种将其用于EntityManagerFactory
的方法,而且我也没有并不完全了解TransactionManager
的角色。
我尝试实现一个SimpleConnectionWrapperDataSource
,基本上将提供的连接包装在虚拟DataSource实现中,但这失败了,因为EntityManager
试图在使用它之前关闭事务,而这是禁止的操作。那么,如何明确告诉EMF永远不要弄乱我的连接?
答案 0 :(得分:0)
我的同事找到了解决此问题的方法。解决方案归结为:
1)实现int
,它在每次调用ConnectionProvider
时返回容器提供的Connection
实例(并且对于getConnection
方法也有空的正文)>
2)将此实现的类名称指定为closeConnection
JPA属性
3)如下提供hibernate.connection.provider_class
:
TransactionManager