JavaRush /Java Blog /Random-IT /Introduzione a JavaEE
zor07
Livello 31
Санкт-Петербург

Introduzione a JavaEE

Pubblicato nel gruppo Random-IT
Oggi parleremo di cosa è Java EE: in cosa consiste, quali sono le caratteristiche dell'architettura delle applicazioni Java EE e forniremo descrizioni delle varie tecnologie di questa piattaforma. L’argomento in sé è ampio, ma non ci fermeremo alle nozioni di base. Alla fine faremo un piccolo confronto tra Java EE e Spring Framework e risponderemo alla domanda: “cosa è meglio imparare” (spoiler: ovviamente devi imparare tutto =) ). Introduzione a Java EE - 1Cominciamo dalle basi.

JavaEE: che cos'è?

Java EE è una piattaforma basata su Java SE che fornisce un'API e un ambiente runtime per lo sviluppo e l'esecuzione di applicazioni di rete su larga scala, multilivello, scalabili, affidabili e sicure. Tali applicazioni sono chiamate applicazioni aziendali perché risolvono i problemi affrontati dalle grandi aziende. Tuttavia, non sono solo le grandi aziende e gli enti governativi a trarre vantaggio da questi tipi di applicazioni e dai vantaggi offerti da Java EE. Le soluzioni offerte dalla piattaforma Java EE sono utili, e talvolta semplicemente necessarie, per singoli sviluppatori e piccole organizzazioni.

Sviluppo JavaEE

Java EE è sviluppato attraverso il Java Community Process (JCP), formato nel 1998. Consente alle parti interessate di partecipare alla definizione delle versioni future delle specifiche della piattaforma del linguaggio Java. La base di questo processo sono le JSR (Java Specifica Richiesta), documenti formali che descrivono le specifiche e le tecnologie che si propone di aggiungere alla piattaforma Java. Tali richieste vengono avanzate dai membri della comunità: sviluppatori e aziende ordinari. Questi ultimi includono Oracle, Red Hat, IBM, Apache e molti altri. Quelli. i ragazzi propongono nuove funzionalità e chicche a titolo oneroso che vorrebbero includere in Java. E poi si procede a una votazione, sulla base della quale si decide cosa includere nella versione successiva. La cronologia delle versioni di Java EE è simile alla seguente:
  • J2EE 1.2 (dicembre 1999)
  • J2EE 1.3 (settembre 2001)
  • J2EE 1.4 (novembre 2003)
  • Java EE 5 (maggio 2006)
  • Java EE 6 (dicembre 2009)
  • Java EE 7 (maggio)
  • Java EE 8 (agosto 2017)
  • Giakarta EE 8 (settembre 2019)
Nel 2017 si è verificata una nuova pietra miliare nello sviluppo della piattaforma: Oracle ha trasferito il controllo sullo sviluppo di Java EE alla Eclipse Foundation. E nell'aprile 2018, Java EE è stato ribattezzato Jakarta EE, che è completamente compatibile con Java EE 8.

Architettura dell'applicazione Java EE

Una breve introduzione. Per facilitare la comprensione, parliamo della struttura delle applicazioni Java EE e di alcuni termini che utilizzeremo in seguito. Le applicazioni Java EE hanno una struttura che ha due qualità chiave:
  • Innanzitutto, multilivello. Le applicazioni Java EE sono multilivello e ne parleremo in modo più dettagliato;
  • in secondo luogo, la nidificazione. È presente un server Java EE (o server delle applicazioni), con contenitori di componenti posizionati al suo interno. Questi contenitori ospitano (bingo!) componenti.
Per spiegare l'architettura delle applicazioni Java EE, parliamo innanzitutto dei livelli. Quali sono i livelli? Quali tecnologie Java EE vengono utilizzate a diversi livelli? Successivamente, discuteremo di come i server delle applicazioni, i contenitori dei componenti e i componenti stessi sono interconnessi. Ma tieni presente che tutte queste sono viste da diverse angolazioni sulla stessa cosa, e l'ordine non è così importante qui.

Livelli di applicazione

