Tema5

346 views

Published on

Published in: Education, Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
346
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Tema5

  1. 1. Java 2 Enterprise Edition Tema 5 EJB (Enterprise Java Beans)
  2. 2. Les capes de negoci i d’integració  Per a implementar aquestes dues capes, J2EE promou un tipus de components distribuïts anomenats Enterprise JavaBeans (EJB) 2
  3. 3. Enterprise Java Beans  Els EJB són components de lògica de negoci per al desenvolupament d’aplicacions distribuïdes basades en components.  Els EJB són components desenvolupats amb Java que compleixen unes especificacions i, per tant, es poden desplegar a qualsevol contenidor d’EJB d’un servidor d’aplicacions compatible amb la plataforma J2EE.  Els EJB segueixen un model de components en el qual el contenidor implementa un conjunt de serveis de baix nivell (seguretat, transaccions, etc.) i els desenvolupadors es poden centrar en la lògica de negoci. 3
  4. 4. Serveis del contenidor als EJB  El contenidor proporciona, entre altres, els següents serveis de baix nivell:  Concurrència. Gestiona l’accés concurrent als components.  Seguretat. Permet definir declarativament polítiques de seguretat i restriccions d’accés als components  Transaccions. Permet definir declarativament el comportament transaccional dels mètodes dels components. També es pot definir el comportament transaccional de manera programàtica.  Cicle de vida. El contenidor s’encarrega de crear i destruir les instàncies dels components.  Persistència. Permet definir components que gestionin declarativament la persistència de les entitats a bases de dades relacionals. 4
  5. 5. Tipus d’EJB  L’especificació d’EJB defineix tres tipus bàsics d’EJB:  EJB de sessió (SessionBean). En aquest tipus de components hi ha la implementació dels mètodes de negoci.  EJB d’entitat (EntityBean). Aquests components permeten representar en forma d’objectes Java dades de taules de bases de dades relacionals.  EJB de missatge (MessageDrivenBean). Es fan servir per a interactuar amb missatgeria asíncrones. 5
  6. 6. Els EJB des del client  Un client, sigui una aplicació o un altre EJB, no treballa directament amb els EJB del sistema d’EJB.  Els clients interactuen amb un conjunt d’interfícies que proveeixen l’accés als components i la seva lògica de negoci: l’API JNDI i l’API del client EJB.  El JNDI permet de trobar els EJB i accedir-hi independentment de la seva localització a la xarxa.  L’API del client EJB és un conjunt d’interfícies i classes que els programadors utilitzen al client per a interactuar amb els EJB. 6
  7. 7. Què forma un EJB? (1)  Un component EJB no és un únic fitxer sinó que n’està format per diversos:  Fitxers de codi Java desenvolupats pel desenvolupador  Altres fitxers de codi Java generats automàticament pel contenidor  Un fitxer XML amb el descriptor de desplegat. 7
  8. 8. Què forma un EJB? (2)  Els fixers que formen part d’un component EJB són:  Classe de l’EJB  Interfície remota  Interfície remota d’inici  Interfície local  Interfície local d’inici  Descriptor de desplegament 8
  9. 9. Classe de l’EJB  Classe Java que conté la implementació del component, típicament la lògica de negoci.  Exemple: public class HolaBean implements SessionBean { // mètodes del cicle de vida public void ejbActivate() {} public void ejbRemove() {} public void ejbPassivate() {} public void setSessionContext(SessionContext ctx) {} // metode de creació de la instància public void ejbCreate () throws CreateException {} // mètode de negoci public String diguesHola() { return “Hola!!”; } } 9
  10. 10. Interfície remota  Interfície Java amb els mètodes que poden cridar els clients.  Exemple: public interface Hola extends EJBObject { public String diguesHola() throws RemoteException; } 10
  11. 11. Interfície remota d’inici  Interfície Java amb els mètodes de gestió del cicle de vida del component que poden cridar els clients (creació, destrucció i cerca).  Exemple: public interface HolaHome extends EJBHome { public Hola create() throws CreateException, RemoteException; } 11
  12. 12. Interfícies locals i locals d’inici (1)  Els objectes locals permeten interactuar amb EJBs dins la mateixa màquina virtual com si estiguéssim fent crides a procediments d’objectes locals.  Hi ha una interfície local per a definir els mètodes de negoci (equivalent a la interfície remota) i una interfície local d’inici per a definir els mètodes del cicle de vida (equivalent a la interfície remota d’inici). 12
  13. 13. Interfícies locals i locals d’inici (2)  Interfície local: public interface HolaLocal extends EJBLocalObject { public String diguesHola(); }  Interfície local d’inici: public interface HolaLocalHome extends EJBLocalHome { Hola create() throws CreateException; } 13
  14. 14. Descriptor de desplegat (1)  És un fitxer XML on es defineixen els serveis del contenidor que necessita el component.  Alguns serveis que es defineixen al descriptor de desplegat són: cicle de vida, requeriments de seguretat, requeriments transaccionals, requeriments de persistència, etc.  A l’especificació 2.x d’EJB aquest fitxer s’anomena ejb-jar.xml. 14
  15. 15. Descriptor de desplegat (2)  Exemple: <ejb-jar> <enterprise-beans> <session> <ejb-name>hola</ejb-name> <home>HolaHome</home> <remote>Hola</remote> <local-home>HolaLocalHome</local-home> <local>HolaLocal</local-home> <ejb-class>HolaBean</ejb-class> <session-type>Stateless</session-type> <transaction-type>Container</transaction-type> </session> </enterprise-beans> </ejb-jar> 15
  16. 16. Descriptor de desplegat específic  La majoria de proveïdors de servidors d’aplicacions tenen descriptors de desplegat específics per a configurar algun comportament del servidor que no s’especifiqui al descriptor de desplegat estàndard.  Per exemple el servidor d’aplicacions JBoss defineix el fitxer jboss.xml per configurar el comportament específic del servidor. 16
  17. 17. Fitxer ejb-jar  Aquests fitxers s’han d’empaquetar en un fitxer .jar comprimit per a formar el mòdul que es pot desplegar al servidor d’aplicacions.  Podem especificar més d’un EJB en un únic fitxer ejb-jar.  Estructura d’un fitxer ejb-jar: 17
  18. 18. Convencions de noms  Hi ha una sèrie de recomanacions a l’hora de posar nom als diferents fitxers que formen el component.  Per un EJB de sessió sense estat anomenat Hola, tendríem:  La classe del EJB s’anomenarà HolaBean.  La interfície remota s’anomenarà Hola.  La interfície remota d’inici s’anomenarà HolaHome.  La interfície local s’anomenarà HolaLocal.  La interfície local d’inici s’anomenarà HolaLocalHome.  El descriptor de desplegat s’anomenarà ejb-jar-xml.  El fitxer ejb-jar s’anomenarà Hola.jar. 18
  19. 19. Crida a un mètode d’un EJB  Exemple: // Obtenim una referència a l’arbre JNDI del servidor Context ctx = new InitialContext(); // Obtenim una referència al EJB Home (suposem que s’ha // penjat el components al JNDI del servidor d’aplicacions // amb el nom "ejb/hola" Object obj = ctx.lookup("ejb/hola"); HolaHome holaHome = (HolaHome) PortableRemoteObject.narrow(obj,HolaHome.class); // Creem el EJB Object a partir del EJB Home obtingut Hola hola = holaHome.create(); // Cridem al mètode de negoci System.out.println(hola.diguesHola()); 19
  20. 20. Diàleg entre el client i el servidor (1) 20
  21. 21. Diàleg entre el client i el servidor (2) 1) S’obté una referència a l’arbre JNDI del servidor d’aplicacions. 2) S’obté una referència a l’EJB Home del component que volem fer servir. 3) Es fa a una crida al mètode create() de l’EJB Home per a obtenir una referència al EJB Object. 4) L’EJB Home reb la petició de creació i crida al mètode create(), que crea una instància de l’EJB Object 5) L’EJB Home li torna un EJB Object al client. 6) El client crida al mètode diguesHola() de l’EJB Object per a invocar al mètode de negoci. 7) L’EJB Object reb la petició del mètode de negoci i crida al mètode diguesHola() de l’EJB Object. Aquest mètode executa tot el codi configurat al descriptor de desplegat que té associat el mètode diguesHola() i, finalment, crida al mètode diguesHola() de la classe EJB que hem programat. 21

×