Les bases de données NoSQL sont devenues un pilier du développement d’applications modernes, offrant une évolutivité et une flexibilité pour gérer différents types de données. Cependant, pour de nombreux développeurs Java, l’intégration avec les bases de données NoSQL peut être complexe et chronophage. C’est là qu’intervient Eclipse JNoSQL, en offrant une manière fluide et standardisée de connecter vos applications Java à diverses bases de données NoSQL.
Cet article explore comment Eclipse JNoSQL 1.1.3 simplifie l’intégration des bases de données, améliore la productivité des développeurs et offre une flexibilité entre différentes bases de données. Nous vous guiderons également à travers un exemple pratique utilisant Quarkus et ArangoDB pour démontrer ses fonctionnalités.
Pourquoi les développeurs Java devraient s’intéresser à Eclipse JNoSQL
Pour de nombreux développeurs, travailler avec des bases de données NoSQL implique d’apprendre des API spécifiques à chaque base de données, ce qui peut conduire à un code fragmenté et non portable. Eclipse JNoSQL élimine ces défis en offrant :
- Simplicité d’utilisation : Avec des annotations intuitives telles que
@Entity
,@Id
et@Column
, vous pouvez mapper des objets Java à des collections NoSQL en quelques secondes. - Flexibilité : Passez d’une base de données NoSQL à une autre (par exemple, Redis, MongoDB, ArangoDB, Oracle NoSQL) sans modifier votre code d’application.
- Conformité aux normes : Implémente les spécifications Jakarta Data et Jakarta NoSQL, assurant une solution portable et pérenne.
- Prêt pour l’intégration: Fonctionne parfaitement avec les composants Jakarta EE et MicroProfile, en tirant parti de CDI pour l’injection de dépendances et la gestion de la configuration.
Quoi de neuf dans Eclipse JNoSQL 1.1.3
Eclipse JNoSQL vient de publier la version 1.1.3, apportant de nouvelles fonctionnalités, des corrections de bugs et des améliorations de performances à son écosystème déjà robuste. Cette version constitue une étape significative dans la simplification des interactions des développeurs Java avec les bases de données NoSQL. Dans cet article, nous explorerons les objectifs d’Eclipse JNoSQL et les nouvelles fonctionnalités introduites dans cette version, et fournirons un exemple pratique de son utilisation avec Quarkus et ArangoDB.
Eclipse JNoSQL vise à simplifier l’intégration des applications Java avec les bases de données NoSQL en fournissant une API et une architecture unifiées. En respectant les spécifications de Jakarta EE, JNoSQL permet aux développeurs de travailler de manière transparente avec diverses bases de données NoSQL – qu’il s’agisse de bases de données clé-valeur, document, graphiques ou en colonnes.
- Interopérabilité: Cette abstraction simplifie les complexités spécifiques à chaque base de données, facilitant ainsi le passage entre des bases de données telles que MongoDB, Redis, ArangoDB et Oracle NoSQL.
- Basée sur les spécifications: Implémente les spécifications Jakarta Data et Jakarta NoSQL, offrant une manière standardisée de travailler avec des bases de données NoSQL.
- Intégration avec l’écosystème Java: Tire parti de CDI pour l’injection de dépendances et d’Eclipse MicroProfile pour la configuration, garantissant la compatibilité avec les frameworks Java modernes tels que Quarkus et Spring Boot.
Limitations and Considerations for Eclipse JNoSQL
Alors que Eclipse JNoSQL offre des avantages importants pour l’intégration des bases de données NoSQL, il est essentiel de prendre en compte quelques inconvénients pour maintenir une perspective équilibrée :
- Courbe d’apprentissage pour de nouvelles normes : Les développeurs peu familiers avec Jakarta EE ou MicroProfile peuvent avoir besoin de temps pour comprendre et s’adapter aux spécifications et aux API utilisées par JNoSQL.
- Fonctionnalités spécifiques à la base de données : Bien que JNoSQL abstraie les opérations NoSQL courantes, il peut ne pas prendre en charge pleinement les capacités avancées spécifiques à la base de données sans personnalisation supplémentaire.
- Communauté et écosystème : En tant qu’outil relativement spécialisé, son écosystème et le support de la communauté sont plus petits que des frameworks Java plus larges comme Hibernate ou Spring Data.
- Optimisation des performances : Les API généralisées peuvent introduire une légère surcharge de performance par rapport aux bibliothèques natives spécifiques à la base de données, en particulier pour les applications haute performance.
Comprendre ces limitations aide les développeurs à prendre des décisions éclairées et à déterminer où JNoSQL s’intègre le mieux dans leurs projets.
Spécifications Jakarta EE prises en charge par Eclipse JNoSQL
Eclipse JNoSQL prend en charge Jakarta Data et Jakarta NoSQL, deux spécifications critiques dans l’écosystème de Jakarta EE.
Jakarta Data
Il fournit une API standard pour accéder et gérer des référentiels de données, permettant aux développeurs d’effectuer facilement des opérations CRUD. Il se concentre sur la simplification de la pagination, du tri et des requêtes dynamiques.
Jakarta NoSQL
Il définit une API uniforme pour les interactions avec les bases de données NoSQL. Il fournit des annotations telles que @Entity
, @Id
et @Column
pour mapper les classes Java aux collections NoSQL et simplifier les opérations de base de données.
Ces spécifications réduisent le code redondant et favorisent la portabilité entre les bases de données, les rendant essentielles pour les développeurs Java.
La dernière version, version 1.1.3, met l’accent sur l’amélioration de la fiabilité, de la sécurité et des performances tout en introduisant de nouvelles fonctionnalités excitantes :
- Redis : Prise en charge améliorée de Redis Sentinel pour une disponibilité accrue.
- ArangoDB : Mises à jour de la sécurité et de la gestion des clés.
- Oracle NoSQL : Nouvelles options de certificats pour une meilleure intégration.
- JNoSQL Lite : Ajout de la prise en charge de l’enregistrement, améliorant la traçabilité.
- Mises à jour des pilotes : Amélioration des pilotes pour différentes bases de données NoSQL.
- CDI Lite : Il prend désormais en charge les enregistrements Java
Pour démontrer la puissance d’Eclipse JNoSQL 1.1.3, nous allons créer une application Quarkus qui gère des « Goals » en utilisant ArangoDB. Grâce aux spécifications Jakarta EE, le passage à d’autres bases de données NoSQL comme MongoDB ou Oracle NoSQL peut être fait avec un minimum de modifications.
Étapes par étapes
Étape 1 : Configuration de Quarkus
Commencez votre projet Quarkus en utilisant le Quarkus Starter UI, en sélectionnant les extensions suivantes :
- REST
- JSON
- ARC (CDI Lite)
- ArangoDB Driver
Votre pom.xml
doit inclure :
<dependencies>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-rest</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-rest-jsonb</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-arc</artifactId>
</dependency>
<dependency>
<groupId>io.quarkiverse.jnosql</groupId>
<artifactId>quarkus-jnosql-document-arangodb</artifactId>
<version>3.3.2</version>
</dependency>
<!-- Test dependencies -->
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-junit5</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>rest-assured</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
Étape 2 : Mise en place de la connectivité de la base de données
Définissez la connexion de votre base de données dans application.properties
:
jnosql.arangodb.host=localhost:8529
jnosql.document.database=goals
jnosql.keyvalue.database=goals
Exécutez une instance ArangoDB en local en utilisant Docker :
docker run -e ARANGO_NO_AUTH=1 -d --name arangodb-instance -p 8529:8529 -d arangodb/arangodb
Créez une base de données nommée goals
et une collection Goal
dans l’interface web d’ArangoDB.
Étape 3 : Modélisation de vos données
Utilisez la fonction d’enregistrement de Java avec CDI Lite :
import jakarta.json.bind.annotation.JsonbProperty;
import jakarta.json.bind.annotation.JsonbPropertyOrder;
import jakarta.nosql.Column;
import jakarta.nosql.Entity;
import jakarta.nosql.Id;
import java.util.List;
"id", "title", "description", "priority", "tasks"}) ({
public record Goal(
"id") String id, (
"title") String title, (
"description") String description, (
"priority") int priority, (
"tasks") List<String> tasks) {} (
Étape 4 : Configuration d’un dépôt
Définissez un dépôt en utilisant Jakarta Data :
public interface NewYearWishes extends BasicRepository<Goal, String> {}
Étape 5 : Mise en place d’une couche de service
Créez une couche de service pour gérer la logique métier :
public class GoalService {
private final NewYearWishes newYearWishes;
public GoalService( (DatabaseType.DOCUMENT) NewYearWishes newYearWishes) {
this.newYearWishes = newYearWishes;
}
public List<Goal> findGoals(int page, int size) {
PageRequest pageRequest = PageRequest.ofPage(page).size(size);
return newYearWishes.findAll(pageRequest, Order.by(Sort.asc("priority"))).content();
}
public Goal save(Goal goal) {
return newYearWishes.save(goal);
}
public Optional<Goal> findById(String id) {
return newYearWishes.findById(id);
}
}
Étape 6 : Création de points de terminaison REST
Définissez une ressource REST :
"/goals") (
MediaType.APPLICATION_JSON) (
MediaType.APPLICATION_JSON) (
public class GoalResource {
private final GoalService goalService;
public GoalResource(GoalService goalService) {
this.goalService = goalService;
}
public List<Goal> goals( ("page") int page, ("size") int size) {
return goalService.findGoals(page, size);
}
public Goal create(Goal goal) {
return goalService.save(goal);
}
"{id}") (
public Goal findById( ("id") String id) {
return goalService.findById(id).orElseThrow(() -> new WebApplicationException("Goal not found", 404));
}
}
Étape 7 : Test de l’application
Voici comment tester votre application en utilisant curl
:
curl -X POST -H "Content-Type: application/json" \
-d '{
"title": "Learn JNoSQL",
"description": "Master NoSQL with JNoSQL",
"priority": 1,
"tasks": ["Read documentation", "Write sample code"]
}' \
http://localhost:8080/goals
curl -X POST -H "Content-Type: application/json" \
-d '{
"title": "Get Fit",
"description": "Adopt a healthier lifestyle",
"priority": 2,
"tasks": ["Exercise daily", "Eat balanced meals", "Stay hydrated"]
}' \
http://localhost:8080/goals
curl -X POST -H "Content-Type: application/json" \
-d '{
"title": "Learn Quarkus",
"description": "Explore Quarkus framework features",
"priority": 3,
"tasks": ["Set up Quarkus", "Create REST endpoints", "Integrate JNoSQL"]
}' \
http://localhost:8080/goals
Liste des objectifs :
curl http://localhost:8080/goals?page=1&size=10
Conclusion
Eclipse JNoSQL 1.1.3 montre son engagement à rendre les interactions avec les bases de données NoSQL transparentes pour les développeurs Java. Les fonctionnalités améliorées et les capacités d’intégration renforcées permettent aux développeurs de construire des applications flexibles et évolutives. Pour plus de détails, consultez l’exemple complet sur GitHub.
Source:
https://dzone.com/articles/nosql-database-integration-in-java-with-eclipse-jnosql-1-1-3