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.