מבוא לחירות הפתוחה

1. סקירה כללית

עם הפופולריות של ארכיטקטורה של שירותי מיקרוסופט ופיתוח יישומים שמקורם בענן, עולה הצורך בשרת יישומים מהיר וקל משקל.

במדריך ההיכרות הזה, נחקור את מסגרת החירות הפתוחה כדי ליצור ולצרוך שירות אינטרנט RESTful. נבחן גם כמה מהתכונות החיוניות שהוא מספק.

2. פתחו את החירות

חופש פתוח הוא מסגרת פתוחה למערכת האקולוגית של Java המאפשרת פיתוח מיקרו-שירותים באמצעות תכונות של פלטפורמות Eclipse MicroProfile ו- Jakarta EE.

זהו זמן ריצה של Java גמיש, מהיר וקל משקל שנראה מבטיח לפיתוח מיקרו-שירותי ענן.

המסגרת מאפשרת לנו להגדיר רק את התכונות הדרושות לאפליקציה שלנו, וכתוצאה מכך טביעת רגל זיכרון קטנה יותר במהלך ההפעלה. כמו כן, ניתן לפרוס אותו בכל פלטפורמת ענן באמצעות מיכלים כמו Docker ו- Kubernetes.

הוא תומך בפיתוח מהיר באמצעות טעינה חיה של הקוד לאיטרציה מהירה.

3. לבנות ולהפעיל

ראשית, ניצור פרויקט פשוט מבוסס Maven בשם חופש פתוח ואז הוסף את האחרונה חירות-maven-plugin תוסף ל- pom.xml:

 io.openliberty.tools liberty-maven-plugin 3.3-M3 

לחלופין, נוכל להוסיף את המאוחר ביותר זמן ריצה פתוח תלות במייב כאלטרנטיבה ל חירות-maven-plugin:

 io.openliberty openliberty runtime 20.0.0.1 zip 

באופן דומה, אנו יכולים להוסיף את התלות האחרונה ב- Gradle ל- build.gradle:

תלות {קבוצת libertyRuntime: 'io.openliberty', שם: 'openliberty-runtime', גרסה: '20 .0.0.1 '}

לאחר מכן נוסיף את המאוחר ביותר jakarta.jakartaee-web-api ו מיקרופיל תלות Maven:

 jakarta.platform jakarta.jakartaee-web-api 8.0.0 מסופק org.eclipse.microprofile microprofile 3.2 pom מסופק 

לאחר מכן, בואו נוסיף את מאפייני ברירת המחדל של יציאת HTTP ל- pom.xml:

 9080 9443 

לאחר מכן, ניצור את server.xml קובץ ב- src / main / liberty / config מַדרִיך:

  mpHealth-2.0 

הנה, הוספנו את mpHealth-2.0 תכונה לבדיקת תקינות היישום.

זהו זה עם כל ההתקנה הבסיסית. בואו נפעיל את הפקודה Maven כדי לאסוף את הקבצים בפעם הראשונה:

חבילה נקייה mvn

אחרון, בואו נפעיל את השרת באמצעות פקודת Maven המסופקת על ידי Liberty:

חירות mvn: dev

וואלה! היישום שלנו התחיל ויהיה נגיש בכתובת מקום אירוח: 9080:

כמו כן, אנו יכולים לגשת לבריאות האפליקציה בכתובת localhost: 9080 / בריאות:

{"checks": [], "status": "UP"}

ה חירות: dev הפקודה מפעילה את שרת Open Liberty במצב פיתוח, אשר טוען מחדש את כל השינויים שבוצעו בקוד או בתצורה מבלי להפעיל מחדש את השרת.

באופן דומה, ה חירות: לרוץ הפקודה זמינה להפעלת השרת במצב ייצור.

כמו כן, אנו יכולים להשתמשחופש: שרת התחלה ו חוֹפֶשׁ:עצירת שרת כדי להפעיל / לעצור את השרת ברקע.

4. סרוולט

כדי להשתמש ב- servlets באפליקציה, נוסיף את ה- servlet-4.0 תכונה ל server.xml:

 ... servlet-4.0 

הוסף את האחרונה servlet-4.0 תלות Maven אם משתמשים ב- זמן ריצה פתוח תלות במייב ב pom.xml:

 io.openliberty.features servlet-4.0 20.0.0.1 esa 

עם זאת, אם אנו משתמשים ב- חירות-maven-plugin תוסף, זה לא הכרחי.

לאחר מכן, ניצור את AppServlet כיתה המרחיבה את HttpServlet מעמד:

