SCBCD 1. generic ejb

539 views

Published on

Published in: Technology, Education
  • Be the first to comment

SCBCD 1. generic ejb

  1. 1. <ul>Why EJB </ul><ul>Francesco Ierna </ul>
  2. 2. <ul>Why EJB </ul><ul><li>Facilità d'uso. Infatti EJB 3 è il più semplice server side development platform around
  3. 3. Stack Server solution </li></ul><ul><ul><li>Persistence (EntityManager)
  4. 4. Messaging (JMS e MDB)
  5. 5. Scheduling (TimerService)
  6. 6. Remoting (RMI)
  7. 7. Web services
  8. 8. DI (Container)
  9. 9. Interceptors (ICP) </li></ul></ul><ul><li>Open JAVA EE Standard
  10. 10. Broad Vendor support. Supportato da un grande numero di organizzazioni
  11. 11. Stabile, high quality code base
  12. 12. Clustering, load balancing and failover </li></ul>
  13. 13. <ul>DI </ul><ul><li>Il Dipendent Iniection permette di delegare la responsabilità della creazione dei bean dalla classe al container.
  14. 14. Tightly accoppiamento fra EJB e Presentation Layer
  15. 15. Il container crea l'istanza dell'oggetto allo start dell'applicazione o alla richiesta di un client e lo inietta all'interno di una classe in cui lo si vuole usare </li></ul>
  16. 16. <ul>First taste to EJB </ul><ul><li>Librerie che servono al container EJB per esporre i servizi
  17. 17. Le risorse degli EJB non sono condivise con gli altri EJB. Una lookup instanzia un nuovo oggetto solo in questi casi saranno condivise </li><ul><li>Oggetti immutabili come stringhe
  18. 18. Oggetti dichiarati singleton
  19. 19. Oggetti con JNDI name di tipi condiviso come ORB. </li></ul></ul>
  20. 20. <ul>Regole Generali EJB </ul><ul><li>Enterprise Bean Provider  : Ejb ed è dichiarato tramite XML attraverso ejb-jar.xml contiene
  21. 21. NO GESTIONE </li><ul><li>Read/write static fields per i problemi relativi all'uso del bean da parte di diverse JVM su diverse application. Infatti i campi statici sono variabili di classe cioè associate al loader della classe da parte della JVM. Cambiando JVM il valore della variabile sarà diverso nelle diverse JVM
  22. 22. Thead syncrho . Container già gestisce la concorrenza fra le richieste dei clients
  23. 23. No AWT functionality . ES : keyboard etc per problemi relativi alla sicurezza.
  24. 24. Java.io.package per provare ad accedere a files e directory, per problemi relativi alla sicurezza.
  25. 25. No listen socket , connession su socket or uso di socket per multicast
  26. 26. No create, ottenere, context class loader . Settare sicurezza, fermare JVM sono riservati all'EJB Container
  27. 27. No caricare navite library
  28. 28. No accesso a java.package degli EJB . Riservata all'EJB Container
  29. 29. No access file descriptor
  30. 30. No Security policy per code source, access modify ma riservata all'EJB Container </li></ul></ul>
  31. 31. <ul>Regole Generali EJB </ul><ul><li>Obbligatorio : </li><ul><li>Deve essere pubblica, no final e non astratta. Top-Level
  32. 32. Default Costruttore pubblico
  33. 33. No finalize() method
  34. 34. Metodi dell'interfaccia </li></ul><li>Opzionale : </li><ul><li>Implementare the javax.ejb.SessionBean direttamente o indirettamente
  35. 35. STATEFUL implementare javax.ejb.SessionSynchronization
  36. 36. STATELESS implementare javax.ejb.TimedObject
  37. 37. Implementare ejbcreate
  38. 38. Può avere superclassi e implementare i metodi di callback o nelle superclassi
  39. 39. Può implementare altri metodi
  40. 40. EjbCreate() solo stateful </li></ul></ul>
  41. 41. <ul>7 EJB Roles </ul><ul><li>Enterprise Bean Provider  : Ejb ed è dichiarato tramite XML attraverso ejb-jar.xml contiene ejb </li><ul><li>Requesting injection of a TimerService object using a Resource annotation, or using the defined name to lookup the TimerService object.
  42. 42. Declares roles used in the beans using the security-role-ref elements
  43. 43. Se il metodo di business lancia una eccezione il BP deve </li><ul><li>Si occupa della gestione delle eccezioni catturando le system exception e rilanciandole come EJBException.
  44. 44. Should also be an expert in component developm because that's what he creates
  45. 45. Fornisce le seguenti classi : Session bean, session bean per 2.1 (home , local, remote) interface, endpoint webservices, interceptors. </li></ul></ul><li>Application Assembler  : ejb in larger deployable application units. Comportamenti in EJB tramite <assembly-descriptor></assembly-descriptor> in ejb-jar.xml </li><ul><li>Declares the logical security roles used in the application<security-role>
  46. 46. Output file ejb-jar con istruzioni per gli ejb e Link an enterprise bean reference to a target enterprise bean
  47. 47. Does not need to have any knowledge of the enterprise Bean's implementation. </li></ul></ul>
  48. 48. <ul>7 EJB Roles </ul><ul><li>Deployer : prende gli ejb-jar prodotti da PRV o AA e li deploya in uno specifico enviromnent. </li><ul><li>External dipendenze dichiarate dal provider
  49. 49. Output -> insieme di ejb deployati in un EJB Server e container. Deployer assigns principals to the security roles.
  50. 50. Crea e inizializza le variabili d'ambiente che sono dichiarate con annotation o XML.
  51. 51. Genera Stub per gli ejb
  52. 52. Deployer mappa i ruoli delle applicazioni all'LDAP group </li></ul><li>EJB Server Provider. It's a specialist in the area of distributed transaction management, distributed objects, and other lower-level system-level services
  53. 53. EJB Container Provider. </li><ul><li>Tools per il deploy ejb e resource.
  54. 54. Inietta le variabili d'ambiente dentro i campi degli EJB o i metodi.
  55. 55. Runtime name context support per i deployati EJB. Può usare EJBContext per accedere alle risorse dichiarate nell'ambiente
  56. 56. Container si occupa delle transazioni, sicurezza, messaging, timerServices, lifecyle </li></ul></ul>
  57. 57. <ul>7 EJB Roles </ul><ul><li>Persistence Provider . O/R mapping, query processing and caching. </li><ul><li>Tools per la gestione O/R di entity e transazioni
  58. 58. Operazioni sul DB </li></ul><li>System Administrator . Configurazione e amministrazione delle networking infrastrutture che includono EJB server e container. </li><ul><li>Configure the EJB server and EJB container
  59. 59. Configure a resource manager connection factory.
  60. 60. Is responsible for overseeing the well-being of the deployed EJB appli-cations
  61. 61. Definisce e configura LDAP realms </li></ul></ul>
  62. 62. <ul>Packaging and Deploy </ul><ul><li>Ejb-jar : un contratto fra Bean provider e Application Assembler e fra Application Assembler e Deployer </li><ul><li>Deve seguire lo schema XML e deve essere inserito sotto META-INF
  63. 63. Può contenere </li><ul><li>Enterprise bean class e interfaccie, web services
  64. 64. Interceptor
  65. 65. PK se il bean è un entity </li></ul><li>Optional. It says, &quot;The ejb-jar file must contain the deployment descriptor (if any) in the format defined The deployment descriptor must be stored with the name META-INF/ejb-jar.xml in the ejb-jar file.&quot;
  66. 66. AA non deve configurare i stub di home e objetct. Configurare nell'xml e sarà compito dell'Container generarli per ogni classe che estende Home e Object </li></ul></ul>
  67. 67. <ul>EJB-Jar.xml </ul>DEF BEAN SU EJB-JAR e senza annotation <ejb-jar xmlns=&quot;http://java.sun.com/xml/ns/javaee&quot; ….> < enterprise-beans > < session > <ejb-name>TestBean</ejb-name> <env-entry> <description>admin email</description> <env-entry-name>adminEmail</env-entry-name> <env-entry-value>admin@example.x</env-entry-value> </env-entry> </session> </enterprise-beans> </ejb-jar> ES: ACCESSO A TUTTI I METODI DI STOCKEJB SOLO DALL'UTENTE CUSTOMER <assembly-descriptor> <security-role> <role-name>customer</role-name> </security-role> <method-permission> <role-name>customer</role-name> <method> <ejb-name>StocksEJB</ejb-name> <method-name>*</method-name> </method> </method-permission> </assembly-descriptor> ES: DICHIARAZIONE MDB <message-driven> <ejb-name>ReportMDB<e/jb-name> <ejb-class>com.enthu.ReportMDB</ejb-class> <transaction-type>Bean</transaction-type> </message-driven>
  68. 68. <ul>Stateless bean </ul><ul><li>Usati per modellare azioni eseguite in una volta, come aggiungere un elemento in un carrello
  69. 69. @Stateless -> dice al container che la classe è una stateless bean. Così facendo avremo gestito dal container concorrenza, thread, pooling and transaction
  70. 70. @Local -> può essere accessa localmente attraverso l'interfaccia. Nella stessa applicazione
  71. 71. @Remote -> può essere accessa in remote. Cioè in diverse JVM </li></ul>@Stateless public class ExStatelessBean implements ExStateless { ..... public ExStatelessBean(){} public void addBid() { … .. } .... } package capitolo3.esercizio1.stateless; import javax.ejb.Local; @Local public interface ExStateless { void addBid(); }
  72. 72. <ul>Stateless bean Client (Servlet etc) </ul><ul><li>Usato per usare l'ejb.
  73. 73. @EJB -> il container attraverso DI inietta l'EJB nella classe così potremo utilizzarlo. E' l'opposto del JNDI perchè con il JNDI le risorse venivano prese dalla classe e non dal container
  74. 74. Il client non ha nessuna conoscenza dell'ejb ma lo utilizza solamente -> basso accoppiamento. </li></ul>public class StatelessServlet extends HttpServlet{ @EJB private ExStateless ejbBean ; @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { … . ejbBean .addBid(); ... } }
  75. 75. <ul>Stateful bean </ul><ul><li>Client si aspetta un insieme di internal state del bean e il conto sullo stato venga mantenuto fra qualunque numero di metodi chiamati
  76. 76. Container assicura che l'instanza del bean sarà mantenuta per la durata della sessione senza scrivere codice per la sessione.
  77. 77. @Stateful -> dice al container che il bean è di tipo stateful
  78. 78. @Remove -> ultimo metodo invocato nel workflow. Quindi è l'ultimo metodo e distrugget il bean deallocando memoria </li></ul>@Stateful public class ExStatefullBean implements ExStatefull { @Override public void addBid() { … .. } @Remove public Long confirm(){ return new Long(0); }} … . @Local public interface ExStatefull { void addBid();}
  79. 79. <ul>Stateful bean Client (Servlet etc) </ul><ul><li>Usato per usare l'ejb.
  80. 80. @EJB -> il container attraverso DI inietta l'EJB nella classe così potremo utilizzarlo. E' l'opposto del JNDI perchè con il JNDI le risorse venivano prese dalla classe e non dal container
  81. 81. Il client non ha nessuna conoscenza dell'ejb ma lo utilizza solamente -> basso accoppiamento
  82. 82. Uguale al stateless. </li></ul>public class StatefullServlet extends HttpServlet{ @EJB private ExStatefull ejbBean ; @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // TODO Auto-generated method stub ejbBean .addBid(); } }

×