JavaRush /Java Blog /Random-IT /Pausa caffè #119. Introduzione a Java Enterprise Edition ...

Pausa caffè #119. Introduzione a Java Enterprise Edition (Java EE)

Pubblicato nel gruppo Random-IT
Fonte: Dev.to Java Enterprise Edition (Java EE) è un insieme di specifiche e documentazione per il linguaggio Java che descrive un'architettura di piattaforma server per risolvere i problemi delle medie e grandi imprese. Pausa caffè #118.  Introduzione a Java Enterprise Edition (Java EE) - 1Quando impari Java EE incontrerai i seguenti termini:
  • Un server delle applicazioni è un'implementazione concreta delle specifiche astratte Java EE. Esempi: Payara Server (Glassfish), IBM OpenLiberty e JBoss Wildfly.

  • Una Java Specifica Richiesta (JSR) è una richiesta formale alla comunità Java per aggiungere e migliorare le tecnologie. È un organismo che standardizza le API sulla piattaforma tecnologica Java e viene utilizzato per raggruppare le API in blocchi, come JAX-RS (Java API for RESTful Web Services). Per ogni JSR esiste sempre un'implementazione di riferimento predefinita.

  • Un'implementazione di riferimento è un'implementazione/implementazione concreta di una JSR astratta. Ad esempio, l'implementazione di riferimento per JAX-RS si chiama Jersey. Java EE stesso è un JSR. Pertanto, il server delle applicazioni è una raccolta di diverse implementazioni di riferimento Java EE JSR. Java EE è JSR 366 e una delle sue implementazioni di riferimento è Glassfish 5.

  • Jakarta EE è il nuovo nome di Java EE a partire dal 2018. Attualmente Oracle ha trasferito la piattaforma Java sotto la gestione della Eclipse Foundation .

Nozioni di base su JavaEE

Esistono tre API chiave in Java EE:
  1. API di persistenza Java (JPA). È responsabile dell'archiviazione e del recupero delle informazioni dai database relazionali, che possono essere estesi per funzionare con i database NoSQL. Questo è il livello dati nell'applicazione.

  2. Iniezione di contesto e dipendenza (API CDI). È un modo standardizzato per ridurre l'accoppiamento nelle applicazioni. Gestisce le varie interazioni dei componenti per garantire il disaccoppiamento libero.

  3. API Java per servizi Web RESTful (JAX-RS). Fornisce risorse su HTTP come servizi web.

API di inserimento del contesto e delle dipendenze

L'inserimento delle dipendenze è una forma speciale di controllo dell'inversione (una strategia software in cui i singoli componenti ricevono le proprie dipendenze). Ciò esternalizza la dipendenza nell'applicazione per creare componenti a basso accoppiamento.

Caratteristiche del CDI

  • L'inserimento delle dipendenze (Typesafe) consente di dichiarare dipendenze dai tipi in modo che il compilatore rilevi gli errori in fase di esecuzione.

  • I contesti del ciclo di vita sono la capacità di legare le interazioni del ciclo di vita e dei componenti con stato a componenti del ciclo di vita ben definiti ma estensibili.

  • Gli interceptor consentono di intercettare le richieste di accesso a un metodo specifico.

  • Gli eventi sono un modo per sviluppare applicazioni altamente disaccoppiate. Gli eventi possono essere attivati ​​mentre il metodo Observers è in ascolto degli eventi attivati.

  • Service Provider Interface (SPI) è un insieme di tecniche, API e interfacce che possono essere utilizzate come estensioni, come nella libreria Apache.

Alcuni concetti dell'API CDI:

  • CDI Bean Discovery è un meccanismo in cui il framework di inserimento delle dipendenze analizza e scopre i bean per controllare il modo in cui i bean vengono scoperti per impostazione predefinita, ovvero i bean con annotazioni come @Annotated. Esistono tre tipi di modalità di rilevamento dei bean: TUTTI (compresi i bean senza annotazioni), ANNOTATO e NESSUNO.

  • Un contenitore CDI è un metodo factory in cui le classi Java entrano ed escono con le loro funzionalità e capacità. Questa è l'applicazione che gestisce i bean.

  • Bean e istanze contestuali. Un bean è un modello creato da uno sviluppatore. Un'istanza contestuale è un'istanza di un Bean creata e gestita da un contenitore CDI.

API di persistenza Java

