今天我们发布了 Hibernate OGM 5.1.0.Beta1
和 5.0.3.Final
。
在 5.1 版本中,我们引入了一个惊人的新特性:支持使用 Java Hot Rod 客户端将数据存储在 Infinispan 服务器 中,同时将数据编码为 Google Protobuffers,并自动处理所有复杂的映射。
Hot Rod 支持?
Hot Rod 是 Infinispan 服务器“智能客户端”使用的协议,这意味着客户端足够智能,能够实现一系列性能优化技巧;例如,它能够根据请求数据(或写入数据)连接到集群中最合适的服务器,从而大大降低操作延迟。
虽然 Infinispan 最为人所知的是一个高性能的键/值存储,但当涉及到远程客户端时,建议将数据编码为 Google Protobuffers。这允许在不破坏现有数据的解码的情况下演变存储模式,允许服务器端查询和函数解释存储的数据,并允许与其他编程语言的 Hot Rod 客户端进行互操作。例如,它可以读取我们使用 Java 客户端编写的 POJOs,然后从 Python 客户端读取,并将数据转换为合理的 Python 对象。
不幸的是,处理 Hot Rod 客户端可能会很繁琐!
-
它是一个键/值存储:手动处理对象关系容易出错
-
您需要为所有实体编写并维护匹配的 Protobuf 模式
-
您必须设置 Protostream 并将其配置为 Hot Rod 客户端的 Marshaller
最重要的是,这需要新的技能。
您将不得不学习如何最佳定义 Protobuf 模式,以及如何使用 Protostream。最后,您还需要学习 Hot Rod API 以及如何充分利用其高级标志来调整每个操作,并仔细考虑您想要如何表示关系。
使用熟悉的东西代替?
Hibernate OGM 可以自动化繁琐的部分,让您专注于最重要的:存储您的对象。
添加此依赖项
<dependency>
<groupId>org.hibernate.ogm</groupId>
<artifactId>hibernate-ogm-infinispan</artifactId>
<version>5.1.0.Beta1</version>
</dependency>
在您的 persistence.xml 中启用 OGM 的 Hot Rod 超级功能
<?xml version="1.0"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
version="2.0">
<persistence-unit name="ogm-with-hotrod">
<provider>org.hibernate.ogm.jpa.HibernateOgmPersistence</provider> (1)
<properties>
<property name="hibernate.ogm.datastore.provider"
value="infinispan_remote" /> (2)
<property name="hibernate.ogm.infinispan_remote.client.server_list"
value="127.0.0.1:11222" /> (3)
</properties>
</persistence-unit>
</persistence>
1 | 选择 Hibernate OGM 作为 JPA 提供程序 |
2 | 选择 infinispan_remote 作为数据存储 |
3 | 包含 Hot Rod 配置属性,只需替换/添加 OGM 前缀。 |
启动 Hibernate OGM!
EntityManagerFactory emf = Persistence.createEntityManagerFactory("ogm-with-hotrod");
这足以创建 Hibernate EntityManager
,它知道如何执行模型 CRUD 操作,将您的数据编码和解码到 Hot Rod!
这将
-
启动和管理 Hot Rod 客户端,使其初始化与您的 Infinispan 服务器 的连接
-
为您的模型生成合适的 Protobuf 模式
-
将模式部署到 Infinispan 服务器
-
使用 Protostream 初始化所有内部 Protobuf 编码器和解码器
-
正确实现序列/自动递增(这是原生 Hot Rod 缺少的特性)
存在一些限制。
最值得注意的是,您将需要手动创建在您的 Infinispan 服务器 配置中所需的缓存定义,因为目前这个操作不能通过 Hot Rod 执行(但友好的 Infinispan 团队正在努力解决这个问题)。
另一个限制是,目前我们不支持在此后端运行 JPQL 查询。
您可以在我们的 Infinispan 集成参考指南 中找到更多有趣的细节;我包括了一节来帮助您选择 Infinispan 嵌入式和 Infinispan 远程(通过 Hot Rod)之间的区别。
当然,还有更多修复被纳入了这次发布;要获取完整概述,请参阅 5.1.0.Beta1 变更日志。
Hibernate OGM 5.0.3.Final
我们还发布了 Hibernate OGM 版本 5.0.3.Final
,以解决单个映射问题:非常感谢 Simone Manetti 报告 OGM-1198,现在已在本版本中解决。
以下是完整的 5.0.3.Final 变更日志。
如果您需要从 5.0 版本之前升级,您可以在 迁移指南 中找到帮助。
接下来是什么?
版本 5.1 现在已经功能齐全。我们期待您的反馈!