MicroProfile i Jakarta EE 10 Core Profile
Uvod u MicroProfile Specifikaciju
- Definicija: MicroProfile predstavlja specifikaciju zajednice otvorenog koda namijenjenu za razvoj Enterprise Java mikroservisa.
- Svrha: Optimizacija Enterprise Jave za arhitekturu mikroservisa.
- Usklađenost s Jakarta EE:
- MicroProfile : Usklađen s Jakarta EE Core Profile.
- MicroProfile : Usklađen s Jakarta EE Core Profile. Datum izdanja: .
- MicroProfile : Usklađen s Jakarta EE Core Profile. Datum izdanja: .
- Tehnički preduvjeti: Minimalna potrebna verzija je Java SE .
Jakarta EE Core Profile Komponente
MicroProfile se oslanja na skup tehnologija unutar Jakarta EE Core Profile . Obavezne komponente uključuju:
- Jakarta Annotations
- Jakarta Contexts and Dependency Injection (CDI) (posebno CDI Lite sekcija)
- Jakarta Dependency Injection
- Jakarta Interceptors
- Jakarta JSON Processing
- Jakarta JSON Binding
- Jakarta RESTful Web Services
MicroProfile Config
- Glavna funkcija: Pruža fleksibilan sustav za jednostavan rad s konfiguriranjem aplikacije.
- Vanjska dokumentacija: Specifikacija se nalazi na:
https://download.eclipse.org/microprofile/microprofile-config-3.1/microprofile-config-spec-3.1.pdf. - Konfiguracijska datoteka: Standardna datoteka s postavkama naziva se
microprofile-config.properties. - Primjena u Web aplikacijama: Radi se o web aplikacijama za koje je obično potrebna datoteka opisnika isporuke
web.xml, iako postoje situacije kada ona nije obavezna. - Primjer koda (Inject):
- Unutar klase koristi se
@Injectu kombinaciji s@ConfigProperty. - Primjer:
@ConfigProperty(name = "defaultName", defaultValue = "world") private String defaultName;. @Path("hello1")i@Path("hello2")koriste se za definiranje krajnjih točaka putem JAX-RS-a.
- Unutar klase koristi se
MicroProfile Health
- Svrha: Definira mehanizam rada pojedinačnog kontejnera za provjeru raspoloživosti (availability) i statusa MicroProfile implementacije.
- Primarna namjena: M2M (Machine-to-Machine) mehanizam, specifično za kontejnerizacijske okoline poput cloud providera.
- Operativna uloga: Koristi se za odlučivanje treba li računalni čvor biti odbačen (terminiran/shutdown) i zamijenjen novom, zdravom instancom.
- Arhitektura krajnjih točaka: Sastoji se od tri specifične točke koje predstavljaju stanje sustava:
/health/ready: Stanje spremnosti sustava./health/live: Stanje "živosti" (da li je proces aktivan)./health/started: Stanje pokretanja sustava.
MicroProfile Metrics
- Svrha: Služi za utvrđivanje problema i praćenje dugoročnih trendova.
- Planiranje kapaciteta: Daje podatke potrebne za proaktivno otkrivanje problema, poput neograničenog rasta korištenja diska.
- Skaliranje: Mjerni podaci pomažu sustavima za planiranje u donošenju odluka o horizontalnom skaliranju aplikacije (povećanje ili smanjenje broja strojeva/instanci).
MicroProfile Telemetry
- Kontekst: Cloud-native stogovi tehnologija s distribuiranim i poliglotnim arhitekturama uvode operativne izazove u rješavanju problema dostupnosti i performansi.
- Problem standardizacije: Nedostatak standarda u telemetriji uzrokuje slabu prenosivost podataka i opterećuje korisnike održavanjem različitih instrumenata.
- Rješenje - OpenTelemetry: Ovaj projekt pruža jedinstveno rješenje neovisno o dobavljanju (vendor-agnostic).
- Sadrži skup API-ja, SDK-ova i alata za upravljanje tragovima (traces), metrikama (metrics) i zapisnicima (logs).
- Specifikacija MicroProfile Telemetry omogućuje aplikacijama sudjelovanje u okruženju distribuiranog praćenja.
- Čini spoj između OpenTracing i OpenCensus standarda.
MicroProfile Fault Tolerance
- Glavna funkcija: Definira fleksibilan sustav za izgradnju otpornih (resilient) aplikacija.
- Važnost: Ključno za mikroservise kako bi ostali funkcionalni unatoč djelomičnim kvarovima.
- Strategije:
- Politike usmjeravanja: Određuju hoće li se i kada izvršiti određena logika (npr. Retry, Timeout, Circuit Breaker).
- Zamjene (Fallback): Nude alternativni rezultat u slučaju da primarno izvršenje ne završi uspješno.
MicroProfile OpenAPI
- Ugovorni model: Za povezivanje klijenata i pružatelja usluga potreban je jasan ugovor. OpenAPI v je za RESTful servise ono što je WSDL za SOAP servise.
- Java model: Pruža skup Java sučelja koja programerima omogućuju izvorno stvaranje OpenAPI dokumentacije direktno iz koda napisanog pomoću Jakarta RESTful Web Services (JAX-RS).
- Anotacije:
@Operation: Opisuje sažetak operacije (npr. summary = "Get a personalized greeting").@APIResponses: Definira moguće odgovore (npr. kod za uspjeh, za neispravan unos).@Parameter: Opisuje parametre upita (name, description, example, required).
MicroProfile JWT Authentication
- Sigurnost RESTful servisa: Servisi su tipično bez stanja (stateless). Sigurnosni kontekst šalje se sa svakim zahtjevom.
- Standardi: Temelji se na OAuth2, OpenID Connect (OIDC) i JSON Web Tokens (JWT).
- Tehnološki temelji: Oslanja se na JAX-RS, CDI i JSON-P.
- Ključne prednosti žetona (tokens):
- Servisi ne moraju pohranjivati stanje klijenta.
- Lokalna provjera valjanosti žetona bez pozivanja vanjskih servisa.
- Analiza identiteta pozivatelja i provođenje autorizacijskih politika.
- Podrška za delegaciju i oponašanje (impersonaciju).
- Entiteti u sustavu:
- Izdavatelj (Issuer): Odgovoran za izdavanje žetona nakon uspješne autentikacije.
- Klijent (Client): Aplikacija za koju je žeton izdan; može biti posrednik.
- Subjekt (Subject): Entitet na koji se podaci u žetonu odnose.
- Poslužitelj resursa (Resource Server): Aplikacija koja koristi žeton za provjeru pristupa zaštićenom resursu.
Implementacije i Alati
- Glavne implementacije:
- Quarkus: Podržava verziju ().
- Helidon: Verzija podržava MP .
- Open Liberty: Verzija podržava MP .
- WildFly: Verzija podržava MP .
- Payara Micro: Verzija podržava MP .
- Apache TomEE: Verzija podržava MP .
- SmallRye: Sastavni dio Quarkusa, Open Libertyja i WildFlyja.
- MicroProfile Starter: Web alat za generiranje kostura projekta dostupan na
https://start.microprofile.io/.
Tehnička Priprema i Izvršavanje (Primjer Payara Micro)
- Maven naredbe:
- Pažnja na
pom.xmldependency management spayara-bom. - Čišćenje i pakiranje:
mvn clean package. - Izgradnja Docker slike:
mvn docker:build.
- Pažnja na
- Docker pokretanje:
docker run -p 8080:8080 payara.microprofile.config:1.0.0.
- Izravno izvršavanje (Java JAR):
java -Dgav=edu.unizg.foi.nwtis.dkermek:payara.microprofile.config:1.0.0 -jar payara-micro.jar --deploy [putanja_do_war_datoteke] --contextroot / --autoBindHttp.