本文将详细介绍 Jakarta EE 在数据世界中的后续步骤,以及它在数据源之外更多地工作的技术。
毫无疑问,应用程序周围数据的重要性。我们经常谈论无状态应用程序,它是我们委托应用程序状态的数据。如果架构是头脑,那么信息就是心脏。
本文将详细介绍 Jakarta EE 在数据世界中的后续步骤,以及它在数据源之外更多地工作的技术。换句话说,这是关于如何以不可知论的方式围绕存储库和CQRS等数据应用实践。
我们在规范世界中拥有JPA一段时间,以使您在关系数据库世界中的生活更轻松。我们很高兴制定一个规范以使 NoSQL 更容易使用:Jakarta NoSQL。
Jakarta NoSQL 的核心原则是标准化行为,在数据库之间进行更改时降低认知负载,同时具有足够的可扩展性以允许特定供应商的特定行为。在这个时候,我们很高兴地宣布了一个新版本,Jakarta NoSQL 版本 1.0.0-b4。
雅加达 NoSQL 版本 1.0.0-b4
这个版本有几个库更新、错误修复和两个新功能。包含构建器模式以在查询中创建和组合条件以突出显示一个。因此,Jakarta NoSQL 有两种创建数据库请求的方法:使用流式 API 和使用构建器模式。我们不会在这里介绍该模式之间的区别,但您可以在我的题为“Fluent-API:使用 Fluent API 创建更简单、更直观的代码”的文章中进一步了解。.
为了演示此资源,我们将创建一个Worker实体,其中Worker将具有五个属性:id、name、city、age和gender。我们将使用 MongoDB 作为数据源。
第一步是运行 MongoDB 数据库。您可以使用 Docker 轻松完成通过运行以下命令:
壳
docker run -d --name mongodb-instance -p 27017:27017 mongo
下一步是创建一个简单的 Java SE 项目,我们将在其中包含运行应用程序CDI、JSONB和Eclipse Microprofile Configurations的最低要求。
此外,我们将包括 JNoSQL,即 Jakarta NoSQL 参考实现。此版本的一个新功能是mongodb-extension,您可以在其中探索这个 NoSQL 供应商的更多特殊行为。
XML
org.eclipse.jnosql.mapping
mongodb-extension
${project.version}
对于与数据库的应用程序连接,Jakarta NoSQL依赖 Eclipse MicroProfile 配置来探索十二个因素中的更多,主要是配置一。
我们将注入并使其可用于 CDI。
@ApplicationScoped
public class MongoDBProducer {
@Inject
@ConfigProperty(name = "document")
private DocumentCollectionManager manager;
@Produces
public MongoDBDocumentCollectionManager getManager() {
return (MongoDBDocumentCollectionManager) manager;
}
public void destroy(@Disposes DocumentCollectionManager manager) {
manager.close();
}
}
我们将创建 MongoDB 连接。如果没有密码和用户,可覆盖配置的优点是我们可以将几个在本地运行没有意义的属性放在生产环境中。
document=document
document.database=olympus
document.settings.jakarta.nosql.host=localhost:27017
document.provider=org.eclipse.jnosql.communication.mongodb.document.MongoDBDocumentConfiguration
我们有项目设置;然后,我们将使用 Worker 实体移动实体模型。在这里,我们可以看到与 JPA 的相似之处。在可能的情况下,该规范试图有相似之处,以便为 Java 开发人员提供一个可访问的入口。
@Entity
public class Worker {
@Id
@Convert(ObjectIdConverter.class)
private String id;
@Column
private String name;
@Column
private String city;
@Column
private int age;
@Column
private int dailyHours;
@Column
private Gender gender;
//…
}
下一步是创建一个特定的查询,我们将在其中组合布尔条件,例如给工人:
• 我想退回三十岁以上的女性或三十五岁以上的男性。
public class App10 {
public static void main(String[] args) {
try (SeContainer container = SeContainerInitializer.newInstance().initialize()) {
Worker poliana = Worker.builder()
.age(30).name("Poliana")
.city("Salvador")
.gender(Gender.FEMALE)
.dailyHours(30).build();
Worker otavio = Worker.builder()
.age(35).name("Otavio")
.city("Salvador")
.gender(Gender.MALE)
.dailyHours(30).build();
DocumentTemplate template = container.select(DocumentTemplate.class).get();
template.insert(Arrays.asList(otavio, poliana));
DocumentCondition maleAfterThirty = and(eq("gender", Gender.MALE),
gte("age", 30));
DocumentCondition femaleAfterThirty = and(eq("gender", Gender.FEMALE),
gte("age", 30));
final DocumentQuery query = DocumentQuery.builder()
.from("Worker")
.sort(asc("name"))
.where(or(maleAfterThirty, femaleAfterThirty))
.build();
Stream<Worker> stream = template.select(query);
List<Worker> workers = stream.collect(Collectors.toList());
workers.forEach(System.out::println);
template.delete(Worker.class, otavio.getId());
template.delete(Worker.class, poliana.getId());
}
}
经过多次讨论以在 JPA 和 NoSQL 之间进行更多集成,社区决定创建一个新规范来围绕数据应用这些模式:Jakarta Data。
什么时候会有最终版本?
我们正在等待新的 Jakarta 规范配置。该提议是用 MicroProfile 配置替换我们正在使用的内容,并希望与两者兼容。在那之前,我们别无选择,只能等待。
结论
Jakarta NoSQL 正在帮助参与 Java 社区。它正在创建多个讨论,例如 Jakarta Data 规范,重点关注处理数据的重要性,并开始进行几次讨论以使 Java 开发人员的生活更轻松。




