Uvod u otvorenu slobodu

1. Pregled

S popularnošću arhitekture mikroservisa i razvojem aplikacija u oblaku, raste potreba za brzim i laganim aplikacijskim poslužiteljem.

U ovom uvodnom vodiču istražit ćemo okvir Open Liberty za stvaranje i upotrebu RESTful web usluge. Također ćemo ispitati nekoliko bitnih značajki koje pruža.

2. Otvorite Liberty

Otvorena sloboda je otvoreni okvir za ekosustav Java koji omogućuje razvoj mikro usluga koristeći značajke platformi Eclipse MicroProfile i Jakarta EE.

Riječ je o fleksibilnom, brzom i laganom Java izvođenju koje izgleda obećavajuće za razvoj mikro usluga u matičnom oblaku.

Okvir nam omogućuje da konfiguriramo samo značajke koje naša aplikacija treba, što rezultira manjim otiskom memorije tijekom pokretanja. Također, raspoloživ je na bilo kojoj platformi u oblaku pomoću spremnika poput Dockera i Kubernetesa.

Podržava brzi razvoj aktivnim ponovnim učitavanjem koda za brzu iteraciju.

3. Gradite i trčite

Prvo ćemo stvoriti jednostavan projekt temeljen na Mavenu pod nazivom otvorene slobode a zatim dodajte najnovije liberty-maven-plugin dodatak za pom.xml:

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

Ili možemo dodati najnovije openliberty-runtime Ovisnost o Mavenu kao alternativa za liberty-maven-plugin:

 io.openliberty openliberty-runtime 20.0.0.1 zip 

Slično tome, možemo dodati najnoviju ovisnost o Gradleu na graditi.gradle:

ovisnosti {libertyRuntime group: 'io.openliberty', name: 'openliberty-runtime', version: '20 .0.0.1 '}

Zatim ćemo dodati najnovije jakarta.jakartaee-web-api i mikroprofil Maven ovisnosti:

 jakarta.platform jakarta.jakartaee-web-api 8.0.0 pod uvjetom org.eclipse.microprofile mikroprofile 3.2 pom pod uvjetom 

Zatim, dodamo zadana svojstva HTTP priključka na pom.xml:

 9080 9443 

Dalje ćemo stvoriti poslužitelj.xml datoteku u src / main / liberty / config imenik:

  mpZdravlje-2.0 

Evo, dodali smo mpZdravlje-2.0 značajka za provjeru ispravnosti aplikacije.

To je to sa svim osnovnim postavkama. Pokrenimo naredbu Maven da prvi put prevedemo datoteke:

mvn čist paket

Na kraju, pokrenimo poslužitelj pomoću naredbe Maven koju daje Liberty:

mvn sloboda: razv

Voila! Naša je aplikacija pokrenuta i bit će joj dostupna na lokalnihost: 9080:

Također, zdravlju aplikacije možemo pristupiti na localhost: 9080 / zdravlje:

{"provjere": [], "status": "GORE"}

The sloboda: razv naredba pokreće poslužitelj Open Liberty u načinu rada, koji vruće ponovno učitava sve promjene u kodu ili konfiguraciji bez ponovnog pokretanja poslužitelja.

Slično tome, sloboda: trčati Dostupna je naredba za pokretanje poslužitelja u proizvodnom načinu.

Također, možemo koristitisloboda: start-server i sloboda:stop-poslužitelj za pokretanje / zaustavljanje poslužitelja u pozadini.

4. Servlet

Da bismo koristili servlete u aplikaciji, dodati ćemo servlet-4.0 značajka za poslužitelj.xml:

 ... servlet-4.0 

Dodajte najnovije servlet-4.0 Ovisnost o Mavenu ako koristite openliberty-runtime Mavenova ovisnost u pom.xml:

 io.openliberty.features servlet-4.0 20.0.0.1 esa 

Međutim, ako koristimo liberty-maven-plugin dodatak, ovo nije potrebno.

Zatim ćemo stvoriti AppServlet razred koji produžuje HttpServlet razred:

