Ingegneria del software I Seminario 3:Enterprise Java Beans Ingegneria del Software I Università La Sapienza 1 Enterprise Java Beans • Architettura per sistema ad oggetti distribuito transazionale, basato su componenti • Mantengono logica di impresa e permettono meccanismo uniforme di comunicazione con client • Agiscono entro un container Ingegneria del Software I Università La Sapienza 2 Enteprise Java Container • Container definisce ambiente sicuro di esecuzione per un bean. • Gestisce tutti gli aspetti runtime – accessi remoti – sicurezza – persistenza – transazioni – concorrenza – accesso a risorse. Ingegneria del Software I Università La Sapienza 3 Comunicazione con client Ingegneria del Software I Università La Sapienza 4 Deployment di EJBs 1. 2. 3. 4. 5. 6. 7. 8. 9. Scrivere una Bean Class Scrivere una Remote Interface Scrivere la Home Interface (create, activate) Scrivere l’ejb-jar.xml Scrivere gli xml per le specifiche piattaforme Creare Naked EJB tramite un jar Trasformare Naked in Deployable Deploy dell’ejb Richiamarlo dal client Ingegneria del Software I Università La Sapienza 5 ConvertitoreBean Package …; Import javax.ejb.*; Import java.util.*; Public class ConvertitoreBean Implements SessionBean { private SessionContext ctx; public ConvertitoreBean() {} public void setSessionContext(SessionContext c){ ctx=c; } public void ejbCreate(); public void ejbRemove(); public void ejbPassivate(); public void ejbActivate(); public double converti(int lire) { return lire/1936.27; } } Ingegneria del Software I Università La Sapienza 6 Home Interface: ConvertitoreHome Package …; Import javax.ejb.*; Import java.rmi.*; Public Interface ConvertitoreHome extends EJBHome { public Convertitore create() throws CreateException, RemoteException } Ingegneria del Software I Università La Sapienza 7 Remote Interface: Convertitore Package …; Import javax.ejb.*; Import java.rmi.*; Public Interface Convertitore extends EJBObject { public double converti(int lire) throws RemoteException; } Ingegneria del Software I Università La Sapienza 8 Naked EJB <!DOCTYPE ejb-jar …> <ejb-jar> <enterprise-beans> <session> <ejb-name>ConvBean</ejb-name> <home>ConvertitoreHome</home> <remote>Convertitore</remote> <ejb-class>ConvertitoreBean</ejb-class> <session-type>Stateless</session-type> <transaction-type>Container</transaction-type> </session> </enterprise-beans> </ejb-jar> Ingegneria del Software I Università La Sapienza 9 Client Package client; Import javax.naming.*; Import java.rmi.*; Import …; Class Client { public static void main(String args[]){ try{ InitialContext ic = new InitialContext(); ConvertitoreHome home = (ConvertitoreHome) PortableRemoteObject.narrow(ic.lookup(“ConvEuro”),ConvertitoreHome.c lass); Convertitore convertitore = (Convertitore) home.create(); double euro= convertitore.converti(8500); System.out.println(“Risultato:”+euro); }catch (Exception e){ System.out.println(e); } } } Ingegneria del Software I Università La Sapienza 10 Responsabilità dell’implementazione • Scheletri per interface EJBHome e EJBObject non implementati dal Bean, ma dal container. • Metodi invocati dal client sono prima gestiti dal container, – applica controlli (e.g. persistenza, transazionalità, accesso) – delega al bean la realizzazione Ingegneria del Software I Università La Sapienza 21 Gestione comunicazione Ingegneria del Software I Università La Sapienza 22 Tipi di Bean • Entity – oggetti che rappresentano entità nella logica di impresa – mantenuto in modo persistente • Session – oggetti che rappresentano processi nella logica di impresa – definiscono caratteristiche dell’attivazione Ingegneria del Software I Università La Sapienza 23 Gerarchia delle classi Bean Ingegneria del Software I Università La Sapienza 24 Tipi di entità • Rappresenta dati mantenuti in un database. • Fornisce interfaccia object-oriented al database • Persistenza gestita – dal container – dal bean Ingegneria del Software I Università La Sapienza 25 Container Managed Persistence • Campi dell’entità associati a elementi nel database • Bean non ha codice per accedere il database. • Accessi e modifiche dei campi passano per il container • Container sincronizza lo stato del bean con il database. Ingegneria del Software I Università La Sapienza 26 Bean Managed Persistence • Entity bean contiene codice di accesso al database (JDBC) • Responsabile per leggere e scrivere il proprio stato nel database. • Necessità di lettura o aggiornamento indicate dal container. • Container può gestire locking e transazionalità Ingegneria del Software I Università La Sapienza 28 Session bean • Gestiscono le interazioni delle entità, accedono a risorse, eseguono compiti per il client • Non sono persistenti • Incapsulano business logic di un’architettura three-tiered Ingegneria del Software I Università La Sapienza 29 Tipi di sessione • Stateless – comportamento simile a procedure: operano solo sugli argomenti passati – sono transienti • Stateful – incapsulano logica di business e stato specifici a un client – Mantengono stato di business fra invocazioni di metodi Ingegneria del Software I Università La Sapienza 30 Message Driven Bean • Client non usano interfacce, inviano messaggi. Bean definisce solo la classe • Simili a stateless session: non legati a client specifico • Container può assegnare un messaggio a qualsiasi istanza del bean • Bean può rispondere a client diversi • Variabili del bean possono mantenere stato, verso altri bean o verso connessioni • Rispondono a messaggi JMS • Comportamento simile a listener. Viene attivato metodo onMessage(Message msg) Ingegneria del Software I Università La Sapienza 31