Bevezetés a Nyílt Szabadságba
1. Áttekintés
A mikroszolgáltatási architektúra és a felhőalapú alkalmazásfejlesztés népszerűségével egyre nagyobb szükség van egy gyors és könnyű alkalmazásszerverre.
Ebben a bevezető oktatóanyagban felfedezzük az Open Liberty keretrendszert egy RESTful webszolgáltatás létrehozása és fogyasztása céljából. Megvizsgálunk néhány alapvető tulajdonságot, amelyet nyújt.
2. Nyissa meg a Liberty-t
A Nyitott Szabadság az egy nyitott keretrendszer a Java ökoszisztémához, amely lehetővé teszi a mikroszolgáltatások fejlesztését az Eclipse MicroProfile és Jakarta EE platformok funkcióinak felhasználásával.
Ez egy rugalmas, gyors és könnyű Java futási idő, amely ígéretesnek tűnik a felhő-natív mikroszolgáltatások fejlesztése szempontjából.
A keretrendszer lehetővé teszi számunkra, hogy csak azokat a szolgáltatásokat konfiguráljuk, amelyekre az alkalmazásnak szüksége van, ami kisebb memóriaméretet eredményez az indítás során. Továbbá bármely felhőplatformon telepíthető olyan konténerek segítségével, mint a Docker és a Kubernetes.
Támogatja a gyors fejlesztést azáltal, hogy a kódot élőben tölti be a gyors ismétlés érdekében.
3. Építsd és futtasd
Először létrehozunk egy egyszerű Maven-alapú projektet nyílt szabadság majd adja hozzá a legújabbat liberty-maven-plugin bővítmény a pom.xml:
io.openliberty.tools liberty-maven-plugin 3.3-M3
Vagy hozzáadhatjuk a legfrissebbet openliberty-runtime Maven-függőség a liberty-maven-plugin:
io.openliberty openliberty-runtime 20.0.0.1 zip
Hasonlóképpen hozzáadhatjuk a legújabb Gradle függőséget a épít.gradle:
függőségek {libertyRuntime csoport: 'io.openliberty', név: 'openliberty-runtime', verzió: '20 .0.0.1 '}
Ezután hozzáadjuk a legfrissebbet jakarta.jakartaee-web-api és mikroprofil Maven-függőségek:
jakarta.platform jakarta.jakartaee-web-api 8.0.0 biztosított org.eclipse.microprofile mikroprofil 3.2 pom biztosított
Ezután adjuk hozzá az alapértelmezett HTTP port tulajdonságokat a pom.xml:
9080 9443
Ezután létrehozzuk a server.xml fájl a src / main / liberty / config Könyvtár:
mpHealth-2.0
Itt adtuk hozzá a mpHealth-2.0 funkció az alkalmazás állapotának ellenőrzéséhez.
Ennyi az összes alapbeállítással. Futtassuk a Maven parancsot a fájlok első fordításához:
mvn tiszta csomag
Végül futtassuk a szervert egy Liberty által biztosított Maven paranccsal:
mvn szabadság: dev
Voálá! Alkalmazásunk elindult, és a következő címen lesz elérhető: helyi gazda: 9080:

