מאגרי נתונים NoSQL הפכו לאבן יסוד בפיתוח יישומים מודרניים, מציעים סקלאביליות וגמישות לטיפול בסוגי נתונים מגוונים. עם זאת, עבור רבים מפתחי Java, שילוב עם מאגרי נתונים NoSQL יכול להיות מורכב ודורש זמן. כאן נכנס Eclipse JNoSQL, מספק דרך חלקה וסטנדרטית לחבר את יישומי Java שלך למגוון מאגרי נתונים NoSQL.
מאמר זה בוחן כיצד Eclipse JNoSQL 1.1.3 מפשט את שילוב המאגר, משפר את פרודוקטיביות המפתחים, ומציע גמישות בין מאגרי נתונים שונים. אנו גם נעבור אתכם דרך דוגמה מעשית תוך שימוש ב-Quarkus ו-ArangoDB כדי להדגים את תכונותיו.
למה למפתחי Java כדאי להתעניין ב-Eclipse JNoSQL
עבור רבים מהמפתחים, עבודה עם מאגרי נתונים NoSQL כרוכה בלימוד APIs ספציפיים למאגרי נתונים, מה שעלול להוביל לקוד מפוצל ולא נייד. 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 על ידי מתן API וארכיטקטורה מאוחדת. על ידי ציות למפרטי 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 עשויים לצרוך זמן להבין ולהסתגל למפרטים ולממשקי API המשמשים ב־JNoSQL.
- תכונות ספציפיות למסד נתונים: בעוד JNoSQL מפשט פעולות NoSQL רגילות, ייתכן שהוא לא יתמוך באופציות מתקדמות, ספציפיות למסד הנתונים, ללא התאמה נוספת.
- קהילה ואקוסיסטם: ככלי מומחה יחסית, תמיכת הקהילה והאקוסיסטם שלו קטנה יותר ממתמטיקות Java רחבות יותר כמו Hibernate או Spring Data.
- כיוון ביצועים: ממשקי API כלליים עשויים להכניס הוצאות ביצועים קלות בהשוואה לספריות נטיביות, ספציפיות למסד הנתונים, במיוחד עבור אפליקציות ביצועים גבוהים.
הבנת הגבלות אלו עוזרת למפתחים לקבל החלטות מושכלות ולשקול באיזו מידה JNoSQL מתאים הכי טוב לפרויקטים שלהם.
מפרטי Jakarta EE שנתמכים על ידי Eclipse JNoSQL
Eclipse JNoSQL תומך ב־Jakarta Data וב־Jakarta NoSQL, שני מפרטים קריטיים ב־מערכת ה־Jakarta EE.
Jakarta Data
זה מספק API סטנדרטי לגישה וניהול מאגרי נתונים, מה שמאפשר למפתחים לבצע פעולות CRUD בקלות. זה מתמקד בפשטת דפי נתונים, מיון ושאילתות דינמיות.
ג'קרטה NoSQL
זה מגדיר API אחיד לאינטראקציות עם מסדי נתונים 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 Starter UI, ובחר בהרחבות הבאות:
- REST
- JSON
- ARC (CDI Lite)
- ArangoDB Driver
ה-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
ב-UI של ArangoDB.
שלב 3: עיצוב הנתונים שלך
השתמש בתכונת record של 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