1 / 57

Enterprise Beans Java EE 6 platform EJB 3.1

Enterprise Beans Java EE 6 platform EJB 3.1. Ficsor Lajos , Krizsán Zoltán Á l talános Informati kai Tanszék Miskolc i Egyetem Utolsó módosítás: 2012. 04. 10. Az Enterprise Beans. Az Enterprise JavaBeans ( EJB ) szerver oldali komponens, amely

vesna
Download Presentation

Enterprise Beans Java EE 6 platform EJB 3.1

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Enterprise BeansJava EE 6 platformEJB 3.1 Ficsor Lajos, Krizsán Zoltán Általános Informatikai Tanszék Miskolci Egyetem Utolsó módosítás: 2012. 04. 10. Az Enterprise JavaBeans 3.1

  2. Az Enterprise Beans • Az Enterprise JavaBeans (EJB) szerver oldali komponens, amely • Az üzleti logika valamely elemének reprezentációja • Egy konténerben fut • A konténer szolgáltatásokat biztosít a bean számára • tranzakciókezelés • perzisztencia • biztonsági funkciók • A kliens soha nem közvetlenül az EJB-vel van kapcsolatban, hanem a konténerrel Az Enterprise JavaBeans 3.1

  3. A kliens és az EJB kapcsolata Az Enterprise JavaBeans 3.1

  4. Az Enterprise Beans fajtái • Session Bean (stateless, statefull és singleton) • Message-Driven Bean • AJava EE 5 platformtól az Entity Bean megszűnt, helyette egy új perzisztencia API került a szabványba Az Enterprise JavaBeans 3.1

  5. A session Bean • Egy egyszerű kliens kérést reprezentál a szerveren • Elválasztja a klienst a szerver által végzett bonyolultabb tevékenységektől • Általában egy klienst tud kiszolgálni egyszerre • Ha a kliens terminálódik, a bean is megszűnik • Ha a szerver leáll, a bean elvész • Három fajtája van: • Stateful (állapottal rendelkező) session bean • Stateless (állapot nélküli) session bean • Singleton session bean Az Enterprise JavaBeans 3.1

  6. Stateful session bean • Megőrzi a kliens egyes hívásai között az adatokat • Ha a szervernek memóriát kell felszabadítania, a bean-t el kell mentenie, majd szükség esetén visszaállítania Az Enterprise JavaBeans 3.1

  7. Stateless session bean • Semmilyen klienssel kapcsolatos információt nem őriz meg a kliensek hívásai között • Csak egy metódus végrehajtásának idejére tud adatokat megőrizni • Bármely példány egyenértékű a kliensek számára • Metódushívás idején kívül a szerver kisöpörheti a memóriából lementés nélkül • Hatékonyabban tud működni Az Enterprise JavaBeans 3.1

  8. Singleton session bean • Egy példányban létezik egy alkalmazásban • Életciklusa az alkalmazással azonos • A kliensek konkurrens módon használhatják • Elláthat az alkalmazás indulásával kapcsolatos inicializálási feladatokat Az Enterprise JavaBeans 3.1

  9. Stateful session bean használata • Vannak a kliens és a bean párbeszédére jellemző adatok • Vannak két hívás között megőrzendő adatok • A bean valójában összekötő elem a kliens és az alkalmazás más komponense(i) között • A bean más EJB-k közötti munkamegosztást vezérel Az Enterprise JavaBeans 3.1

  10. Stateless session bean használata • Nincs kliens specifikus adat • Általános feladatot lát el a kliensek részére • A kliens és a bean kommunikációja szinkron módon történik • Hatékonyabb lehet, mint a stateful bean • Implementálhat web szolgáltatást Az Enterprise JavaBeans 3.1

  11. Singleton session bean használata • Az állapotát az alkalmazás teljes életciklusára meg kell őriznie • Több kliens egyszerre, konkurrens módon kell használja • Feladatokat láthat el az alkalmazás indulása és leállása során • Implementálhat web szolgáltatást Az Enterprise JavaBeans 3.1

  12. A Message-Drivenbean (MDB) • Olyan bean, amely JMS üzenetek figyelésére képes. (Implementálnia kell a javax.jms.MessageListener interface-t.) • Más üzenetkezelő rendszer része is lehet. • Különbségek a session bean-el szemben: • A kliense nem érheti el interface-en keresztül. • Csak bean osztálya van. • A kliens nem tudja meghívni direkt módon egyetlen metódusát sem. Az Enterprise JavaBeans 3.1

  13. A Message-Driven bean (folyt.) • Hasonlóságok: • Nem tárol adatokat a klienséről. • A bean minden példánya egyenértékű. • Tetszőleges kliensektől érkező üzeneteket fel tud dolgozni. Az Enterprise JavaBeans 3.1

  14. A Message-Driven bean (folyt.) Legfontosabb tulajdonságai • Egy kliens üzenet hatására lép működésbe. • Aszinkron módon működik. • Viszonylag rövid életű. • Nem reprezentál perzisztens adatokat, de képes adatbázis elérésre. • Működhet tranzakcionális módon. • Állapot mentes • Ha egy üzenet érkezik, a konténer meghívja a bean onMessage metódusát. Az Enterprise JavaBeans 3.1

  15. A message-driven bean használata • A session bean és kliensének kommunikációja az interface-én keresztül szinkron. • Session bean-ek kommunikálhatnak egymással JMS-en keresztül is, de a fogadott üzenet feldolgozása akkor is szinkron módon történik. • Ha aszinkron üzenet feldolgozásra van szükség, ahhoz message-driven bean kell. Az Enterprise JavaBeans 3.1

  16. Session Bean-ek elérése no-interface view • a bean osztály public metódusai • hasonlóan használhatjuk, mintha egy egyszerű objektum lenne, de • nem kell példányosítani • a konténer szolgáltatásai transzparensek a kliens számára business interface • amit a bean osztályának implementálnia kell • több interface-t is implementálhat Az Enterprise JavaBeans 3.1

  17. Elérés a kliensből • referencia megszerzése dependency injection alapján • egyszerű: elég a javax.ejb.EJB annotáció használata • a kliensneknek a Java EE környezetben kell futnia. Pl: • JSF web alkalmazás • JAX-RS web szolgáltatás • más enterprise bean • Java EE application client • referencia megszerzése JNDI támogatással • Java EE környezeten kívüli kliensek számára Az Enterprise JavaBeans 3.1

  18. remote és local elérési mód • A döntés szempontjai: • beanek közötti függőség foka – gyakran hívják egymást • a kliens fajtája – lehet, hogy másik gépen fut • skálázhatóság: a lokális élérésű bean nehezebben telepíthető át • teljesítmény: a lokális elérés nyilván "olcsóbb" • Egy bean technikailag felkészíthető mindkét elérési módra, de ezt ritkán alkalmazzuk • Ha bizonytalanok vagyunk a döntésben, remote elérést válasszunk - rugalmasság Az Enterprise JavaBeans 3.1

  19. Lokális elérés • A kliens ugyanabban az alkalmazásban van • Lehet • web komponens • másik EJB • A kliens számára az elérni kívánt EJB helye nem transzparens • Paraméterek, visszatérési érték referencia szerint Az Enterprise JavaBeans 3.1

  20. Lokális elérésű bean készítése • Nem interfész nézet: csak a bean osztályt kell definiálni: @Session public class MyBean { ... } • Lokális interface: @Local public interface InterfaceName { ... } @Local(InterfaceName.class) public class BeanName implements InterfaceName { ... } Az Enterprise JavaBeans 3.1

  21. Lokális elérésű bean használata Lokális nem interfész nézet • Nem kell new • Osztály neve a típus @EJB ExampleBean exampleBean; vagy ExampleBean exampleBean = (ExampleBean) InitialContext.lookup("java:module/ ExampleBean"); Az Enterprise JavaBeans 3.1

  22. Lokális elérésű bean használata (folyt.) Lokális interfészen keresztül • Nem kell new • Interface neve a típus @EJB BeanInterface exampleBean; vagy BeanInterface exampleBean = (BeanInterface) InitialContext.lookup("java:module/BeanInterface"); Az Enterprise JavaBeans 3.1

  23. remote elérés • A kliens futhat másik gépen / JVM-ben • Lehet lokális is • Lehet • web komponens • alkalmazás kliens (application client) • másik EJB • A bean osztálynak implementálnia kell az üzleti interfészt. (Nem interfész nézet nincs!) • Az elérendő bean helye transzparens a kliens számára • Paraméterek, visszatérési érték érték szerint -Másolat!!! Az Enterprise JavaBeans 3.1

  24. remote elérésű bean készítése @Remote public interface InterfaceName { ... } @Remote(InterfaceName.class) public class BeanName implements InterfaceName { ... } Az Enterprise JavaBeans 3.1

  25. remote elérésű bean használata • Típus az interface! @EJB Example example; vagy ExampleRemote example = (ExampleRemote) InitialContext.lookup("java:global/myApp/ExampleRemote"); Az Enterprise JavaBeans 3.1

  26. EJB kiadása • EJB JAR állományokban -> EAR • 3.1-től WAR fájlban • WEB-INF/classes – osztályok • WEB-INF/lib – jar fájlok • Nem kell ejb-jar.xml, ha van helye: a META-INF Az Enterprise JavaBeans 3.1

  27. EJB-k kapcsolatai Az Enterprise JavaBeans 3.1

  28. EJB-k biztonsági beállitásai XML-ből Az Enterprise JavaBeans 3.1

  29. Elnevezési konvenció • Szokásos az alábbi elnevezési konvenció használata Az Enterprise JavaBeans 3.1

  30. Statefull session bean életciklusa • A callback metódusok annotációkkal jelölhetők ki. Az Enterprise JavaBeans 3.1

  31. Állapotmentes session bean életciklusa • A callback metódusok annotációkkal jelölhetők ki. Az Enterprise JavaBeans 3.1

  32. Singleton session bean életciklusa • A callback metódusok annotációkkal jelölhetők ki. Az Enterprise JavaBeans 3.1

  33. A message-driven bean életcilusa • Az EJB konténer általában példányok pool-ját hozza létre. • Minden példányra az alábbi életciklust alkalmazza: Az Enterprise JavaBeans 3.1

  34. session Bean használata JSP-ben • EL kifejezésként • A default EL neve az osztály neve, de az első betű kicsi. • Ha más nevet szeretnénk, akkor használjuk a @Named annotációt. • Context.lookup metódus hívással. Az Enterprise JavaBeans 3.1

  35. SessionBean interfész (opcionális) • régi verzióknál kötelező volt implementálni. • 4 metódus: • setSessionContext, • ejbRemove, • ejbPassivate, • ejbActivate Az Enterprise JavaBeans 3.1

  36. session EJB használata távolról • Érdemes a remote interfészeket külön csomagba rakni • Netbeans nem is engedi máshogy. Az Enterprise JavaBeans 3.1

  37. Netbeans EJB támogatás Az Enterprise JavaBeans 3.1

  38. Session EJB használata távolról // Access JNDI Initial Context. Properties p = new Properties(); p.put("java.naming.factory.initial","org.jnp.interfaces.NamingContextFactory"); p.put("java.naming.provider.url","jnp://localhost:1099"); p.put("java.naming.factory.url.pkgs","org.jboss.naming:org.jnp.interfaces"); InitialContextctx = new InitialContext(p); // Change jndi name according to your server and ejb HelloRemote remote = (HelloRemote) ctx.lookup("HelloBean/remote"); msg = "Message From EJB --> " + remote.sayHello(); • http://srikanthtechnologies.com/articles/j2ee/ejb3fromswing.html Az Enterprise JavaBeans 3.1

  39. Üzenetvezérelt bean Az Enterprise JavaBeans 3.1

  40. üzenet vezérelt bean használata • @Resource Queue stockInfoQueue; • Context initialContext = new InitialContext(); • Queue stockInfoQueue = (javax.jms.Queue)initialContext.lookup • (“java:comp/env/jms/stockInfoQueue”); • queueConnection = queueConnectionFactory.createQueueConnection(); queueSession = queueConnection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE); queueSender = queueSession.createSender(queue); • message = queueSession.createTextMessage(); • message.setText("This is message "); • queueSender.send(message); Az Enterprise JavaBeans 3.1

  41. JNDI (Java Naming and Directory Interface) • Bármilyen java alkalmazásban használhatjuk. • Itt ezt használjuk: java:comp/env • Hasonló mint a DNS, vagy LDAP • pl.: java:comp/env/com.example.MySessionBean/myDatabase • Bármilyen lehet a felépítése, de konvenciók vannak. • elérési út -> objektum összerendelés (binding). • nevek séma alapján: scheme : scheme-specific-parts (pl.: ldap: vagy java, ORB, …) • Érdemes egyedi nevet használni! • java:comp/env/com.acme.example.MySessionBean/myDatabase • A webapp, EJB konténerek olvassák, írják. Általában van grafikus felület. Az Enterprise JavaBeans 3.1

  42. Elnevezési konvenciók • java:comp • java:app: ugyanabból az appból • java:module: ugyanabból a modulból • java:global Az Enterprise JavaBeans 3.1

  43. Elnevezési konvenciók • Saját EJB, adatok: java:comp/env/teljes_nev/adattag • java:comp/env/mail, • java:comp/env/jms, • java:comp/env/persistence, • java:comp/UserTransaction, • java:comp/ORB, • java:comp/TimerService, • java:comp/EJBContext Az EnterpriseJavaBeans 3.1

  44. Elnevezési konvenciók remoteEJB-re • java:global[/<app-name>]/<module-name>/<bean-name> • app-name akkor van, ha ear file-ban volt. • XXX.ear esetén XXX • vagy <app-name> elem az application.xml file-ból. • module-name • annak a modulnak a neve, ahol az ejb van vagy • <module-name> elem a ejb-jar.xml-nak. • bean-name: • osztály neve, • vagy az annotáció name atribútuma • vagy a <ejb-name> eleme a ejb-jar.xml. • glassfish kiírja a szerver log-ba. Az EnterpriseJavaBeans 3.1

  45. JNDI architektúra Az Enterprise JavaBeans 3.1

  46. Injekció • Az EJB konténer végzi. • Miután létrehozta bean-t, de mielőtt az üzleti metódust kiszolgálná. • JNDI-ben keres : java:comp/env/ejb vagy ez alatt @Resource(name="myDB") //type is inferred from variable public DataSourcecustomerDB; @Resource public UserTransaction utx; @Resource SessionContext ctx; Az Enterprise JavaBeans 3.1

  47. Injekciót használó EJB @Stateless public class EmployeeServiceBean implements EmployeeService { ... // The maximum number of tax exemptions, configured by Deployer @Resource int maxExemptions; Az Enterprise JavaBeans 3.1

  48. JNDI beállítása ejb-jar.xml-ből • <enterprise-beans> • <session> • <ejb-name>EmployeeService</ejb-name> • <ejb-class>com.wombat.empl.EmployeeServiceBean</ejb-class> • <env-entry> • <env-entry-name>maxExemptions</env-entry-name> • <env-entry-type>java.lang.Integer</env-entry-type> • <env-entry-value>15</env-entry-value> • </env-entry> Az Enterprise JavaBeans 3.1

  49. Kiolvasás JNDI-ből // Obtain the enterprise bean’s environment naming context. Context initCtx = new InitialContext(); Context myEnv = (Context)initCtx.lookup("java:comp/env"); // Obtain the maximum number of tax exemptions // configured by the Deployer. Integer maxExemptions = (Integer)myEnv.lookup(“maxExemptions”); Az Enterprise JavaBeans 3.1

  50. Elfogók (Interceptor) • Bean-ek • eseményeihez • üzleti metódus hívásaihoz lehet elfogókat rendelni. • Egy bean-hez több Interceptor is tartozhat • Egy int. több beanhez is kapcsolódhat. • Annotációval, vagy telepítő leíróban lehet beállítani. • @Interceptors a bean osztályra. • ejb-jar-ban lehet defaultinterc.-okat definiálni. Az Enterprise JavaBeans 3.1

More Related