【发布时间】:2019-12-16 08:00:18
【问题描述】:
我们的应用程序是一个中间层应用程序,它为十几个前端应用程序提供了对后端几十个数据库(和其他数据源)的访问权限。
我们决定使用 OSGi 将不相关的代码部分分成单独的包。这确保了正确的代码封装,甚至允许热交换特定的包。
这样做的一个好处是任何与特定数据库相关的代码都被隔离到一个单独的包中。它还允许我们为新目的地简单地放入一个新包,并无缝集成新代码。它还确保如果单个后端数据源关闭,对其他数据源的请求不受影响。一个复杂的问题是,这些捆绑软件中的每一个都由单独的 ClassLoader 加载。
我们想开始将 JPA 用于我们正在构建的新目的地。以前,我们一直使用 JDBC 直接发送 SQL 查询和更新。
我们已经研究过 Hibernate 4,但它似乎是建立在假设一切都使用单个 ClassLoader 加载的基础上的。在不同包的 ClassLoader 之间切换似乎不是它可以始终如一地处理的事情。
虽然 Hibernate 5 似乎已经纠正了这个问题,但我找到的所有教程/文档都掩盖了配置的复杂性。最简单的假设是您使用的是单个应用程序级配置文件,这根本不适合我们的需求。
所以,我的问题是:
- Hibernate 5 是否能正确处理连接到多个数据库,每个数据库的配置/POJos 由不同的 ClassLoader 加载?
- 我们如何配置 Hibernate 以使用多个 ClassLoader 连接到多个数据库?
- 是否有其他 JPA 框架可能更适合我们的特定需求?
【问题讨论】:
标签: java hibernate jpa osgi classloader