Enterprise Java Beans (EJB) SAPIENZA Università di Roma Corso di Architetture Software Orientate ai Servizi

Documenti analoghi
! " # $ % & % ' ( $! ) * + *, $ * " (!

Vittorio Scarano. Università degli Studi di Salerno. Lezione 21 Enterprise JavaBeans (7)

Una breve presentazione. Basati sulla specifica EJB Sun Microsystems. Consentono di costruire applicazioni ad oggetti distribuite, utilizzando Java

Gli EJB offrono vari vantaggi allo sviluppatore di una applicazione

Introduzione a Java Servlet Technology

ottobre Fonti Java Platform, Enterprise Edition The Java EE 5 Tutorial [SAP/2e] Chapter 16, J2EE/EJB Luca Cabibbo

Enterprise Java Bean (EJB)

EJB Components. Leonardo Mariani Esercitazione di Sistemi Distribuiti. Oggetti Distribuiti

Componenti (middleware)

Vittorio Scarano. Università degli Studi di Salerno. Lezione 23 Enterprise JavaBeans (8)

EJB Components. Leonardo Mariani Esercitazione di Sistemi Distribuiti. Oggetti Distribuiti

Java Enterprise Edi.on. Gabriele Tolomei DAIS Università Ca Foscari Venezia

Hibernate. Tool per Object Relational Mapping

INTRODUZIONE A J2EE 1.4 E AI SERVIZI WEB ENTERPRISE

Programma didattico. Sviluppare Applicazioni Distribuite in ambiente. Spring MVC

Obiettivo della lezione. Creare e fare il deployment di un Enterprise Javabean

Antonio d Acierno 13/01/2006

Programmazione a oggetti

Basi di Dati. Prof. Alfredo Cuzzocrea Università degli Studi di Trieste. Basi di Dati e Web. Credits to: Prof. M. Di Felice UniBO

Le classi in java. Un semplice programma java, formato da una sola classe, assume la seguente struttura:

Università di Bologna CdS Laurea Magistrale in Ingegneria Informatica I Ciclo - A.A. 2014/ Modelli a Componenti e Enterprise Java Beans (base)

LPR 2005/2006 Lezione 7. paradigma di interazione domanda/risposta remote procedure call RMI (Remote Method Invocation): API JAVA esercizio

L oggetto creato. Creazione di Oggetti. Rectangle: il concetto 10. Costruzione. Lo spazio di memoria del linguaggio Java. Rectangle: l oggetto

Corso Programmazione Java Avanzato

Luca Cabibbo. Persistenza di oggetti

UNIVERSITÀ DEGLI STUDI DI PARMA

Programmazione I - corso B a.a prof. Viviana Bono

Le basi del linguaggio Java

Ereditarietà. Ereditarietà. Ereditarietà. Ereditarietà

Lezione 5 Namespace e JavaDoc

SQL per le applicazioni D B M G

SQL per le applicazioni D B M G

Variabili e Metodi di classe Interfacce e Package Gestione di File in Java

Variabili e Metodi di classe Interfacce e Package File in Java

2011 Politecnico di Torino 1

Dichiarazione di una classe. Dichiarazione ereditarietà

Programmazione Orientata agli Oggetti in Linguaggio Java

Prof. Pagani corrado JAVA

Fondamenti di Informatica

Modelli a Componenti e Enterprise Java Beans

Fondamenti di Programmazione Prof.ssa Elisa Tiezzi. Programmazione orientata a oggetti

2011 Politecnico di Torino 1

Componenti di una applicazione. Esempio: Microsoft Word

Usare e costruire oggetti. Concetti Fondamentali. Interfaccia Pubblica di una. Application Program Interface

Progettazione: Tecnologie e ambienti di sviluppo

Lezione n.10 LPR. RMI CallBacks

MIDDLEWARE E COMPONENTI: direzioni di evoluzione e stato dell'arte

MIDDLEWARE E COMPONENTI: direzioni di evoluzione e stato dell'arte

Corso di Reti di Calcolatori L-A

Serializzazione Java. Serializzazione. Calendario esercitazioni e laboratori. Applicazioni della Serializzazione

Esercizi su Java RMI. Progetto di Cliente / Servitore e supporto. Possibile tabella mantenuta dal server

Serializzazione Java. Serializzazione. Complicazioni 1/2. Complicazioni 2/2. Calendario esercitazioni e laboratori. Applicazioni della Serializzazione

Strategie Di Distribuzione. Strategie Di Distribuzione. Dove Separare. Come Separare

Programmazione. Cognome... Nome... Matricola... Prova scritta del 22 settembre Negli esercizi proposti si utilizzano le seguenti classi:

Laboratorio di Sistemi Polimorfismo Java. Prerequisiti: per la comprensione dell'articolo è necessario conoscere il concetto di Ereditarietà in Java.

Prova d Esame Compito A

Inizializzare oggetti

Ingegneria del Software

Corso di Reti di Calcolatori T

ENTERPRISE JAVABEANS

Interfacce. Esempio: interfaccia I con una sola funzione g() public interface I {

2011 Politecnico di Torino 1

Oggetti Distribuiti e Java RMI

Corso sul linguaggio Java

Obiettivo della lezione. Introdurre il modello a componenti distribuiti, presentando Enterprise JavaBeans di Sun

JNDI. Massimo Merro Programmazione di Rete 214 / 229

Introduzione alle JSP

1 Oggetti e persistenza

Obiettivo della lezione. Presentare Java 2 Enterprise Edition (J2EE) Presentare due tecnologie Java connesse ad Enterprise Java Beans

Gli oggetti. Ogni oggetto ha un interfaccia e ogni oggetto ha un tipo. Incapsulamento. Oggetti. Contatore. Invio di Messaggi

Corso di Progettazione del Software

Programmazione. Cognome... Nome... Matricola... Prova scritta del 11 luglio 2014

Introduzione a Java. Riferimenti

Corso di Applicazioni Telematiche

Università di Bologna CdS Laurea Magistrale in Ingegneria Informatica I Ciclo - A.A. 2010/2011

Prova d Esame Compito A

Programmazione di servizi web SOAP

Programmazione in Java e gestione della grafica (I modulo) Lezione 2: Prime nozioni di Java

Scope e visibilità per classi

public protected private private package

Organizzazione della lezione. Lezione 16 Remote Method Invocation - 4. Modello Client Server. Le classi di Archivio Client-Server

Java: loading dinamico e reflection

Tecnologie e applicazioni web JSON Web Token (JWT)

ORDINAMENTO PER SELEZIONE ORDINAMENTO PER SELEZIONE ORDINAMENTO VELOCE CONFRONTI

Alma Mater Studiorum Università di Bologna. Scuola di Ingegneria e Architettura. Tecnologie Web T. Esercitazione 10 - J2EE

Applicazioni distribuite e sistemi ad oggetti distribuiti. RPC RMI - Web Services 1

Applicazioni distribuite e sistemi ad oggetti distribuiti

Array di array. E' possibile creare strutture a matrice (2D, 3D,..., ND), esempio: double [ ][ ] entrate = new double [NANNI][NMESI];

Verso l architettura MVC-2 i JavaBeans

Alma Mater Studiorum Università di Bologna. Scuola di Ingegneria e Architettura. Tecnologie Web T. Esercitazione 10 - J2EE

Remote Method Invocation

Prova d Esame Compito A

Java SE 7. Introduzione.

ACADEMY SVILUPPATORE JAVA

Transcript:

Enterprise Java Beans (EJB) SAPIENZA Università di Roma Corso di Architetture Software Orientate ai Servizi

Enterprise Java Beans Gli Enterprise Java Beans (EJB) sono componenti scritti in Java che realizzano la logica di business (application layer) di un'applicazione La business logic è il codice che realizza l obiettivo dell applicazione. Ad esempio, in un'applicazione di e-commerce, il metodo orderproduct può essere usato da un client (presentation layer) per ordinare un prodotto. Vivono in un EJB Container, un runtime environment nell Application Server. Il Container gestisce l intero ciclo di vita di un EJB e le sue invocazioni. Fornisce meccanismi ausiliari, come la transazionalità e la sicurezza, in modo trasparente ai client

Benefici degli EJB Gli EJB realizzati coerentemente con le specifiche J2EE possono essere dispiegati (deploy) su differenti Application Server J2EE-Compliant Gli EJB gestiscono la business logic in modo trasparente ai client I client possono essere più leggeri non fat client ma thin client aspetto importante per quei client eseguiti su low-profile devices (es. PDA, SmartPhone, PC poco potenti, ecc...). Gli EJB sono portabili e più EJB possono essere assemblati per formarne di nuovi

Tipi di Enterprise Java Beans Tipo di Enterprise Bean Session Beans Uso Rappresentano le sessioni di interazione con i client. Sono transienti: il loro stato non viene memorizzato in modo persistente in un database o simili. Entity Beans Message-Driven Beans Rappresentano gli oggetti di business dell applicazione. Sono memorizzati in modo persistente. Spesso, un istanza di Entity Bean corrisponde ad una tupla di un DB. Rimangono in ascolto su un topic/coda JMS e si attivano quando un messaggio è inviato a quel topic/coda.

Container

Session Bean Un Session Bean rappresenta un singolo client presso l Application Server. Il client accede al Business Layer di una applicazione invocando i metodi di Session Bean. Dal punto di vista del client, ogni Session Bean è associato ad uno ed uno solo Client Lo stato dell interazione con un client (lo stato Session Bean) è transiente: quando termina la sessione a cui è associato, un Session Bean viene distrutto, insieme con lo stato Una sessione termina quando l utente esplicitamente la rimuove oppure per un periodo di inattività superiore ad un tempo prefissato Esistono due tipi di Session Bean: stateless e stateful

Stateless Session Bean Non mantengono lo stato conversazionale nella sessione con il client Poiché non è previsto uno stato conversazionale, il Container può assegnare un qualsiasi session EJB stateless già esistente a qualsiasi client Il Container può associare lo stesso Stateless Bean a più client per risparmiare memoria Questa politica di allocazione degli Stateless Bean dipende dall implementazione dell'ejb Container ed è trasparente ai client che credono di avere uno stateless session bean dedicato.

Stateful Session Bean Mantengono lo stato conversazionale nella sessione con il client Ogni Stateful Session Bean è associato sempre ad un solo client Per esempio, un carrello della spesa è un candidato Session EJB di tipo Stateful L invocazione ad opportuni metodi add permettono di aggiungere oggetti al carrello e un metodo completeorder chiude l ordine, invocando un Entity Bean per la memorizzazione dell ordine.

Ciclo di vita di Session Bean Stateless

Ciclo di vita di Session Bean Stateful

Creazione di Session Bean Stateless: l'interfaccia remota 1. Scrivere l interfaccia remota che descrive i metodi implementati dal Bean per fornire il servizio. import javax.ejb.remote; @Remote public interface CalcolatriceRemota { public int addiziona(int x, int y); public int sottrai(int x, int y);

Creazione di Session Bean Stateless: implementazione 2. Codificare la classe che implementa l'interfaccia import javax.ejb.stateless; @Stateless(name="Calcolatrice") public class CalcolatriceBean implements CalcolatriceRemota { public int addiziona(int x, int y) { return x + y; public int sottrai(int x, int y) { return x y;

Creazione di Session Bean Stateless: implementazione 2. Codificare la classe che implementa l'interfaccia import javax.ejb.stateless; @Stateless(name="Calcolatrice") @Remote(CalcolatriceRemota.class) public class CalcolatriceBean { public int addiziona(int x, int y) { return x + y; public int sottrai(int x, int y) { return x y;

Creazione di Session Bean Stateless: implementazione 2. Codificare la classe che implementa l'interfaccia import javax.ejb.stateless; @Stateless(name="Calcolatrice") @Remote(CalcolatriceRemota.class) public class CalcolatriceBean implements CalcolatriceRemota { public int addiziona(int x, int y) { return x + y; public int sottrai(int x, int y) { return x y;

Scrittura del client / 1 Il codice del client tipicamente effettua i seguenti passi: 1. Effettua il look-up per ottenere un riferimento ad un'istanza che implementi l interfaccia remota del Session Bean, tramite JNDI 2. Chiama i metodi di business sull oggetto EJB ottenuto Per poter compilare ed eseguire il codice del client, occorre includere: 1. le librerie client dell Application Server ad esempio, in JBoss $JBOSS_HOME/client/jbossall-client.jar 2. file bytecode delle classi adoperate interfacce remote classi DTO

Scrittura del client / 2 public static void main(string args[]) { Properties prop = new Properties(); prop.put(context.initial_context_factory, "org.jnp.interfaces.namingcontextfactory"); prop.put(context.url_pkg_prefixes, "org.jnp.interfaces"); prop.put(context.provider_url, "localhost"); Context ctx = new InitialContext(prop); Object obj = ctx.lookup("calcolatrice"); CalcolatriceRemota calc = (CalcolatriceRemota) javax.rmi.portableremoteobject.narrow(obj, CalcolatriceRemota.class); System.out.println( "4 + 5 = " + calc.addiziona(4, 5) ); Informazioni necessarie per inizializzare il Contesto JNDI Init del Context JNDI Acquisizione del riferimento al Bean Utilizzo del Bean

Le interfacce locali Le interfacce remote realizzano invocazioni, passaggio dei parametri e dei valori di ritorno attraverso la serializzazione ed il marshalling, in un ambiente client/server distribuito Le interfacce locali sono adoperate da client che devono risiedere nella stessa JVM del bean acceduto e.g. componenti web, altri enterprise bean import javax.ejb.local; @Local public interface CalcolatriceLocale { public int moltiplica(int x, int y); public int dividi(int x, int y);

Le interfacce locali L'ottenimento da parte del local client del riferimento ai bean acceduti è molto più semplice gestito dal container import javax.ejb.ejb; //... @Stateless public class CalcolatriceGlobale { @EJB private CalcolatriceLocale calc; //... public int moltiplica(int x, int y) { return this.calc.moltiplica(x, y);

Message-Driven Bean Un Message-Driven Bean è un componente EJB che consuma messaggi da una queue/topic, inviati da un valido client JMS Un MDB è disaccoppiato da qualsiasi client che invia messaggi JMS Un client non può accedere al Bean attraverso alcuna interfaccia. Il MDB non ha interfacce locali né remote. Un MDB non ritorna valori né rilancia mai eccezioni ai client I MDB sono stateless (non mantengono stato conversazionale)

Ciclo di vita di Message Driven Bean

Esempio import javax.ejb.messagedriven; import javax.jms.messagelistener; import javax.ejb.activationconfigproperty; //... @MessageDriven( activationconfig = { @ActivationConfigProperty( propertyname = "destinationtype", propertyvalue = "javax.jms.queue"), @ActivationConfigProperty( propertyname="destination", propertyvalue="queue/messaggi") ) public class MessaggioBean implements MessageListener { public void onmessage(message m) { TextMessage tm = (TextMessage)m; String text = tm.gettext(); System.out.print("Ricevuto messaggio:"); System.out.println(text);

Entity Bean / 1 Rappresenta un oggetto del business conservato in un meccanismo di memoria persistente, i.e., database relazionale (e.g., utenti, prodotti nel carrello) tipicamente un entity bean corrisponde ad una tabella in un database relazionale, ed ogni istanza del bean corrisponde ad una riga nella tabella prevedono l'esistenza di proprietà definite chiavi primarie per essere identificati univocamente possono essere legati ad altri entity bean da relazioni di molteplicità one-to-one one-to-many many-to-one many-to-many con riferimenti unidirezionali bidirezionali

Entity Bean / 2 Persistenza Due tipi Condivisi Gestita dal bean il codice del bean contiene le chiamate al database Gestita dal contenitore il container EJB genera automaticamente le chiamate al database Possono essere condivisi fra vari client Poiché diversi clienti possono volere cambiare gli stessi dati, è importante che siano dotati di un meccanismo di transazioni Di norma, il container fornisce la gestione delle transazioni

Entity Bean / 3 Chiave primaria Ogni entity bean ha un unico identificatore un entity bean Studente può essere identificato dal campo matricola La chiave primaria permette al gestore degli entity bean di individuare l'oggetto Relazioni Come in un database relazionale, gli entity bean possono essere collegati da relazioni Se la persistenza è gestita dal bean allora nel codice del bean devono essere esplicitamente gestite le relazioni gestita dal contenitore allora il container gestisce le relazioni in modo trasparente allo sviluppatore

Persistenza gestita dal container Il container EJB gestisce tutti gli accessi al database necessari; il codice del bean non contiene istruzioni SQL il bean non è legato ad uno specifico database se il bean è installato su un server diverso da quello di sviluppo iniziale, non occorre modificare o ricompilare il codice dal bean il bean è portabile per generare gli accessi al database il container necessita di meta-dati schema astratto dell'entity bean definisce i campi persistenti del bean e le sue relazioni con altri entity bean astratto per distinguerlo dallo schema concreto del/dei database a cui il bean sarà collegato

Entity Bean / esempi (1) package it.uniroma1.dis.sis.wster.db; import java.util.list; import javax.persistence.*; @Entity public class Author implements java.io.serializable { @Id @GeneratedValue private Long id; @Column(nullable=false) private String name; @OneToMany(mappedBy="author") @OrderBy("title") private List<Song> songs; // seguono getter e setter...

Entity Bean / esempi (2) package it.uniroma1.dis.sis.wster.db; import java.util.list; import javax.persistence.*; @Entity public class Album implements java.io.serializable { @Id @GeneratedValue private Long id; @Column(nullable=false) private String title; // per default, anche year è una colonna, nullable! private Short year; @OneToMany(mappedBy="album") @OrderBy("title") private List<Song> songs; // seguono getter e setter...

Entity Bean / esempi (3) package it.uniroma1.dis.sis.wster.db; import javax.persistence.*; @Entity @NamedQueries( { @NamedQuery(name="getSongByTitle", query="select s FROM Song s" + " WHERE s.title LIKE" + " CONCAT('%', CONCAT(:title, '%'))" + " ORDER BY s.title, s.id"), @NamedQuery(name="getSongByAuthor", query="select s FROM Song s" + " WHERE s.author.name LIKE" + " CONCAT('%', CONCAT(:authorName, '%'))" + " ORDER BY s.title, s.author.name, s.author.id") ) public class Song implements java.io.serializable {// continua...

Entity Bean / esempi (4) public class Song implements java.io.serializable { @Id @GeneratedValue private Long id; @Column(nullable=false) private String title; @ManyToOne(fetch=FetchType.EAGER, optional=false) private Author author; @ManyToOne(fetch=FetchType.EAGER) private Album album; @Column(nullable=false) private String url; // seguono getter e setter...

Packaging di applicazioni basate su EJB Per dispiegare l'applicazione su Application Server occorre creare un pacchetto JAR strutturato come in figura, e copiarlo all'interno della directory $JBOSS_HOME/ server/default/deploy