@WebServlet (urlPatterns = "/ app") javna klasa AppServlet proširuje HttpServlet {private static final long serialVersionUID = 1L; @Override protected void doGet (zahtjev HttpServletRequest, odgovor HttpServletResponse) baca ServletException, IOException {String htmlOutput = "

Zdravo! Dobrodošli u Open Liberty

"; response.getWriter (). append (htmlOutput);}}

Evo, dodali smo @WebServlet napomena koja će napraviti AppServlet dostupno na navedenom uzorku URL-a.

Pristupimo servletu na localhost: 9080 / app:

5. Stvorite RESTful web uslugu

Prvo, dodajmo jaxrs-2.1 značajka za poslužitelj.xml:

 ... jaxrs-2.1 

Zatim, mi ćemo stvoriti ApiApplication klase, koja pruža krajnje točke web-usluzi RESTful:

@ApplicationPath ("/ api") javna klasa ApiApplication proširuje aplikaciju {}

Evo, koristili smo @ApplicationPath napomena za putanju URL-a.

Zatim, kreirajmo Osoba klasa koja služi modelu:

javna klasa Person {privatni niz korisničko ime; privatni String e-mail; // getteri i postavljači // konstruktori}

Dalje ćemo stvoriti PersonResource klasa za definiranje HTTP preslikavanja:

@RequestScoped @Path ("persons") javna klasa PersonResource {@GET @Produces (MediaType.APPLICATION_JSON) javni popis getAllPersons () {return Arrays.asList (new Person (1, "normanlewis", "[email protected]")) ; }}

Evo, dodali smo getAllPersons metoda za GET mapiranje u / api / osobe krajnja točka. Dakle, spremni smo za RESTful web uslugu i sloboda: razv naredba će učitati promjene u letu.

Pristupimo / api / osobe RESTful web usluga koja koristi curl GET zahtjev:

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

Tada ćemo u odgovor dobiti JSON niz:

[{"id": 1, "username": "normanlewis", "email": "[email zaštićen]"}]

Slično tome, možemo dodati POST mapiranje stvaranjem datoteke addPerson metoda:

@POST @Consumes (MediaType.APPLICATION_JSON) javni odgovor addPerson (Osoba osoba) {String respMessage = "Osoba" + person.getUsername () + "uspješno primljeno."; vratiti Response.status (Response.Status.CREATED) .entity (respMessage) .build (); }

Sada možemo prizvati krajnju točku sa zahtjevom POST zahtjeva za curl:

curl --request POST --url // localhost: 9080 / api / persons \ --header 'content-type: application / json' \ --data '{"username": "normanlewis", "email": "[ e-pošta zaštićena] "} '

Odgovor će izgledati ovako:

Osoba normanlewis uspješno je primila.

6. Ustrajnost

6.1. Konfiguracija

Dodajmo podršku upornosti našim RESTful web uslugama.

Prvo ćemo dodati derbi Mavenova ovisnost o pom.xml:

 org.apache.derby derbi 10.14.2.0 

Zatim ćemo dodati nekoliko značajki poput jpa-2.2, jsonp-1.1, i cdi-2.0 prema poslužitelj.xml:

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

Evo, jsonp-1.1 Značajka pruža Java API za JSON obradu i cdi-2.0 značajka rukuje opsezima i ubrizgavanjem ovisnosti.

Dalje ćemo stvoriti postojanost.xml u src / main / resources / META-INF imenik:

   jdbc / jpadatasource 

Ovdje smo koristili generaciju EclipseLink DDL za automatsko stvaranje sheme baze podataka. Možemo koristiti i druge alternative poput Hibernate.

Zatim, dodajmo izvor podataka konfiguracija na poslužitelj.xml:

Napomena, jndiName ima istu referencu na jta-izvor podataka oznaka u postojanost.xml.

6.2. Entitet i DAO

Zatim ćemo dodati @ Entitet napomena i identifikator našeg Osoba razred:

@ Entiteta javne klase Osoba {@GeneratedValue (strategija = GenerationType.AUTO) @Id private int id; privatno korisničko ime niza; privatni String e-mail; // geteri i postavljači}

Dalje, kreirajmo PersonDao klase koja će komunicirati s bazom podataka pomoću EntityManager primjer:

@RequestScoped javna klasa PersonDao {@PersistenceContext (name = "jpa-unit") private EntityManager em; javni Person createPerson (Osoba osoba) {em.persist (osoba); osoba za povratak; } javni Person readPerson (int personId) {return em.find (Person.class, personId); }}

Imajte na umu da @PersistenceContext definira istu referencu na jedinica postojanosti oznaka u postojanost.xml.

Sad ćemo ubrizgati PersonDao ovisnost u PersonResource razred:

@RequestScoped @Path ("person") javna klasa PersonResource {@Inject private PersonDao personDao; // ...}

Evo, koristili smo @Ubrizgati napomena koju pruža značajka CDI.

Posljednje, ažurirat ćemo addPerson metoda PersonResource razred da ustraje Osoba objekt:

@POST @Consumes (MediaType.APPLICATION_JSON) @Transakcijski javni odgovor addPerson (osoba osoba) {personDao.createPerson (osoba); String respMessage = "Osoba #" + person.getId () + "uspješno stvorena."; vratiti Response.status (Response.Status.CREATED) .entity (respMessage) .build (); }

Evo, addPerson metoda označena je s @Transational napomena za kontrolu transakcija na grahu kojim upravlja CDI.

Pozovimo krajnju točku s već raspravljenim zahtjevom POST za curl:

curl --request POST --url // localhost: 9080 / api / persons \ --header 'content-type: application / json' \ --data '{"username": "normanlewis", "email": "[ e-pošta zaštićena] "} '

Tada ćemo primiti tekstualni odgovor:

Osoba # 1 uspješno je stvorena.

Slično tome, dodajmo getPerson metoda s GET preslikavanjem za dohvaćanje a Osoba objekt:

@GET @Path ("{id}") @Produces (MediaType.APPLICATION_JSON) @Transakcijska javna osoba getPerson (@PathParam ("id") int id) {Person person = personDao.readPerson (id); osoba za povratak; }

Pozovimo krajnju točku pomoću curl GET zahtjeva:

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

Tada ćemo dobiti Osoba objekt kao JSON odgovor:

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

7. Konzumirajte Miran Korištenje web usluge JSON-B

Prvo, omogućit ćemo mogućnost izravne serializacije i deserializacije modela dodavanjem jsonb-1.0 značajka za poslužitelj.xml:

 ... jsonb-1.0 

Zatim, kreirajmo RestConsumer razred s konzumiratiWithJsonb metoda:

javna klasa RestConsumer {javni statički niz consumeWithJsonb (String targetUrl) {Klijent klijent = ClientBuilder.newClient (); Odgovor odgovora = client.target (targetUrl) .request (). Get (); Rezultat niza = response.readEntity (String.class); response.close (); client.close (); povratni rezultat; }}

Evo, koristili smo ClientBuilder klase da zatraži krajnje točke RESTful web usluge.

Na kraju, napišimo jedinstveni test za konzumiranje / api / osoba RESTful web usluga i provjerite odgovor:

@Test javna praznina whenConsumeWithJsonb_thenGetPerson () {String url = "// localhost: 9080 / api / persons / 1"; Rezultat niza = RestConsumer.consumeWithJsonb (url); Osoba osoba = JsonbBuilder.create (). FromJson (rezultat, Person.class); assertEquals (1, person.getId ()); assertEquals ("normanlewis", person.getUsername ()); assertEquals ("[zaštićen e-poštom]", person.getEmail ()); }

Evo, koristili smo JsonbBuilder razred za raščlanjivanje Niz odgovor u Osoba objekt.

Također, možemo koristiti MicroProfile Rest Client dodavanjem mpRestClient-1.3 značajka za upotrebu RESTful web usluga. Pruža RestClientBuilder sučelje za traženje krajnjih točaka RESTful web usluga.

8. Zaključak

U ovom smo članku istražili okvir Open Liberty - brzo i lagano Java izvršavanje koje pruža pune značajke platformi Eclipse MicroProfile i Jakarta EE.

Za početak smo stvorili RESTful web uslugu koristeći JAX-RS. Zatim smo omogućili postojanost koristeći značajke poput JPA i CDI.

Na kraju, konzumirali smo RESTful web uslugu pomoću JSON-B.

Kao i obično, sve implementacije koda dostupne su na GitHubu.


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