Le applicazioni multilivello sono applicazioni suddivise secondo principi funzionali in moduli isolati (livelli, strati). In genere (anche nel contesto dello sviluppo Java EE), le applicazioni aziendali sono divise in tre livelli:
  • cliente;
  • livello medio;
  • livello di accesso ai dati.
  1. Il livello client è un'applicazione che richiede dati dal server Java EE (livello intermedio). Il server, a sua volta, elabora la richiesta del client e restituisce una risposta. L'applicazione client può essere un browser, un'applicazione autonoma (mobile o desktop) o altre applicazioni server senza interfaccia grafica.

  2. Il livello intermedio si divide, a sua volta, nel livello web e nel livello della logica di business.

    1. Il livello web è costituito da alcuni componenti che forniscono l'interazione tra i client e il livello della logica aziendale.

      A livello web vengono utilizzate le seguenti tecnologie Java EE:

      • Tecnologia JavaServer Faces (JSF);
      • Pagine server Java (JSP);
      • Linguaggio di espressione (EL);
      • Servlet;
      • Contesti e inserimento delle dipendenze per Java EE (CDI).

    2. Il livello della logica aziendale è costituito da componenti che implementano tutta la logica aziendale dell'applicazione. La logica aziendale è un codice che fornisce funzionalità che coprono le esigenze di alcune aree aziendali specifiche (settore finanziario, bancario, e-commerce). Questo livello può essere considerato il cuore dell’intero sistema.

      Tecnologie coinvolte a questo livello:

      • JavaBean aziendali (EJB);
      • Servizi web RESTful JAX-RS;
      • Entità API Java Persistence;
      • Servizio di messaggistica Java.

  3. Livello di accesso ai dati. Questo livello è talvolta chiamato livello dei sistemi informativi aziendali (EIS). L'EIS è costituito da vari server di database, sistemi di pianificazione delle risorse aziendali ERP (Enterprise Resource Planning) e altre fonti di dati. Il livello della logica aziendale accede a questo livello per i dati.

    A questo livello puoi trovare tecnologie come:

    • API di connettività del database Java (JDBC);
    • API di persistenza Java;
    • Architettura del connettore Java EE;
    • API di transazione Java (JTA).

Server applicativi, contenitori, componenti

Diamo un'occhiata alla definizione di Java EE da Wikipedia. Java EE è un insieme di specifiche e relativa documentazione per il linguaggio Java, che descrive l'architettura della piattaforma server per le attività delle medie e grandi imprese. Per comprendere meglio cosa significa un “insieme di specifiche” in questo contesto, tracciamo un’analogia con un’interfaccia Java. L'interfaccia Java stessa è priva di funzionalità. Definisce semplicemente un contratto in base al quale vengono implementate alcune funzionalità. Ma altre classi implementano l'interfaccia. Inoltre, un'interfaccia può avere diverse implementazioni, ognuna delle quali può differire l'una dall'altra in alcuni dettagli. Con le specifiche tutto è esattamente lo stesso. Naked Java EE è solo un insieme di specifiche. Queste specifiche sono implementate da vari server Java EE. Un server Java EE è un'applicazione server che implementa le API della piattaforma Java EE e fornisce servizi Java EE standard. I server Java EE sono talvolta chiamati server delle applicazioni. I dati del server possono contenere componenti dell'applicazione, ciascuno dei quali corrisponde al proprio livello in una gerarchia a più livelli. Il server Java EE fornisce vari servizi a questi componenti sotto forma di contenitore. I contenitori sono l'interfaccia tra i componenti che ospitano e la funzionalità di basso livello indipendente dalla piattaforma che supporta il componente. I contenitori forniscono servizi specifici ai componenti che ospitano. Ad esempio, la gestione del ciclo di vita dello sviluppo, l'inserimento delle dipendenze, la concorrenza, ecc. I contenitori nascondono la complessità tecnica e aumentano la portabilità. Esistono quattro diversi tipi di contenitori in Java EE :
  1. I contenitori di applet sono implementati dalla maggior parte dei browser. Quando sviluppi applet, puoi concentrarti sul lato visivo dell'applicazione, mentre il contenitore fornisce un ambiente sicuro.

  2. L'Application Client Container (ACC) contiene una serie di classi Java, librerie e altri file necessari per implementare funzionalità quali injection, gestione della sicurezza e servizi di denominazione nelle applicazioni Java SE.

  3. Il contenitore Web fornisce i servizi principali per la gestione e l'esecuzione dei componenti Web (servlet, componenti EJB Lite, pagine JSP, filtri, ascoltatori, pagine JSF e servizi Web). È responsabile dell'istanziazione, dell'inizializzazione e del richiamo delle servlet e del supporto dei protocolli HTTP e HTTPS. Questo contenitore viene utilizzato per fornire pagine Web ai browser client.

  4. Il contenitore EJB (Enterprise Java Bean) è responsabile della gestione e dell'esecuzione dei componenti del modello EJB che contengono il livello della logica aziendale dell'applicazione. Crea nuove entità bean EJB, ne gestisce il ciclo di vita e fornisce servizi quali funzionalità di transazione, sicurezza, concorrenza, distribuzione, denominazione o invocazione asincrona.

