قواعد البيانات NoSQL أصبحت ركنًا أساسيًا في تطوير التطبيقات الحديثة، تقدم قابلية التوسع والمرونة لمعالجة أنواع بيانات متنوعة. ومع ذلك، بالنسبة للعديد من مطوري Java، يمكن أن يكون التكامل مع قواعد البيانات NoSQL معقدًا ويستغرق وقتًا طويلاً. هنا تأتي إكليبس JNoSQL لتوفر طريقة سلسة وموحدة لربط تطبيقاتك Java بمختلف قواعد بيانات NoSQL.
يستكشف هذا المقال كيف يبسط إصدار Eclipse JNoSQL 1.1.3 التكامل مع قواعد البيانات، ويعزز إنتاجية المطور، ويوفر مرونة عبر قواعد بيانات مختلفة. كما سنقدم لك مثالًا عمليًا باستخدام Quarkus و ArangoDB لتوضيح ميزاته.
لماذا يجب على مطوري Java الاهتمام بـ Eclipse JNoSQL
بالنسبة للعديد من المطورين، العمل مع قواعد بيانات NoSQL يتضمن تعلم واجهات برمجة تطبيقات محددة لقاعدة البيانات، مما يمكن أن يؤدي إلى رمز غير متجانس وغير قابل للنقل. يزيل 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، جلبًا معه ميزات جديدة وإصلاحات للأخطاء وتحسينات في الأداء إلى بيئته القوية بالفعل. يعد هذا الإصدار محطة هامة في تسهيل تفاعل مطوري Java مع قواعد بيانات NoSQL. في هذا المقال، سنستكشف أهداف Eclipse JNoSQL والميزات الجديدة المُدخلة في هذا الإصدار ونقدم مثالًا عمليًا عن كيفية استخدامه مع Quarkus وArangoDB.
Eclipse JNoSQL تهدف إلى تبسيط تكامل تطبيقات Java مع قواعد البيانات NoSQL من خلال توفير واجهة برمجة تطبيقات موحدة وهندسة معمارية. من خلال الالتزام بمواصفات Jakarta EE، تمكن JNoSQL المطورين من العمل بسهولة مع مختلف قواعد البيانات NoSQL — سواء كانت قواعد بيانات المفتاح والقيمة، أو الوثيقة، أو الرسم البياني، أو عائلة الأعمدة.
- التوافقية: تجريد هذا يجرد من التعقيدات الخاصة بقاعدة البيانات، مما يجعل من السهل التبديل بين قواعد البيانات مثل MongoDB، وRedis، وArangoDB، وOracle NoSQL.
- مدفوع بالمواصفات: ينفذ مواصفات Jakarta Data وJakarta NoSQL، مقدمًا طريقة موحدة للعمل مع قواعد بيانات NoSQL.
- التكامل مع البيئة البرمجية في Java: يستفيد من CDI لحقن الاعتماد وEclipse MicroProfile للتكوين، مضمنًا التوافق مع أطر عمل Java الحديثة مثل Quarkus وSpring Boot.
القيود والاعتبارات لـ Eclipse JNoSQL
على الرغم من أن Eclipse JNoSQL يوفر فوائد كبيرة لإدماج قواعد بيانات NoSQL، إلا أنه من الضروري النظر في بعض العيوب للحفاظ على وجهة نظر متوازنة:
- منحنى التعلم للمعايير الجديدة: قد يحتاج المطورون الذين ليسوا على دراية بـ Jakarta EE أو MicroProfile إلى وقت لفهم والتكيف مع المواصفات وواجهات برمجة التطبيقات المستخدمة بواسطة JNoSQL.
- ميزات محددة لقواعد البيانات: على الرغم من أن JNoSQL يجرد العمليات الشائعة في قواعد البيانات NoSQL، إلا أنه قد لا يدعم بالكامل القدرات المتقدمة والمحددة لقاعدة البيانات دون إضافة تخصيصات إضافية.
- المجتمع والبيئة البيولوجية: كأداة متخصصة نسبيًا، فإن بيئتها ودعم مجتمعها أصغر من الأطر الأوسع مثل Hibernate أو Spring Data.
- ضبط الأداء: قد تسبب واجهات برمجة التطبيقات المعممة تكلفة أداء طفيفة مقارنة بالمكتبات الأصلية والمحددة لقاعدة البيانات، خاصة لتطبيقات الأداء العالي.
فهم هذه القيود يساعد المطورين على اتخاذ قرارات مستنيرة والنظر في المكان الأنسب لـ JNoSQL في مشاريعهم.
المواصفات التي تدعمها Jakarta EE المدعومة بواسطة Eclipse JNoSQL
يدعم Eclipse JNoSQL Jakarta Data و Jakarta NoSQL، وهما مواصفتان حيويتان في النظام البيئي لـ Jakarta EE.
Jakarta Data
يوفر واجهة برمجة تطبيقات قياسية للوصول إلى مستودعات البيانات وإدارتها، مما يتيح للمطورين أداء عمليات CRUD بسهولة. يركز على تبسيط الترقيم، والفرز، والاستعلامات الديناميكية.
جاكرتا NoSQL
تحدد واجهة برمجة تطبيقات موحدة لتفاعلات قواعد بيانات NoSQL. يوفر تعليقات مثل @Entity
، @Id
، و@Column
لتعيين فئات Java إلى مجموعات NoSQL وتبسيط عمليات قاعدة البيانات.
هذه المواصفات تقلل من الشفرات المكررة وتعزز القابلية للنقل عبر قواعد البيانات، مما يجعلها ضرورية لمطوري Java.
الإصدار الأحدث، الإصدار 1.1.3، يركز على تحسين الاعتمادية والأمان والأداء بالإضافة إلى إدخال ميزات جديدة مثيرة:
- Redis: دعم محسن لـ Redis Sentinel لتحسين التوفرية.
- ArangoDB: تحديثات أمان وإدارة المفاتيح.
- Oracle NoSQL: خيارات اعتماد جديدة لتحسين التكامل.
- JNoSQL Lite: إضافة دعم لتسجيل، وتحسين قابلية التتبع.
- تحديثات السائقين: تحسين السواق لمختلف قواعد البيانات NoSQL.
- CDI Lite: الآن لديها دعم لسجل Java
لعرض قوة Eclipse JNoSQL 1.1.3، سنقوم بإنشاء تطبيق Quarkus يدير “الأهداف” باستخدام ArangoDB. بفضل مواصفات Jakarta EE، يمكن تبديل القواعد البيانات NoSQL الأخرى مثل MongoDB أو Oracle NoSQL بتغييرات بسيطة.
خطوة بخطوة
الخطوة 1: إعداد Quarkus
ابدأ مشروع Quarkus الخاص بك باستخدام واجهة المستخدم البدءية Quarkus، واختر التوسيعات التالية:
- 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
قم بتشغيل نسخة محلية من قاعدة بيانات ArangoDB باستخدام Docker:
docker run -e ARANGO_NO_AUTH=1 -d --name arangodb-instance -p 8529:8529 -d arangodb/arangodb
أنشئ قاعدة بيانات باسم goals
ومجموعة بيانات Goal
في واجهة الويب الخاصة بقاعدة بيانات ArangoDB.
الخطوة 3: نمذجة البيانات الخاصة بك
استخدم ميزة سجل Java مع 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) {} (
الخطوة 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 التزامها بجعل تفاعلات قواعد البيانات NoSQL سلسة لمطوري Java. تعزيز الميزات وإمكانيات التكامل تمكن المطورين من ببناء تطبيقات مرنة وقابلة للتوسع. لمزيد من التفاصيل، تحقق من المثال الكامل على GitHub.
Source:
https://dzone.com/articles/nosql-database-integration-in-java-with-eclipse-jnosql-1-1-3