@WebServlet (urlPatterns = "/ app") מחלקה ציבורית AppServlet מרחיב HttpServlet {פרטית סטטית פרטית ארוכה serialVersionUID = 1L; @Override מוגן בטל doGet (בקשת HttpServletRequest, תגובה HttpServletResponse) זורק ServletException, IOException {String htmlOutput = "

שלום! ברוכים הבאים לחירות הפתוחה

"; response.getWriter (). נספח (htmlOutput);}}

הנה, הוספנו את @WebServlet ביאור שיהפוך את AppServlet זמין בתבנית כתובת ה- URL שצוינה.

בוא ניגש לסרוולט בכתובת localhost: 9080 / אפליקציה:

5. צור שירות אינטרנט RESTful

ראשית, בואו נוסיף את jaxrs-2.1 תכונה ל server.xml:

 ... jaxrs-2.1 

לאחר מכן, ניצור את ApiApplication בכיתה, המספק נקודות קצה לשירות האינטרנט RESTful:

@ApplicationPath ("/ api") מחלקה ציבורית ApiApplication מרחיב את היישום {}

הנה, השתמשנו ב- @ApplicationPath ביאור לנתיב כתובת האתר.

ואז, בואו ניצור את אדם כיתה המשרתת את המודל:

אדם בכיתה ציבורית {שם משתמש מחרוזת פרטי; דוא"ל מחרוזת פרטי; // גטרים וקובעים // בונים}

לאחר מכן, ניצור את PersonResource בכיתה להגדרת מיפויי HTTP:

@RequestScoped @Path ("אנשים") רמה ציבורית PersonResource {@GET @Produces (MediaType.APPLICATION_JSON) רשימה ציבורית getAllPersons () {return Arrays.asList (אדם חדש (1, "normanlewis", "[דוא"ל מוגן]")) ; }}

הנה, הוספנו את getAllPersons שיטת למיפוי GET ל- / API / אנשים נקודת סיום. אז, אנחנו מוכנים עם שירות אינטרנט RESTful, ו- חירות: dev הפקודה תטען שינויים תוך כדי טיסה.

בוא ניגש ל- / API / אנשים שירות אינטרנט רגוע באמצעות בקשת GET תלתל:

curl --request GET --url // localhost: 9080 / api / persons

לאחר מכן, נקבל מערך JSON בתגובה:

[{"id": 1, "username": "normanlewis", "email": "[email protected]"}]

באופן דומה, אנו יכולים להוסיף את מיפוי ה- POST על ידי יצירת ה- addPerson שיטה:

@ POST @ Consumes (MediaType.APPLICATION_JSON) תגובה ציבורית addPerson (אדם / אדם) {String respMessage = "אדם" + person.getUsername () + "התקבל בהצלחה."; return Response.status (Response.Status.CREATED) .entity (respMessage) .build (); }

כעת אנו יכולים להפעיל את נקודת הסיום באמצעות בקשת POST תלתל:

תלתל - בקשה POST --url // localhost: 9080 / api / persons \ --header 'type-type: application / json' \ --data '{"username": "normanlewis", "email": "[ מוגן בדוא"ל] "} '

התגובה תיראה כך:

האדם normanlewis התקבל בהצלחה.

6. התמדה

6.1. תְצוּרָה

בואו להוסיף תמיכה בהתמדה לשירותי האינטרנט RESTful שלנו.

ראשית, נוסיף את דרבי תלות במייבון pom.xml:

 org.apache.derby דרבי 10.14.2.0 

לאחר מכן נוסיף כמה תכונות כמו jpa-2.2, jsonp-1.1, ו cdi-2.0 אל ה server.xml:

 ... jpa-2.2 jsonp-1.1 cdi-2.0 

הנה ה jsonp-1.1 התכונה מספקת את ה- API של Java לעיבוד JSON ואת ה- cdi-2.0 התכונה מטפלת בהיקפים ובהזרקת התלות.

לאחר מכן, ניצור את התמדה.קסמל בתוך ה src / main / resources / META-INF מַדרִיך:

   jdbc / jpadatasource 

כאן השתמשנו בדור DDL של EclipseLink כדי ליצור את סכימת מסדי הנתונים שלנו באופן אוטומטי. אנו יכולים גם להשתמש בחלופות אחרות כמו שינה.

ואז, בואו נוסיף את מקור מידע תצורה ל- server.xml:

שים לב, ה- jndiName יש את אותה התייחסות ל מקור נתונים jta התג ב- התמדה.קסמל.

6.2. ישות ו- DAO

לאחר מכן נוסיף את @יֵשׁוּת ביאור ומזהה שלנו אדם מעמד:

אדם בכיתה ציבורית @Entity {@GeneratedValue (אסטרטגיה = GenerationType.AUTO) @ Id מזהה פרטי; שם משתמש פרטי מחרוזת; דוא"ל מחרוזת פרטי; // גטרים וקובעים}

לאחר מכן, בואו ניצור את PersonDao בכיתה שתתקשר עם מסד הנתונים באמצעות EntityManager למשל:

@RequestScoped מעמד אישי PersonDao {@PersistenceContext (name = "jpa-unit") פרטי EntityManager em; אדם ציבורי createPerson (אדם) {em.persist (אדם); אדם חוזר; } אדם ציבורי readPerson (int personId) {return em.find (Person.class, personId); }}

שים לב שה- @PersistenceContext מגדיר את אותה התייחסות ל- יחידת התמדה התג ב- התמדה.קסמל.

עכשיו, נזריק את PersonDao תלות ב PersonResource מעמד:

@RequestScoped @ Path ("אדם") PersonResource בכיתה ציבורית {@ הזריק PersonDao personDao פרטי; // ...}

הנה, השתמשנו ב- @לְהַזרִיק ביאור המסופק על ידי תכונת CDI.

אחרון, נעדכן את addPerson שיטת ה- PersonResource בכיתה להתמיד ב אדם לְהִתְנַגֵד:

@POST @Consumes (MediaType.APPLICATION_JSON) @ Transactional Public תגובה תגובהPerson (אדם) {personDao.createPerson (אדם); מחרוזת respMessage = "אדם מספר" + person.getId () + "נוצר בהצלחה."; return Response.status (Response.Status.CREATED) .entity (respMessage) .build (); }

הנה ה addPerson השיטה מסומנת עם @ Transactional ביאור לשליטה בעסקאות על שעועית מנוהלת CDI.

בואו נקרא את נקודת הסיום עם בקשת POST תלתל שכבר נדונה:

תלתל - בקשה POST --url // localhost: 9080 / api / persons \ --header 'type-type: application / json' \ --data '{"שם משתמש": "normanlewis", "email": "[ מוגן בדוא"ל] "} '

לאחר מכן נקבל תשובת טקסט:

האדם מספר 1 נוצר בהצלחה.

באופן דומה, בואו נוסיף את getPerson שיטה עם מיפוי GET כדי להביא a אדם לְהִתְנַגֵד:

@GET @Path ("{id}") @Produces (MediaType.APPLICATION_JSON) @Transactional Public Person getPerson (@PathParam ("id") id id) {אדם אדם = personDao.readPerson (id); אדם חוזר; }

בואו נפעיל את נקודת הקצה באמצעות בקשת GET תלתל:

תלתל - בקשה GET --url // localhost: 9080 / api / persons / 1

ואז נקבל את אדם התנגד כתגובת JSON:

{"email": "[email protected]", "id": 1, "username": "normanlewis"}

7. לצרוך מַרגִיעַ שירות אינטרנט באמצעות JSON-B

ראשית, נאפשר את היכולת לבצע סדרת סדרת דגמים וניתוק עריכה ישירות על ידי הוספת ה- jsonb-1.0 תכונה ל server.xml:

 ... jsonb-1.0 

ואז, בואו ניצור את RestConsumer שיעור עם לצרוך WithJsonb שיטה:

מחלקה ציבורית RestConsumer {מחרוזת סטטית ציבורית consumeWithJsonb (מחרוזת targetUrl) {לקוח לקוח = ClientBuilder.newClient (); תגובה תגובה = client.target (targetUrl) .request (). Get (); תוצאת מחרוזת = response.readEntity (String.class); תגובה.סגור (); client.close (); תוצאת החזרה; }}

הנה, השתמשנו ב- ClientBuilder בכיתה לבקש את נקודות הקצה של שירותי האינטרנט RESTful.

אחרון, בואו לכתוב מבחן יחידה לצרוך את / api / person שירות אינטרנט נעים ואמת את התגובה:

@ מבחן ציבורי בטל כאשר ConsumeWithJsonb_thenGetPerson () {String url = "// localhost: 9080 / api / persons / 1"; תוצאת מחרוזת = RestConsumer.consumeWithJsonb (url); אדם אדם = JsonbBuilder.create (). FromJson (תוצאה, Person.class); assertEquals (1, person.getId ()); assertEquals ("normanlewis", person.getUsername ()); assertEquals ("[דוא"ל מוגן]", person.getEmail ()); }

הנה, השתמשנו ב- JsonbBuilder בכיתה לנתח את חוּט תגובה ל אדם לְהִתְנַגֵד.

כמו כן, אנו יכולים להשתמש לקוח מנוחה למיקרופורפיל על ידי הוספת ה- mpRestClient-1.3 תכונה לצרוך את שירותי האינטרנט RESTful. זה מספק את RestClientBuilder ממשק לבקשת נקודות הקצה של RESTful.

8. מסקנה

במאמר זה בחנו את מסגרת Open Liberty - זמן ריצה מהיר וקל של Java המספק מאפיינים מלאים של פלטפורמות Eclipse MicroProfile ו- Jakarta EE.

ראשית, יצרנו שירות אינטרנט RESTful באמצעות JAX-RS. לאחר מכן, אפשרנו התמדה באמצעות תכונות כמו JPA ו- CDI.

אחרון, צרכנו את שירות האינטרנט RESTful באמצעות JSON-B.

כרגיל, כל יישומי הקוד זמינים ב- GitHub.


$config[zx-auto] not found$config[zx-overlay] not found