NoSQL-databases zijn een hoeksteen geworden van moderne applicatieontwikkeling, waarbij schaalbaarheid en flexibiliteit worden geboden voor het verwerken van diverse gegevenstypen. Voor veel Java-ontwikkelaars kan het echter complex en tijdrovend zijn om te integreren met NoSQL-databases. Hier komt Eclipse JNoSQL in beeld, dat een naadloze en gestandaardiseerde manier biedt om uw Java-applicaties te verbinden met verschillende NoSQL-databases.
Dit artikel onderzoekt hoe Eclipse JNoSQL 1.1.3 het integreren van databases vereenvoudigt, de productiviteit van ontwikkelaars verbetert en flexibiliteit biedt over verschillende databases. We zullen u ook begeleiden bij een praktisch voorbeeld met behulp van Quarkus en ArangoDB om de functies te demonstreren.
Waarom Java-ontwikkelaars zich zouden moeten bekommeren om Eclipse JNoSQL
Voor veel ontwikkelaars betekent werken met NoSQL-databases het leren van databasespecifieke API’s, wat kan leiden tot gefragmenteerde, niet draagbare code. Eclipse JNoSQL elimineert deze uitdagingen door te bieden:
- Gebruiksgemak: Met intuïtieve annotaties zoals
@Entity
,@Id
en@Column
kunt u Java-objecten in enkele seconden koppelen aan NoSQL-collecties. - Flexibiliteit: Schakel tussen NoSQL-databases (bijv. Redis, MongoDB, ArangoDB, Oracle NoSQL) zonder uw applicatiecode te wijzigen.
- Normen Compliance: Implementeert de Jakarta Data en Jakarta NoSQL specificaties, waardoor een toekomstbestendige, draagbare oplossing wordt gegarandeerd.
- Integratie-Klaar: Werkt naadloos samen met Jakarta EE en MicroProfile-componenten, waarbij CDI wordt benut voor afhankelijkheidsinjectie en configuratiemanagement.
Wat is nieuw in Eclipse JNoSQL 1.1.3
Eclipse JNoSQL heeft zojuist versie 1.1.3 uitgebracht, met nieuwe functies, bugfixes en prestatieverbeteringen voor zijn al robuuste ecosysteem. Deze release is een belangrijke mijlpaal in het vergemakkelijken van de interacties van Java-ontwikkelaars met NoSQL-databases. In dit artikel zullen we de doelstellingen van Eclipse JNoSQL en de nieuwe functies die in deze versie zijn geïntroduceerd verkennen en een praktisch voorbeeld geven van hoe het kan worden gebruikt met Quarkus en ArangoDB.
Eclipse JNoSQL heeft als doel de integratie van Java-toepassingen met NoSQL-databases te vereenvoudigen door een uniforme API en architectuur te bieden. Door zich te houden aan de specificaties van Jakarta EE, stelt JNoSQL ontwikkelaars in staat om naadloos samen te werken met verschillende NoSQL-databases – of het nu gaat om sleutel-waarde-, document-, grafiek- of kolom-familiedatabases.
- Interoperabiliteit: Deze abstractie verbergt databasespecifieke complexiteiten, waardoor het eenvoudig is om te schakelen tussen databases zoals MongoDB, Redis, ArangoDB en Oracle NoSQL.
- Specificatie-gedreven: Implementeert de Jakarta Data- en Jakarta NoSQL-specificaties, en biedt een gestandaardiseerde manier om met NoSQL-databases te werken.
- Integratie met het Java-ecosysteem: Benut CDI voor afhankelijkheidsinjectie en Eclipse MicroProfile voor configuratie, en zorgt voor compatibiliteit met moderne Java-frameworks zoals Quarkus en Spring Boot.
Beperkingen en Overwegingen voor Eclipse JNoSQL
Hoewel Eclipse JNoSQL aanzienlijke voordelen biedt voor de integratie van NoSQL-databases, is het essentieel om enkele nadelen te overwegen om een evenwichtig perspectief te behouden:
- Leercurve voor Nieuwe Standaarden: Ontwikkelaars die niet bekend zijn met Jakarta EE of MicroProfile hebben mogelijk tijd nodig om de specificaties en API’s die door JNoSQL worden gebruikt te begrijpen en zich aan te passen.
- Database-Specifieke Functies: Hoewel JNoSQL gemeenschappelijke NoSQL-bewerkingen abstraheert, ondersteunt het mogelijk niet volledig geavanceerde, database-specifieke mogelijkheden zonder aanvullende aanpassingen.
- Gemeenschap en Ecosysteem: Als een relatief gespecialiseerd gereedschap zijn het ecosysteem en de gemeenschapsondersteuning kleiner dan bij bredere Java-frameworks zoals Hibernate of Spring Data.
- Prestatieafstemming: Gegeneraliseerde API’s kunnen een lichte prestatie-overhead introduceren in vergelijking met native, database-specifieke bibliotheken, vooral voor high-performance toepassingen.
Het begrijpen van deze beperkingen helpt ontwikkelaars om geïnformeerde beslissingen te nemen en te overwegen waar JNoSQL het beste past bij hun projecten.
Jakarta EE-specificaties ondersteund door Eclipse JNoSQL
Eclipse JNoSQL ondersteunt Jakarta Data en Jakarta NoSQL, twee kritieke specificaties in het Jakarta EE-ecosysteem.
Jakarta Data
Het biedt een standaard API voor toegang tot en beheer van gegevensopslagplaatsen, waardoor ontwikkelaars gemakkelijk CRUD-operaties kunnen uitvoeren. Het richt zich op het vereenvoudigen van paginering, sortering en dynamische queries.
Jakarta NoSQL
Het definieert een uniforme API voor interacties met NoSQL-databases. Het biedt annotaties zoals @Entity
, @Id
en @Column
voor het koppelen van Java-klassen aan NoSQL-collecties en het vereenvoudigen van databasebewerkingen.
Deze specificaties verminderen standaardcode en bevorderen draagbaarheid over databases, waardoor ze essentieel zijn voor Java-ontwikkelaars.
De nieuwste release, versie 1.1.3, richt zich op het verbeteren van betrouwbaarheid, beveiliging en prestaties, terwijl het spannende nieuwe functies introduceert:
- Redis: Verbeterde ondersteuning voor Redis Sentinel voor verbeterde beschikbaarheid.
- ArangoDB: Beveiligings- en sleutelbeheerupdates.
- Oracle NoSQL: Nieuwe referentie-opties voor betere integratie.
- JNoSQL Lite: Toegevoegde ondersteuning voor opname, verbetering van de traceerbaarheid.
- Driver-updates: Verbeterde drivers voor verschillende NoSQL-databases.
- CDI Lite: Nu heeft het ondersteuning voor Java-record
Om de kracht van Eclipse JNoSQL 1.1.3 te demonstreren, zullen we een Quarkus-toepassing maken die “Doelen” beheert met behulp van ArangoDB. Dankzij de Jakarta EE-specificaties kan er met minimale wijzigingen worden overgeschakeld naar andere NoSQL-databases zoals MongoDB of Oracle NoSQL.
Stapsgewijs
Stap 1: Opzetten van Quarkus
Start uw Quarkus-project met behulp van de Quarkus Starter UI, waarbij u de volgende extensies selecteert:
- REST
- JSON
- ARC (CDI Lite)
- ArangoDB Driver
Uw pom.xml
moet het volgende bevatten:
<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>
Stap 2: Implementatie van Databaseconnectiviteit
Stel uw databaseverbinding in in application.properties
:
jnosql.arangodb.host=localhost:8529
jnosql.document.database=goals
jnosql.keyvalue.database=goals
Start een ArangoDB-instantie lokaal met behulp van Docker:
docker run -e ARANGO_NO_AUTH=1 -d --name arangodb-instance -p 8529:8529 -d arangodb/arangodb
Maak een database met de naam goals
en een collectie Goal
in de ArangoDB-web-UI.
Stap 3: Modelleren van uw gegevens
Gebruik de recordfunctie van Java met 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) {} (
Stap 4: Instellen van een Repository
Definieer een repository met behulp van Jakarta Data:
public interface NewYearWishes extends BasicRepository<Goal, String> {}
Stap 5: Implementatie van een Servicelaag
Maak een servicelaag aan om bedrijfslogica te beheren:
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);
}
}
Stap 6: Maken van REST-eindpunten
Definieer een REST-bron:
"/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));
}
}
Stap 7: Testen van de toepassing
Zo test u uw toepassing met behulp van 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
Doelenlijst:
curl http://localhost:8080/goals?page=1&size=10
Conclusie
Eclipse JNoSQL 1.1.3 toont zijn toewijding aan het naadloos maken van NoSQL-database-interacties voor Java-ontwikkelaars. Verbeterde functies en integratiemogelijkheden stellen ontwikkelaars in staat om flexibele en schaalbare applicaties te bouwen. Voor meer details, kijk op de volledige voorbeeld op GitHub.
Source:
https://dzone.com/articles/nosql-database-integration-in-java-with-eclipse-jnosql-1-1-3