Jakarta EE — Cheat Sheet

Tag: java, jakarta ee, java ee, cdi, jpa, jax-rs, enterprise

Livello: intermedio

TL;DR: Specifiche enterprise per Java gestite dalla Eclipse Foundation. Il passaggio critico è la migrazione del namespace da javax.* a jakarta.*.

Concetti chiave

Rappresenta l'evoluzione diretta di Java EE dopo il passaggio alla Eclipse Foundation.

Fornisce specifiche standard (interfacce) che i server applicativi implementano (GlassFish, WildFly, Payara).

CDI (Contexts and Dependency Injection): Gestione del ciclo di vita dei bean e iniezione delle dipendenze.

JPA (Jakarta Persistence): Specifica per ORM e persistenza dei dati relazionali (Hibernate è un'implementazione tipica).

JAX-RS (Jakarta RESTful Web Services): Standard per la creazione di API REST.

Si divide in profili: Web Profile per applicazioni leggere e Full Profile per sistemi enterprise complessi.

Tomcat e Jetty non sono server completi Jakarta EE, ma implementano solo parzialmente (Servlet, JSP).

Domande tipiche e risposte pronte

Q: Qual è il cambiamento più impattante introdotto con Jakarta EE 9?R: Il cambio totale del namespace da javax.* a jakarta.*. È stata una breaking change obbligata per questioni di copyright con Oracle.

Q: Che differenza c'è tra Spring Boot e Jakarta EE?R: Spring Boot è un framework opinionated e autonomo. Jakarta EE è un insieme di specifiche standard che richiedono un application server o un runtime compatibile per funzionare.

Q: Cos'è JPA e come si relaziona con Hibernate?R: JPA è solo la specifica ufficiale (le interfacce e le annotazioni). Hibernate è la libreria concreta che implementa quelle specifiche sotto il cofano.

Insidie e errori comuni

Dimenticare di aggiornare gli import da javax.* a jakarta.* quando si migrano vecchi progetti.

Includere librerie di terze parti o framework vecchi che dipendono ancora dal namespace javax, causando conflitti a runtime.

Confondere lo scope dei bean (es. @RequestScoped vs @ApplicationScoped), causando leak di memoria o dati condivisi in modo errato tra richieste.

Snippet e comandiJava

```import jakarta.inject.Inject;

import jakarta.enterprise.context.RequestScoped;

import jakarta.ws.rs.Path;

import jakarta.ws.rs.GET;

import jakarta.ws.rs.Produces;

import jakarta.ws.rs.core.MediaType;

@Path("/api")

@RequestScoped

public class ApiResource {

@Inject

private DataService dataService;

@GET

@Path("/status")

@Produces(MediaType.APPLICATION_JSON)

public String getStatus() {

return dataService.checkStatus();

}

}

```

Da ripassare

[ ] Dettagli sui profili Jakarta EE (Web, Core, Full) e relative specifiche incluse

[ ] Gestione delle transazioni con JTA (Jakarta Transactions) e l'annotazione @Transactional

Jarvis Interviews
Jarvis