200 likes | 354 Views
Ingegneria del software I. Seminario 3:Enterprise Java Beans. 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.
E N D
Ingegneria del software I Seminario 3:Enterprise Java Beans
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
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.
Deployment di EJBs • 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
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; } }
Home Interface: ConvertitoreHome Package …; Import javax.ejb.*; Import java.rmi.*; Public Interface ConvertitoreHome extends EJBHome { public Convertitore create() throws CreateException, RemoteException }
Remote Interface: Convertitore Package …; Import javax.ejb.*; Import java.rmi.*; Public Interface Convertitore extends EJBObject { public double converti(int lire) throws RemoteException; }
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>
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.class); Convertitore convertitore = (Convertitore) home.create(); double euro= convertitore.converti(8500); System.out.println(“Risultato:”+euro); }catch (Exception e){ System.out.println(e); } } }
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
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
Tipi di entità • Rappresenta dati mantenuti in un database. • Fornisce interfaccia object-oriented al database • Persistenza gestita • dal container • dal bean
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.
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à
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
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
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)