gpt4 book ai didi

java - 使用 Hibernate/JPA 和多个 ClassLoader 来访问多个数据库

转载 作者:行者123 更新时间:2023-12-02 09:37:05 25 4
gpt4 key购买 nike

我们的应用程序是一个中间层应用程序,它提供了十几个左右的前端应用程序,可以访问后端的几十个数据库(和其他数据源)。

我们决定使用 OSGi 将不相关的代码分成单独的包。这确保了正确的代码封装,甚至允许特定 bundle 的热交换。

这样做的一个优点是,与特定数据库交互的任何代码都被隔离到单个包中。它还允许我们简单地将新的 bundle 放入新的目的地,并无缝集成新的代码。它还确保如果单个后端数据源发生故障,对其他数据源的请求不受影响。一个复杂的问题是,每个包都是由一个单独的类加载器加载的。

我们希望开始将 JPA 用于我们正在构建的新目的地。以前,我们一直直接使用 JDBC 来发送 SQL 查询和更新。

我们已经研究了 Hibernate 4,但它似乎是建立在所有内容都使用单个 ClassLoader 加载的假设之上的。在不同包的类加载器之间切换似乎无法一致地处理。

虽然 Hibernate 5 似乎已经纠正了这个问题,但我找到的所有教程/文档都掩盖了配置的复杂性。大多数人只是假设您使用的是单个应用程序级配置文件,这根本无法满足我们的需求。

所以,我的问题是:

  1. Hibernate 5 是否可以正确处理与多个数据库的连接,每个数据库的配置/POJos 由不同的类加载器加载?
  2. 我们如何配置 Hibernate 以使用多个类加载器连接到多个数据库?
  3. 还有其他 JPA 框架可能更适合我们的特定需求吗?

最佳答案

Hibernate 很好,但对于 OSGi 使用,您还需要一个中介。在 OSGi 规范中,这是由 OSGi JPA service spec 定义的。 。它定义了如何连接到 OSGi 中的 JPA 提供程序,而无需对其进行硬引用。

此规范由 Aries JPA 实现。它还提供了对蓝图和 declarative services 的额外支持。还有Aries transaction control服务采用类似的方法来支持 OSGi 中的 JPA 和事务,它也使用 Aries JPA 的核心,但在用法上有点不同。

您可能需要的最后一部分是 pax-jdbc它允许仅通过配置来定义 XA 数据源。示例已经使用了它。

要轻松开始,您可以使用 Apache Karaf它具有上述所有功能。

Aries JPA 允许在同一 OSGi 应用程序中使用不同的数据库。

关于java - 使用 Hibernate/JPA 和多个 ClassLoader 来访问多个数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57415453/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com