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.*.
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).
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.
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.
```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();
}
}
```
[ ] Dettagli sui profili Jakarta EE (Web, Core, Full) e relative specifiche incluse
[ ] Gestione delle transazioni con JTA (Jakarta Transactions) e l'annotazione @Transactional