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 6.06.0: Usklađen s Jakarta EE 1010 Core Profile.
    • MicroProfile 7.07.0: Usklađen s Jakarta EE 1010 Core Profile. Datum izdanja: 22.8.2024.22.8.2024..
    • MicroProfile 7.17.1: Usklađen s Jakarta EE 1010 Core Profile. Datum izdanja: 17.6.2025.17.6.2025..
  • Tehnički preduvjeti: Minimalna potrebna verzija je Java SE 1111.

Jakarta EE Core Profile 1010 Komponente

MicroProfile se oslanja na skup tehnologija unutar Jakarta EE Core Profile 1010. Obavezne komponente uključuju:

  • Jakarta Annotations 2.12.1
  • Jakarta Contexts and Dependency Injection (CDI) 4.04.0 (posebno CDI Lite sekcija)
  • Jakarta Dependency Injection 2.02.0
  • Jakarta Interceptors 2.12.1
  • Jakarta JSON Processing 2.12.1
  • Jakarta JSON Binding 3.03.0
  • Jakarta RESTful Web Services 3.13.1

MicroProfile Config 3.13.1

  • 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 @Inject u 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.

MicroProfile Health 4.0.14.0.1

  • 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 5.1.05.1.0

  • 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 2.12.1

  • 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 4.14.1

  • 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 4.14.1

  • Ugovorni model: Za povezivanje klijenata i pružatelja usluga potreban je jasan ugovor. OpenAPI v3.13.1 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 200200 za uspjeh, 400400 za neispravan unos).
    • @Parameter: Opisuje parametre upita (name, description, example, required).

MicroProfile JWT Authentication 2.12.1

  • 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 6.16.1 (7.07.0).
    • Helidon: Verzija 4.4.04.4.0 podržava MP 6.16.1.
    • Open Liberty: Verzija 26.0.0.426.0.0.4 podržava MP 7.07.0.
    • WildFly: Verzija 39.0.1.Final39.0.1.Final podržava MP 7.07.0.
    • Payara Micro: Verzija 7.2026.47.2026.4 podržava MP 6.16.1.
    • Apache TomEE: Verzija 10.1.410.1.4 podržava MP 6.16.1.
    • 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.xml dependency management s payara-bom.
    • Čišćenje i pakiranje: mvn clean package.
    • Izgradnja Docker slike: mvn docker:build.
  • 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.