270 likes | 472 Views
Java Enterprise Edition. Gabriele Tolomei DAIS – Università Ca ’ Foscari Venezia. Programma del Corso. 09/01 – Introduzione 10/01 – Java Servlets 16-17 /01 – JavaServer Pages (JSP) 23-24/01 – Lab: Applicazione “ AffableBean ” 30-31/01 – Enterprise JavaBeans (EJB) + Lab.
E N D
Java Enterprise Edition Gabriele Tolomei DAIS – UniversitàCa’ FoscariVenezia
Programma del Corso • 09/01 –Introduzione • 10/01 – Java Servlets • 16-17/01 – JavaServer Pages (JSP) • 23-24/01 – Lab: Applicazione“AffableBean” • 30-31/01 – Enterprise JavaBeans (EJB) + Lab
EJB 3.0: Introduzione • Componenti server-side cheimplementano la “business logic” di un’applicazione • Gli EJBs cooperanoall’interno di un server Java EE • I possibili “client” degli EJBs sono: • Componenti del Web Tier (locali o remoti al server) • Client remoti (ad es. Java RMI) • Client di Web Service (HTTP/SOAP) • L’ideadegli EJBs èquella di spostaretutta la logicaapplicativa al di fuori del livello “Web”, in un layer appositamentededicato
EJB 3.0: Componenti • 2 componentiprincipalidefinitidallo standard: • Session Beans eseguono la logicaapplicativa, gestiscono le transazioni e ilcontrollodell’accesso • Message-Driven Beans eseguonoazioni (in modoasincrono) in risposta ad eventi (ad es. ricezione di un messaggio JMS) • Ciascunodei due tipi di componenti ha un propriociclo di vita specifico • Il comportamento di ognicomponente EJB èspecificatotramitel’uso di metadati: • Annotazionisulcodice • Descrittori xml come web.xmlnelcasodelle Servlet
EJB 3.0: Componenti (Nota) • Prima di EJB 3.0 venivanoconsideraticomponenti EJB ancheicosiddetti Entity Beans • Poichéanch’essieranogestiti dal container EJB • Gli Entity Beans rappresentano le tabelle di un DB relazionale • A partire da EJB 3.0 gli Entity Beans non sonopiùgestiti dal container EJB ma usanoserviziimplementati da un’opportunainterfaccia (JPA)
Il Container EJB • Gli EJBs vengonoeseguitiall’interno di un apposito container • Uno degliambienti di esecuzionefornitodalleimplementazioni di server Java EE • Fornisceservizi a livello di “sistema”: • Transazioni (compresoquelledistribuite) • Sicurezza • Persistenza (tramite JPA = Java Persistance API) • Esattamente come icomponenti web sonoeseguitinel Web container (Servlet/JSP container), gli EJBs necessitanodeiserviziforniti da un EJB container
EJB: Vantaggi • Semplificano lo sviluppo di applicazioni enterprise distribuite di grandidimensioni • Glisviluppatori di EJBs devonofocalizzarsi solo sullalogica e lasciareilresto al container EJB • Lo sviluppodella UI èsemplificato vista la separazionetrainterfaccia e logica • Portabilità di EJBs sualtri server Java EE (a pattochequestiimplementinoalmeno le stessespecifiche)
EJB: Quando? • Tecnologia utile nelleseguentisituazioni: • Applicazioni con unalogicacomplessachedeveessere “scalabile” (ad es. distribuzione del caricosu diverse istanze server) • Applicazionicherichiedanotransazioni (distribuite) chegarantiscanol’integritàdeidati (il container sioccupa di gestire un correttoaccessoconcorrente ad oggetticondivisi) • Applicazioniaccedute da diversi tipi di client
EJB: Svantaggi • Finoallaspecifica EJB 2.1 le applicazioni EJB eranodifficilmentesviluppabili, deployabili e testabili • Molti file descriptors per la configurazione • Unit testing automaticoimpossibile • … • Alcunisvantaggipersistonoanche in EJB 3.0 • Ad es., l’uso di EJB vincola e costringe la scelta di un server Java EE “completo” (Tomcat, cheè solo un Web container, non puòessereusato!)
EJB: Session Beans • Componentiriusabilichecontengono la logicaapplicativa • I client interagiscono con i Session Beans localmente o remotamente • L’accessoavvienetramiteinvocazione di metodipubblicidell’EJB • 2 tipi di Session Beans: • Stateless Session Beans • Stateful Session Beans
EJB: Stateless Session Beans • Esegue un task per conto di un client di cui NON mantiene lo stato • O meglio lo mantiene per la sola duratadell’invocazione del metodo • Termina al ritornodellachiamata del metodo • Non mantieneinformazioni in memoriasecondaria (disco) • Possonoessere “condivisi” e sonogli EJB piùcomuni • Esempi: invio di email, conversionedellavaluta, …
EJB: Stateful Session Beans • Mantiene le informazioni di stato del client attraversochiamate multiple aimetodidell’EJB • Rilascia lo statounavoltacheil client lo richiede o il bean “termina” • Può dover mantenere lo statosumemoriasecondaria • Solitamenterappresentaentitàtemporanee come il “carrellodellaspesa”
EJB: Message Driven Beans • EJB cheprocessanoimessaggidell’applicazione in modalitàasincrona • Implementati come listener JMS • Simili a Stateless Session Beans • Non mantengonoinformazioni di stato del client • Un unico MDB puòservireimessaggiprovenienti da più client • Gli MDB non espongonointerfacce come i Session Beans
Entity Beans • Rappresentano le tabelle di un RDBMS • Ciascunaistanzacorrisponde ad un record di unaspecificatabella • Ciascunaentità ha un identificativounivoco • Ovviamente, le entitàpossonoavererelazionitra di esse • Ricorda: a partire da EJB 3.0 gli Entity Beans sonointeramentegestiti da JPA
Entity Beans • Le classicherappresentano Entity Beans devonorispettareiseguentirequisiti: • Devonoessere annotate con javax.persistence.Entity • Devonoavere un costruttorevuoto • Senzaparametri • Non possonoesseredichiarate final • Le variabili di istanzapersistentidevonoesseredichiarate private e le proprietàaccedibilitramite getters/setters
Session Beans: Interfacce • A parte gli MDB i Session Beans devonodefinire le interfacce con cui possonoessereinvocatidai client • Le interfacceconsentono di isolarel’implementazionesottostante (facilitandoeventualimodifiche future) • 3 possibiliinterfacce: • Remote Interface • Local Interface • Web Service Interface
Session Beans: Remote Interface • I client possonoessere in esecuzionesu JVM diverse rispettoagli EJB • Utilizzata da: • componenti web (ad es. Servlet) • altriEJB • client dell’applicazione • “Posizione” dell’EJBtrasparenterispetto al client • Il Bean puòesseredistribuito scalabilità
Session Beans: Local Interface • I client devonoessere in esecuzionesullastessa JVM rispetto a quelladegli EJB • Utilizzata da: • componenti web (ad es. Servlet) • altri EJB • “Posizione” dell’EJBdeveesserequella del client • Accoppiamento “forte” tra client e EJB
Session Beans: Web Service Interface • Solo per i Session Beans “Stateless” • I client sono in esecuzionesuuna JVM diversa da quelladegli EJB • Utilizzata da client di Web service tramiteiprotocolliprevistidallespecifiche (SOAP/WSDL su HTTP) • “Posizione” del Bean trasparente • I client possonoessereimplementati in qualsiasilinguaggio di programmazione
Stateless Session Beans: Ciclo di Vita • Istanze create dal container EJB • Mantenute in un “pool” di istanze “pronte” • A fronte di unachiamata di un metodo da parte di un client: • Il container EJB assegnaallachiamataunadelleistanzepronte del bean • Unavoltaeseguitoilmetodol’istanzatornanel pool
Stateful Session Beans: Ciclo di Vita • Il client avviaunasessione • Il costruttore di default del bean vieneinvocato • Le risorsevengono “iniettate” (se presenti) • Il metodo del bean annotato con l’etichetta@PostConstructvieneeseguito • Da questomomentoil bean rimanenella cache per eseguire le altrerichieste del client
Message-Driven Beans: Ciclo di Vita • Il bean riceve un messaggio • Il container EJB ricercaun’istanza del bean disponibilenel pool • Se disponibile, l’istanzavieneusata • Unavoltacompletatal’esecuzione del metodoonMessage() l’istanzatornanel pool • Simile al Stateless Session Bean
Java Persistence API (JPA) • Consente di memorizzare in modoautomaticodaticontenuti in oggetti Java su DB relazionali • Object-Relational Mapping (ORM) • Le applicazionipossonogestire le tabelledei DB relazionali come “normali” oggetti Java • Le classi Java (entità) corrispondono 1:1 alletabellerelazionali definite nel DB
JPA: Vantaggi • Ha unapropriasintassi SQL-like per query statiche e dinamiche • Java Persistence Query Language (JPQL) • Portabilitàrispetto a vari DB • Evitaallosviluppatore di scrivere query di “basso livello” JDBC/SQL • Fornisce in modotrasparenteservizi di caching e ottimizzazionedelle performance
JPA: Provider • Java definisce solo le specifiche standard della JPA API, così come per Servlet, JSP ed EJB • Talispecifichesaranno poi implementate da un cosiddetto provider • Esattamente come Apache Tomcat fornisceun’implementazionedellespecifiche Servlet/JSP (ovvero un web container) • Esattamente come JBoss AS fornisceun’implementazioneconformeallespecifiche Java EE “complete” (web+ejb container) • Esistonovari provider JPA: • EclipseLink • Hibernate • …
JPA + Eclipse • Per aggiungere JPA al progetto EJB Eclipse • Click dx sulprogetto EJB • Properties Project Facets spuntare Java Persistence (JPA 1.0) OK • Click dx sulprogetto EJB • New JPA Entity from Tables…