我们的应用程序是一个中间层应用程序,它提供了十几个左右的前端应用程序,可以访问后端的几十个数据库(和其他数据源)。
我们决定使用OSGi将不相关的代码位分离到单独的包中。这确保了正确的代码封装,甚至允许特定捆绑包的热交换。
这样做的一个优点是,与特定数据库对话的任何代码都被隔离到单个捆绑包中。它还允许我们简单地为新的目的地插入新的捆绑包,并无缝地集成新代码。它还确保了如果单个后端数据源关闭,对其他数据源的请求不会受到影响。一个复杂的问题是,这些包中的每一个都由一个单独的类加载器加载。
我们想开始在我们正在建设的新目的地使用JPA。以前,我们一直使用JDBC直接发送SQL查询和更新。
我们已经研究了Hibernate 4,但它似乎是建立在使用单个ClassLoader加载所有内容的假设之上的。在不同捆绑包的ClassLoader之间切换似乎不是它可以一致处理的事情。
虽然Hibernate 5似乎已经纠正了这个问题,但我找到的所有教程/文档都掩盖了配置的复杂性。最简单的假设是您使用的是单个应用程序级配置文件,这根本不适合我们的需要。
所以,我的问题是:
Hibernate很好,但对于OSGi的使用,您还需要一个中介。在OSGi规范中,这是由OSGi JPA服务规范定义的。它定义了如何连接到OSGi中的JPA提供者,而无需硬引用。
该规范由Aries JPA实现。它还为蓝图和声明性服务提供了额外的支持。还有Aries事务控制服务,它采用类似的方法来支持OSGi中的JPA和事务,它也使用Aries JPA的核心,但用法有点不同。
您可能需要的最后一部分是pax jdbc,它允许仅通过配置定义XA数据源。示例已经在使用它。
为了便于入门,您可以使用Apache Karaf,它具有上述所有功能。
Aries JPA允许在同一个OSGi应用程序中使用不同的数据库。
问题内容: 我正在尝试配置Spring + Hibernate + JPA以使用两个数据库(MySQL和MSSQL)。 我的datasource-context.xml: 每个persistence.xml包含一个单元,如下所示: PersistenceUnitManager导致以下异常: 如果只留下一个没有列表的persistence.xml,则每个列表都可以正常工作,但我需要2个单元… 我还尝
问题内容: 我有一个Spring + Hibernate + JPA应用程序。用户登录时,可以从要连接的数据库列表中进行选择(这是要求)。所有数据库都有相同的架构,因此将使用相同的实体和DAO。 现在,我有一个EntityManager(目前正在使用一个数据库),它被注入到DAO中,如下所示: 有什么方法可以让DAO根据从服务层接收到的参数/属性自动接收entityManager(由Spring管
问题内容: 我有一个需要配置基于Spring的应用程序以与两个数据库一起使用的要求。我们有两个数据库,一个用于保存实时数据,另一个数据库用作数据仓库,并包含存档的数据(其结构与实时数据库完全相同)。 为简单起见,假设存在搜索产品的请求。应用程序应该做的是在实时数据库中搜索产品详细信息,如果找不到,它将检查存档数据库。 如果需要配置这样的设置,是否仍需要配置数据源,搜索代码是否必须使用第一个数据源来
问题内容: 有人知道如何在hibernate配置中添加另一个数据源,以及如何在自己的DAO中将Spring配置为其自动注入该数据源吗? 这是我的带有一个数据源的代码,可以完美运行,但是我不知道如何添加另一个数据源。我想添加另一个数据源,该数据源是具有与实际数据库不同的表的数据库。 DAO EXAMPLE 问题答案: 我假定你有一组应使用的DAO的和适当的,而其他人应该使用不同的和基于。当然,你需要
我必须使用JPA+Hibernate做一个项目,其中我使用了3种方言:mysql5innodbdealication、mssql2012dealication和oracle12cdealication。 现在我有一个规范,它告诉我对于来自: > Oracle数据库,我必须使用NVARCHAR2(LENGTH)数据类型 MySql数据库,我必须使用VARCHAR(LENGTH)数据类型 @colum
问题内容: 我的申请有问题。要恢复该问题,我必须将应用程序从jboss 4迁移到jboss 5。 在战争部署期间,我遇到了以下错误: 经过多次搜索后,我发现此错误在这里,因为我多次在同一个包中找到同一个类。曾经在一个依赖包中(来自我的pom.xml),一次是由jboss提供的。 因此,为解决此问题,我为依赖项提供了一个“提供”的范围。 但是我不明白为什么这种解决方案有效。我认为在一个应用程序中有几