Anche in Java EE ci sono quattro tipi di componenti che un'implementazione della specifica Java EE deve supportare:
  1. Le applet sono applicazioni di interfaccia utente grafica (GUI) eseguite in un browser. Sfruttano la ricca API Swing per produrre potenti interfacce utente.

  2. Le applicazioni sono programmi eseguiti sul lato client. Sono in genere un'interfaccia utente grafica (GUI) e utilizzati per l'elaborazione batch.

  3. Applicazioni Web (costituite da servlet e relativi filtri, ascoltatori di eventi Web, pagine JSP e JSF): vengono eseguite in un contenitore Web e rispondono alle richieste HTTP dai client Web. I servlet supportano anche endpoint di servizi Web SOAP e RESTful.

  4. Le applicazioni aziendali (create con Enterprise Java Beans, Java Message Service, Java Transaction API, chiamate asincrone, Time Services) vengono eseguite in un contenitore EJB. Gli EJB gestiti dal contenitore gestiscono la logica aziendale transazionale. È possibile accedervi localmente o in remoto tramite RMI (o HTTP per servizi Web SOAP e RESTful).

Il diagramma seguente mostra una tipica architettura dell'applicazione Java EE: Introduzione a Java EE - 2

Tecnologie

Quindi, abbiamo risolto l'architettura. La struttura generale dovrebbe essere chiara. Nel processo di descrizione dei componenti dell'architettura, abbiamo toccato alcune tecnologie Java EE come EJB, JSP, ecc. Diamo un'occhiata più da vicino a loro. La tabella seguente mostra le tecnologie utilizzate principalmente a livello client:
Tecnologia Scopo
Servlet Classi Java che elaborano dinamicamente le richieste del client e generano risposte (solitamente pagine HTML).
Facce server Java (JSF) Un framework per la creazione di applicazioni Web con un'interfaccia utente. Consente di includere componenti dell'interfaccia utente (ad esempio campi e pulsanti) in una pagina, trasformare e convalidare questi componenti e archiviare questi dati nell'archiviazione lato server.
Tecnologia Java Server Faces Facelets È un sottotipo di applicazione JSF che utilizza pagine XHTML invece di pagine JSP
Pagine server Java (JSP) Documenti di testo compilati in servlet. Ti consente di aggiungere contenuto dinamico alle pagine statiche (come le pagine HTML)
Libreria di tag standard Java Server Pages (JSTL) Una libreria di tag che incapsula le funzionalità principali nel contesto delle pagine JSP.
Linguaggio di espressione Una serie di tag standard utilizzati nelle pagine JSP e Facelet per accedere ai componenti Java EE.
Contesti e inserimento delle dipendenze per Java EE (CDI) Rappresenta un insieme di servizi forniti dai contenitori Java EE per la gestione del ciclo di vita dei componenti, nonché per l'inserimento di componenti negli oggetti client in modo sicuro.
Componenti Java Beans Oggetti che fungono da archivio temporaneo di dati per le pagine dell'applicazione.
La tabella seguente mostra le tecnologie utilizzate a livello di logica di business:
Tecnologia Scopo
Componenti Enterprise Java Beans (enterprise bean). Gli EJB sono bean gestiti che contengono le funzionalità principali di un'applicazione.
Servizi Web RESTful JAX-RS È un'API per lo sviluppo di servizi web conformi allo stile architettonico REST.
Endpoint del servizio Web JAX-WS API per la creazione e l'utilizzo di servizi Web SOAP.
Entità Java Persistence API (JPA). Un'API per accedere ai dati negli archivi dati e convertirli in oggetti del linguaggio di programmazione Java e viceversa.
Bean gestiti Java EE Bean gestiti che forniscono la logica aziendale dell'applicazione ma non richiedono le funzionalità transazionali o di sicurezza dell'EJB.
Servizio di messaggistica Java L'API Java Message Service (JMS) è uno standard di messaggistica che consente ai componenti dell'applicazione Java EE di creare, inviare, ricevere e leggere messaggi. Ciò garantisce una comunicazione distribuita, affidabile e asincrona tra i componenti.
La tabella seguente mostra le tecnologie utilizzate a livello di accesso ai dati:
Tecnologia Scopo
L'API di connettività del database Java (JDBC) API di basso livello per l'accesso e il recupero dei dati dagli archivi dati. Un uso tipico di JDBC è scrivere query SQL su un database specifico.
L'API di persistenza Java Un'API per accedere ai dati negli archivi dati e convertirli in oggetti del linguaggio di programmazione Java e viceversa. API di livello molto più elevato rispetto a JDBC. Nasconde tutta la complessità di JDBC allo sviluppatore sotto il cofano.
L'architettura del connettore Java EE API per la connessione di altre risorse aziendali, come:
  • ERP (Enterprise Resource Planning, sistema di pianificazione delle risorse aziendali),
  • CRM (inglese: Customer Relationship Management, sistema di gestione delle relazioni con i clienti).