Továbbá elérhetjük az alkalmazás állapotát a címen localhost: 9080 / egészség:
{"ellenőrzések": [], "állapot": "FEL"}
A szabadság: dev parancs elindítja az Open Liberty szervert fejlesztési módban, amely a szerver újraindítása nélkül gyorsan újratölti a kódban vagy a konfigurációban végrehajtott változtatásokat.
Hasonlóképpen a szabadság: futás parancs elérhető a kiszolgáló termelési módban történő elindításához.
Továbbá használhatjukliberty: start-szerver és szabadság:stop-server a szerver elindításához / leállításához a háttérben.
4. Servlet
A szervletek használatához hozzáadjuk a servlet-4.0 funkció a server.xml:
... servlet-4.0
Adja hozzá a legfrissebbet servlet-4.0 Maven függőség, ha a openliberty-runtime Maven-függőség a pom.xml:
Az io.openliberty.features a servlet-4.0 20.0.0.1 esa
Ha azonban a liberty-maven-plugin plugin, erre nincs szükség.
Ezután létrehozzuk a AppServlet osztály kiterjesztése HttpServlet osztály:
@WebServlet (urlPatterns = "/ app") public class Az AppServlet kiterjeszti a HttpServlet {private static final long serialVersionUID = 1L; @Orride protected void doGet (HttpServletRequest kérés, HttpServletResponse válasz) dobja a ServletException, IOException {String htmlOutput = "Helló! Üdvözöljük az Open Liberty oldalán
"; response.getWriter (). append (htmlOutput);}}
Itt adtuk hozzá a @WebServlet megjegyzés, amely a AppServlet elérhető a megadott URL-mintán.
A servlet elérjük a címen localhost: 9080 / kb:
5. Hozzon létre egy RESTful webszolgáltatást
Először tegyük hozzá a jaxrs-2.1 funkció a server.xml:
... jaxrs-2.1
Azután, mi létrehozzuk a ApiApplication osztály, amely végpontokat nyújt a RESTful webszolgáltatáshoz:
@ApplicationPath ("/ api") nyilvános osztály Az ApiApplication kiterjeszti az alkalmazást {}
Itt használtuk a @ApplicationPath kommentár az URL elérési útjához.
Ezután hozzuk létre a Személy osztály, amely a modellt szolgálja:
public class Személy {privát String felhasználónév; privát karakterlánc e-mail; // szerelők és beállítók // konstruktorok}
Ezután létrehozzuk a PersonResource osztály a HTTP leképezések meghatározásához:
@RequestScoped @Path ("persons") public class PersonResource {@GET @Produces (MediaType.APPLICATION_JSON) public list getAllPersons () {return Arrays.asList (new Person (1, "normanlewis", "[email protected]")) ; }}
Itt adtuk hozzá a getAllPersons módszer a GET leképezéséhez a / api / fő végpont. Tehát készen állunk a RESTful webszolgáltatással, és a szabadság: dev parancs a változásokat menet közben tölti be.
Nézzük meg a / api / fő RESTful webszolgáltatás egy curl GET kéréssel:
curl --request GET --url // localhost: 9080 / api / fő
Ezután kapunk egy JSON tömböt válaszként:
[{"id": 1, "felhasználónév": "normanlewis", "email": "[email protected]"}]
Hasonlóképpen hozzáadhatjuk a POST leképezést a addPerson módszer:
@POST @Consumes (MediaType.APPLICATION_JSON) public Response addPerson (Person person) {String respMessage = "Személy" + person.getUsername () + "sikeresen megkapta."; return Response.status (Response.Status.CREATED) .entity (respMessage) .build (); }
Most meghívhatjuk a végpontot egy curl POST kéréssel:
curl --request POST --url // localhost: 9080 / api / persons \ --header 'content-type: application / json' \ --data '{"felhasználónév": "normanlewis", "email": "[ e-mail védett] "}"
A válasz a következőképpen fog kinézni:
Normanlewis személy sikeresen fogadta.
6. Kitartás
6.1. Konfiguráció
Adjunk hozzá kitartástámogatást RESTful webszolgáltatásainkhoz.
Először hozzáadjuk a derbi Maven-függőség a pom.xml:
org.apache.derby derbi 10.14.2.0
Ezután hozzáadunk néhány funkciót, például jpa-2.2, jsonp-1.1, és cdi-2.0 hoz server.xml:
... jpa-2.2 jsonp-1.1 cdi-2.0
Itt a jsonp-1.1 szolgáltatás biztosítja a Java API-t a JSON-feldolgozáshoz, és a cdi-2.0 funkció kezeli a hatóköröket és a függőségi injekciókat.
Ezután létrehozzuk a kitartás.xml ban,-ben src / main / resources / META-INF Könyvtár:
jdbc / jpadatasource
Itt az EclipseLink DDL generációt használtuk az adatbázis-sémánk automatikus létrehozásához. Használhatunk más alternatívákat is, mint a Hibernate.
Ezután tegyük hozzá a adatforrás konfiguráció a server.xml:
Megjegyzés: a jndiName azonos hivatkozással rendelkezik a jta-data-source címke a kitartás.xml.
6.2. Entitás és DAO
Ezután hozzáadjuk a @Entity kommentár és azonosító a mi Személy osztály:
@Entity public class Person {@GeneratedValue (strategy = GenerationType.AUTO) @Id private int id; privát String felhasználónév; privát karakterlánc e-mail; // szerelők és beállítók}
Ezután hozzuk létre a PersonDao osztály, amely kölcsönhatásba lép az adatbázissal a EntityManager példa:
@RequestScoped public class PersonDao {@PersistenceContext (name = "jpa-unit") private EntityManager em; public Person createPerson (Személy személy) {em.ellenőr (személy); visszatérő személy; } public Person readPerson (int personId) {return em.find (Személy.osztály, személyId); }}
Vegye figyelembe, hogy a @PersistenceContext azonos hivatkozást határoz meg a kitartás-egység címke a kitartás.xml.
Most beadjuk a PersonDao függőség a PersonResource osztály:
@RequestScoped @Path ("person") public class PersonResource {@Inject private PersonDao personDao; // ...}
Itt használtuk a @ Injekció a CDI szolgáltatás által nyújtott kommentár.
Utoljára frissítjük a addPerson módszere PersonResource osztály, hogy kitartson a Személy tárgy:
@POST @Cumsumes (MediaType.APPLICATION_JSON) @Transactionional public Response addPerson (Person person) {personDao.createPerson (person); Karakterlánc respMessage = "Személy #" + person.getId () + "sikeresen létrehozva."; return Response.status (Response.Status.CREATED) .entity (respMessage) .build (); }
Itt a addPerson metódust a @ Tranzakció kommentár a CDI által kezelt babok tranzakcióinak ellenőrzéséhez.
Hívjuk meg a végpontot a már tárgyalt curl POST kéréssel:
curl --request POST --url // localhost: 9080 / api / persons \ --header 'content-type: application / json' \ --data '{"felhasználónév": "normanlewis", "email": "[ e-mail védett] "}"
Ezután szöveges választ kapunk:
Az 1. személy sikeresen létrehozva.
Hasonlóképpen tegyük hozzá a getPerson módszer GET leképezéssel a Személy tárgy:
@GET @Path ("{id}") @Produces (MediaType.APPLICATION_JSON) @Transactionional public Person getPerson (@PathParam ("id") int id) {Person person = personDao.readPerson (id); visszatérő személy; }
Hívjuk meg a végpontot egy curl GET kéréssel:
göndör - kérelem GET --url // localhost: 9080 / api / fő / 1
Aztán megkapjuk a Személy objektum JSON válaszként:
{"email": "[email protected]", "id": 1, "username": "normanlewis"}
7. Fogyasszon Nyugalmas Webszolgáltatás használata JSON-B
Először a modell hozzáadásával engedélyezzük a modellek közvetlen sorosítását és dezerializálását jsonb-1.0 funkció a server.xml:
... jsonb-1.0
Ezután hozzuk létre a RestConsumer osztály a fogyasztaniJsonb-vel módszer:
public class RestConsumer {public static String consumeWithJsonb (String targetUrl) {Client client = ClientBuilder.newClient (); Válaszválasz = client.target (targetUrl) .request (). Get (); Karakterlánc eredménye = response.readEntity (String.osztály); válasz.zár (); client.close (); visszatérési eredmény; }}
Itt használtuk a ClientBuilder osztály kérje a RESTful webszolgáltatás végpontokat.
Végül írjunk egy egység tesztet a / api / fő RESTful webszolgáltatás és ellenőrizze a választ:
@Test public void whenConsumeWithJsonb_thenGetPerson () {String url = "// localhost: 9080 / api / persons / 1"; Karakterlánc eredménye = RestConsumer.consumeWithJsonb (url); Személy személy = JsonbBuilder.create (). From Json (eredmény, Személy.osztály); assertEquals (1, személy.getId ()); assertEquals ("normanlewis", person.getUsername ()); assertEquals ("[e-mail védett]", person.getEmail ()); }
Itt használtuk a JsonbBuilder osztály az elemzéséhez Húr válasz a Személy tárgy.
Továbbá használhatjuk MicroProfile Rest Client a mpRestClient-1.3 funkció a RESTful webszolgáltatások fogyasztásához. Ez biztosítja a RestClientBuilder felület a RESTful webszolgáltatás végpontok kérésére.
8. Következtetés
Ebben a cikkben feltártuk az Open Liberty keretrendszert - egy gyors és könnyű Java futási időt, amely az Eclipse MicroProfile és a Jakarta EE platform összes funkcióját biztosítja.
Először is létrehoztunk egy RESTful webszolgáltatást a JAX-RS segítségével. Ezután engedélyeztük a perzisztenciát olyan funkciók használatával, mint a JPA és a CDI.
Végül a RESTful webszolgáltatást fogyasztottuk a JSON-B segítségével.
Szokás szerint az összes kód implementáció elérhető a GitHubon.