JPA viene utilizzato per mappare oggetti su tabelle di database relazionali. L'API Java Persistence segue i principi del manifesto ORM. Manifesto ORM (manifesto di mappatura relazionale degli oggetti):
  • Oggetti, non tabelle: gli sviluppatori scrivono oggetti, non tabelle.

  • Convenienza, non ignoranza: un ORM dovrebbe essere conveniente. Gli sviluppatori dovrebbero avere una conoscenza minima dei database relazionali. L'ORM non è un modo per nascondere l'ignoranza, ma una comodità.

  • Discreto e trasparente: un ORM dovrebbe fare in modo che gli sviluppatori possano controllare cosa c'è nel database e avere il pieno controllo su ciò che viene salvato. Dati legacy, nuovi oggetti: ORM ti consentirà di creare nuovi oggetti da dati legacy, ovvero ricostruire il database legacy in oggetti Java.

  • Basta, ma non troppo: ORM fornirà tutti gli strumenti per risolvere i problemi più comuni dovuti al disadattamento di impedenza (termine usato per indicare problemi che sorgono a causa delle differenze tra il modello di database e il linguaggio di programmazione). Un ORM non dovrebbe essere eccessivamente pesante.

  • Località e mobilità: i dati sono locali, ma deve essere possibile per lo stato persistente dell'applicazione spostarsi in parti diverse dell'applicazione.

  • API standard, implementazione collegabile: si affida all'API standard, ma può modificare le implementazioni secondo necessità.

Alcuni concetti importanti dell'APP: Entità dell'APP
  • Il componente più modulare degli oggetti JPA è il semplice vecchio oggetto Java (POJO). Ogni oggetto deve avere un identificatore univoco.

  • Le entità JPA utilizzano in genere annotazioni come @MappedSuperClass, che consente l'uso di superclassi contenenti campi di entità comuni. L'annotazione @AttributeOverride viene utilizzata per sovrascrivere le entità della superclasse. @Column viene utilizzato per configurare le mappature del database. L'annotazione @Transient può essere utilizzata per i campi in una classe di entità che non devono essere mappati su un database.

  • Il tipo di accesso è il processo mediante il quale il provider di persistenza accede agli stati in un'entità. L'accesso al campo avviene quando il provider accede ai campi di una classe direttamente tramite la riflessione. L'accesso alla proprietà si verifica quando i metodi della proprietà Java Bean vengono utilizzati per accedere agli stati, ovvero vengono utilizzati getter e setter. Per utilizzare l'accesso alla proprietà, il getter deve essere annotato con @Id. Il tipo di accesso misto utilizza l'accesso sia ai campi che alle proprietà nella stessa classe di entità utilizzando l'annotazione @Access.

API Java per servizi Web RESTful

Limitazioni dell'architettura REST:
  1. Il client e il server sono indipendenti l'uno dall'altro.

  2. Stateless: ogni singola richiesta che arriva al server è autonoma e unica. Il server non fa alcuna ipotesi dalla richiesta precedente.

  3. Cacheability: il sistema deve supportare la memorizzazione nella cache a diversi livelli per migliorare le prestazioni e la scalabilità.

  4. Un'interfaccia unificata significa che il client deve disporre di un'interfaccia unificata comune per accedere alle risorse sul server e per interagire con le risorse sul server. Sistema multilivello: il server può essere implementato in diversi livelli in modo tale che il client non debba preoccuparsi di un sistema multilivello, come ad esempio un server che supporta il bilanciamento del carico.

Alcuni concetti generali relativi a JAX-RS:
  • Metodo HTTP GET: richiesta di una o più risorse. Il metodo di richiesta GET è idempotente, il che significa che effettuare ripetutamente la stessa richiesta al metodo non dovrebbe modificare lo stato della risorsa o dei dati sul server.

  • Metodo HTTP POST: la richiesta POST viene utilizzata per creare nuove risorse sul server. Ciò provoca la modifica del set di dati sul server. POST solitamente ha un corpo in cui viene pubblicato o allegato il payload o qualunque cosa vogliamo creare sul server.

  • Metodo HTTP PUT: utilizzato semanticamente per aggiornare le risorse sul server.

  • Metodo HTTP DELETE: utilizzato per eliminare le risorse sul server.

  • Tipi di contenuto. Esistono diversi tipi di contenuto che possono essere utilizzati e creati tramite metodi di query: XML, CSV, EXCEL, TEXT e JSON.

  • JAX-RS ha il concetto di scrivere il corpo del messaggio. Si tratta di costrutti API utilizzati per convertire i tipi Java nel tipo previsto dal client. L'annotazione @Produces può essere utilizzata per specificare il tipo in cui viene convertita la risposta di un oggetto Java.

  • L'annotazione @Consumes indica al runtime JAX-RS il tipo di contenuto che un determinato metodo di risorsa sta consumando. Il runtime JAX-RS converte quindi il contenuto JSON passato come payload in un oggetto Java il cui tipo è uguale al parametro del metodo.

  • JAX-RS Exception Mapper: un costrutto API utilizzato per mappare le eccezioni alle risposte HTTP. L'annotazione @Provider viene utilizzata per registrare a livello di codice un risolutore di eccezioni con il runtime JAX-RS.

Questa è un'introduzione molto semplice a Java EE. Per creare applicazioni Web utilizzando Java EE, dovrai approfondire ciascuna API chiave.
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION