NoSQLデータベースは、さまざまなデータ型を処理するための拡張性と柔軟性を提供し、現代のアプリケーション開発の基盤となっています。しかし、多くのJava開発者にとって、NoSQLデータベースとの統合は複雑で時間がかかることがあります。そこで、Eclipse JNoSQLが登場し、JavaアプリケーションをさまざまなNoSQLデータベースにシームレスかつ標準化された方法で接続する手段を提供しています。
この記事では、Eclipse JNoSQL 1.1.3がデータベース統合を簡素化し、開発者の生産性を向上させ、さまざまなデータベース間で柔軟性を提供する方法を探ります。また、QuarkusとArangoDBを使用した実践的な例を通じて、その機能を示します。
Java開発者がEclipse JNoSQLに関心を持つ理由
多くの開発者にとって、NoSQLデータベースを扱うことはデータベース固有のAPIを学ぶことを意味し、断片化された、非ポータブルなコードにつながる可能性があります。Eclipse JNoSQLは、次のような課題を解消することでこれらの課題を排除します:
- 使いやすさ:
@Entity
、@Id
、@Column
などの直感的な注釈を使用して、JavaオブジェクトをNoSQLコレクションに簡単にマッピングできます。 - 柔軟性:アプリケーションコードを変更せずにNoSQLデータベース(Redis、MongoDB、ArangoDB、Oracle NoSQLなど)間を切り替えることができます。
- 標準準拠:Jakarta DataおよびJakarta NoSQLの仕様を実装し、将来にわたってポータブルなソリューションを提供します。
- 統合準備完了: Jakarta EEおよびMicroProfileコンポーネントとシームレスに連携し、依存性注入と構成管理にCDIを活用します。
Eclipse JNoSQL 1.1.3の新機能
Eclipse JNoSQLは、新機能、バグ修正、パフォーマンスの改善をもたらすバージョン1.1.3をリリースしました。このリリースは、既に堅牢なエコシステムにさらなる進歩をもたらす重要なマイルストーンとなります。この記事では、Eclipse JNoSQLの目標とこのバージョンで導入された新機能について探求し、QuarkusとArangoDBとの使用方法の実践例を提供します。
Eclipse JNoSQLは、統一されたAPIとアーキテクチャを提供することで、JavaアプリケーションとNoSQLデータベースの統合を簡素化することを目指しています。Jakarta EE仕様に準拠することで、JNoSQLは、キー値、ドキュメント、グラフ、または列ファミリーデータベースなど、さまざまなNoSQLデータベースとシームレスに動作する開発者に力を与えます。
- 相互運用性: この抽象化は、MongoDB、Redis、ArangoDB、Oracle NoSQLなどのデータベース間を簡単に切り替えることを可能にし、データベース固有の複雑さを抽象化します。
- 仕様駆動: Jakarta DataおよびJakarta NoSQLの仕様を実装し、NoSQLデータベースとの作業を標準化された方法で行うことを提供します。
- Javaエコシステムとの統合: 依存性注入にCDIを活用し、構成にEclipse MicroProfileを使用することで、QuarkusやSpring BootなどのモダンなJavaフレームワークとの互換性を確保します。
Eclipse JNoSQLの制限事項と考慮事項
Eclipse JNoSQLはNoSQLデータベース統合において大きな利点を提供しますが、バランスの取れた視点を維持するためにいくつかの欠点を考慮することが重要です:
- 新しい標準に対する学習曲線:Jakarta EEやMicroProfileに不慣れな開発者は、JNoSQLが使用する仕様やAPIを理解し、適応するために時間が必要かもしれません。
- データベース固有の機能:JNoSQLは一般的なNoSQL操作を抽象化しますが、追加のカスタマイズなしには高度なデータベース固有の機能を完全にはサポートしない可能性があります。
- コミュニティとエコシステム:比較的専門的なツールとして、そのエコシステムとコミュニティのサポートは、HibernateやSpring Dataのような広範なJavaフレームワークに比べて小さいです。
- パフォーマンス調整:一般化されたAPIは、特に高パフォーマンスのアプリケーションにおいて、ネイティブなデータベース固有のライブラリと比較してわずかなパフォーマンスオーバーヘッドを引き起こす可能性があります。
これらの制限を理解することで、開発者は十分な情報に基づいた意思決定を行い、JNoSQLが自分のプロジェクトに最も適している場所を考慮できます。
Eclipse JNoSQLがサポートするJakarta EE仕様
Eclipse JNoSQLは、Jakarta EEエコシステムにおける2つの重要な仕様であるJakarta DataとJakarta NoSQLをサポートしています。
Jakarta Data
データリポジトリにアクセスし管理するための標準APIを提供し、開発者がCRUD操作を簡単に実行できるようにします。ページネーション、ソート、および動的クエリを簡素化することに重点を置いています。
ジャカルタ NoSQL
NoSQLデータベースとのインタラクションのための統一APIを定義しています。JavaクラスをNoSQLコレクションにマッピングし、データベース操作を簡素化するために、@Entity
、@Id
、および@Column
のようなアノテーションを提供します。
これらの仕様はボイラープレートコードを削減し、データベース間のポータビリティを促進し、Java開発者にとって不可欠です。
最新のリリース、バージョン 1.1.3では、信頼性、セキュリティ、パフォーマンスの向上に焦点を当て、新しいエキサイティングな機能を導入しています:
- Redis:可用性を向上させるためのRedis Sentinelのサポートを強化しました。
- ArangoDB:セキュリティとキー管理の更新。
- Oracle NoSQL:統合を改善するための新しい認証オプション。
- JNoSQL Lite:記録のサポートを追加し、トレース能力を向上させました。
- ドライバーの更新:さまざまなNoSQLデータベース向けのドライバーを改善しました。
- CDI Lite:Javaレコードのサポートが追加されました。
Eclipse JNoSQL 1.1.3の力を示すために、ArangoDBを使用して「目標」を管理するQuarkusアプリケーションを作成します。ジャカルタEE仕様のおかげで、MongoDBやOracle NoSQLのような他のNoSQLデータベースへの切り替えは最小限の変更で済みます。
ステップバイステップ
ステップ1:Quarkusの設定
Quarkusプロジェクトを開始するには、Quarkus Starter UIを使用し、以下の拡張機能を選択します:
- REST
- JSON
- ARC (CDI Lite)
- ArangoDBドライバー
あなたのpom.xml
には以下が含まれているべきです:
<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>
ステップ2:データベース接続の実装
application.properties
でデータベース接続を設定します:
jnosql.arangodb.host=localhost:8529
jnosql.document.database=goals
jnosql.keyvalue.database=goals
Dockerを使用してローカルでArangoDBインスタンスを実行します:
docker run -e ARANGO_NO_AUTH=1 -d --name arangodb-instance -p 8529:8529 -d arangodb/arangodb
ArangoDBのWeb UIでgoals
という名前のデータベースとGoal
というコレクションを作成します。
ステップ3:データのモデル化
CDI Liteを使用してJavaのレコード機能を利用します:
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) {} (
ステップ4:リポジトリの設定
Jakarta Dataを使用してリポジトリを定義します:
public interface NewYearWishes extends BasicRepository<Goal, String> {}
ステップ5:サービス層の実装
ビジネスロジックを管理するためのサービス層を作成します:
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);
}
}
ステップ6:RESTエンドポイントの作成
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));
}
}
ステップ7:アプリケーションのテスト
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
目標をリストする:
curl http://localhost:8080/goals?page=1&size=10
結論
Eclipse JNoSQL 1.1.3は、Java開発者にとってNoSQLデータベースとのインタラクションをシームレスにすることへのコミットメントを示しています。強化された機能と統合能力により、開発者は柔軟でスケーラブルなアプリケーションを構築することができます。詳細については、GitHubで完全な例をご覧ください。
Source:
https://dzone.com/articles/nosql-database-integration-in-java-with-eclipse-jnosql-1-1-3