L'API Java Transaction (JTA) Un'API per la definizione e la gestione delle transazioni, incluse transazioni distribuite e transazioni su più archivi dati.

Java EE rispetto alla primavera

Spring Framework è considerato un concorrente di Java EE. Se si osserva lo sviluppo di queste due piattaforme emerge un quadro interessante. Le prime versioni di Java EE sono state create con la partecipazione di IBM. Si sono rivelati interessanti, ma goffi, pesanti e scomodi da usare. Gli sviluppatori hanno avuto difficoltà a causa della necessità di mantenere un gran numero di file di configurazione e di altri motivi che complicano lo sviluppo. Allo stesso tempo è nata Spring IoC. Era una biblioteca piccola, bella e facile da usare. Utilizzava anche un file di configurazione, ma a differenza di Java EE, ce n'era solo uno. La semplicità di Spring ha portato al fatto che quasi tutti hanno iniziato a utilizzare questo framework nei propri progetti. E poi Spring e Java EE hanno iniziato il loro percorso verso la stessa cosa, ma da obiettivi diversi. Pivotal Software, lo sviluppatore di Spring, ha iniziato a rilasciare progetto dopo progetto per coprire tutte le esigenze possibili e impossibili degli sviluppatori Java. A poco a poco, quello che prima era chiamato Spring divenne prima uno dei progetti, per poi fondersi completamente con molti altri progetti in Spring Core. Tutto ciò ha comportato l’inevitabile complicazione della Primavera rispetto a quanto era in origine. Nel corso del tempo, è diventato molto difficile tenere traccia dell'intero groviglio di dipendenze di Spring, ed è nata la necessità di una libreria separata che caricasse ed eseguisse tutto da sola (ora l'amato Spring Boot ha singhiozzato da qualche parte). Per tutto questo tempo, JCP ha lavorato su una cosa: ottenere la massima semplificazione di tutto ciò che è possibile all'interno di Java EE. Di conseguenza, in un moderno EJB, per descrivere un bean, è sufficiente specificare un'annotazione sopra la classe, che offre allo sviluppatore l'accesso a tutta la potenza della tecnologia Enterprise Java Beans. E semplificazioni simili hanno interessato ogni specifica all'interno di Java EE. Di conseguenza, Spring e Java EE sono più o meno la parità in termini di funzionalità. Alcune cose sono migliori, altre sono peggiori, ma se guardi a livello globale non ci sono grandi differenze. Lo stesso vale per la complessità del lavoro. Sia Spring che Java EE sono strumenti eccellenti. Forse il migliore attualmente esistente per la creazione di applicazioni di rete aziendale in Java. Tuttavia, Java EE può generalmente funzionare solo all'interno dell'Enterprise Application Server (Tomcat non è uno di essi) e un'applicazione sullo stack Spring può essere eseguita su qualsiasi cosa (sullo stesso Tomcat) e anche senza un server (poiché verrà eseguita al suo interno in modo indipendente). Ciò rende Spring uno strumento ideale per lo sviluppo di piccole applicazioni GUI front-end o architetture di microservizi. Ma l’eliminazione della dipendenza dai server delle applicazioni ha avuto un impatto negativo sulla scalabilità delle applicazioni Spring. E Java EE è particolarmente adatto per implementare un'applicazione cluster monolitica scalabile. Gli sviluppatori che hanno familiarità con lo Spring Framework sono attualmente più richiesti sul mercato del lavoro. Storicamente è successo così: in un’epoca in cui Java EE era eccessivamente complicato, Spring “ha guadagnato una base di clienti”. Eppure, non esiste una risposta chiara alla domanda su cosa imparare Spring o Java EE. A un principiante può essere dato il seguente consiglio. Familiarizza (almeno superficialmente) con entrambe le piattaforme. Scrivi un piccolo progetto domestico sia in Java EE che in Spring. E poi approfondire il quadro che sarà necessario al lavoro. Di conseguenza, il passaggio da Spring a Java EE non sarà difficile.

Risultati

Un argomento su larga scala, ovviamente, non può essere trattato in un articolo! Dopo un sacco di nuovi termini, probabilmente vorrai “applicare” questa conoscenza a un esempio di vita reale. Continueremo quindi a studiare Java EE: nel prossimo articolo troverai lezioni pratiche sulla creazione di un ambiente locale per lo sviluppo di Java EE.
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION