NOVINKY V JEE EJB 3.1 Zdeněk Troníček Fakulta informačních technologií ČVUT v Praze
PROGRAM Seznámení s Java Enterprise Edition (JEE) Enterprise Java Beans (EJB) Novinky v EJB 3.1 2
JAVA EDITIONS Java Enterprise Edition Java Micro Edition Java Standard Edition 3
MOTIVACE Co mají podnikové aplikace společného? User authentication Multi-user support Data persistence Data integrity (transactions) Client-tier communication Asynchronous communication Naming service Communication with legacy systems 4
JAVA ENTERPRISE EDITION 6 Java Server Faces (JSF) 2.0 Java Server Pages (JSP) 2.2 Enterprise Java Beans (EJB) 3.1 Java Persistence API (JPA) 2.0 Java API for XML-Based Web Services (JAX-WS) 2.2 Java API for RESTful Web Services (JAX-RS) 1.1 Java Architecture for XML Binding (JAXB) 2.2 Java Message Service API (JMS) 1.1 Java Transaction API (JTA) 1.1 5
APLIKACE V JEE Application Server Web Browser Web Container EJB Container Database HTML JSP EJB Applet Servlets EJB Prezentační logika Business logika 6
ARCHIVE FILES Web Archive (WAR) EJB Archive (JAR) Enterprise Archive (EAR) HTML JSP DD bean interface DD JAR DD servlet tag libraries helper classes EJB JAR helper classes DD = Deployment Descriptor WAR JAR 7
DEPLOYMENT JAR EAR WAR Aplikační server MainServlet.class index.jsp home.jsp web.xml 8
SLUŽBY POSKYTOVANÉ AS Komunikace s klientem Životní cyklus komponent (zahrnuje i řízení souběžného přístupu) Správa databázových spojení (Connection pool) Transakční zpracování Persistence objektů Asynchronní komunikace Přihlašování uživatelů a přidělování práv 9
CONTAINERS Web browser Web container EJB Container HTTP (HTTPS) servlets JSP, JSF EJB Lite Full EJB Databáze Application client RMI 10
ENTERPRISE JAVA BEANS 3.1 Session Beans (Entity Beans 2.1) Message Driven Beans Dependency Injection kontejner se postará o nastavení odkazu např. na jinou beanu 11
EJB APPLICATION client client Session Bean AutomaticTeller Entity TransactionLog ATMCustomer databáze client BranchTeller Account Customer 12
EJB CONTAINER Container Life-Cycle Management Client Client Support Bean Resource Management 13
SESSION EJB Plain Old Java Object (POJO) bezestavové (@Stateless) stavové (@Stateful) singleton (@Singleton) (EJB 3.1) remote a local business interface no interface (EJB 3.1) 14
IMPLEMENTACE Business Interface import javax.ejb.local; @Local public interface HelloLocal { String sayhello(); } @Local @Remote @Stateless @Stateful Bean import javax.ejb.stateless; @Stateless public class HelloBean implements HelloLocal { public String sayhello() { return "Hello!"; } } 15
STATELESS SESSION EJB Container Pool Client 1 1 EJB Object Banking 3 Bean2 2 4 Bean2 Bean1 Client 2 16
STATELESS SESSION EJB LIFE CYCLE Does not exist 1. newinstance() 2. dependency injection 3. @PostConstruct callback @PreDestroy callback method Method-ready pool timeout callback 17
STATEFUL SESSION EJB Container Client1 Banking Bean1 Disc Client2 Banking Bean2 Client3 Banking Bean3 18
STATEFUL SESSION EJB LIFE CYCLE dependency injection, business interface lookup Does not exist timeout 1. newinstance() @PreDestroy callback 2. dependency injection 3. @PostConstruct callback method Method-ready @Remove method or timeout @PrePassivate @PostActivate Passive method 19
NOVINKY V EJB 3.1 No-interface view Global JNDI names Singleton session beans Calendar based timer service Asynchronous invocations EJB lite Simplified packaging Embeddable container 20
NO-INTERFACE VIEW EJB nemusí mít business interface Pokud EJB nemá business interface, klient vidí všechny public metody @Stateless public class HelloSessionBean { } public String sayhello(string name) { } @EJB private HelloSessionBean hellobean; 21
GLOBAL JNDI NAMES java:global[/<app-name>]/<module-name>/<beanname>[!<fully-qualified-interface-name>] java:app/<module-name>/<bean-name>[!<fully-qualifiedinterface-name>] java:module/<bean-name>[!<fully-qualified-interfacename>] java:global/fooweb/foobean java:global/fooweb/foobean!com.acme.foo java:app/fooweb/foobean java:app/fooweb/foobean!com.acme.foo java:module/foobean java:module/foobean!com.acme.foo 22
SINGLETON SESSION BEANS Pouze jedna instance Lze stanovit pořadí inicializací (@DependsOn) Inicializace může být eager (@Startup) @Startup @Singleton( name = "A" ) @DependsOn( "B" ) public class ASessionBean { } @Startup @Singleton( name = "B" ) public class BSessionBean { } 23
CONCURRENCY MANAGEMENT (1) @Singleton //@ConcurrencyManagement( // ConcurrencyManagementType.CONTAINER ) public class SingletonSessionBean { @Lock( LockType.READ ) public void dosomething() { } } @Lock( LockType.WRITE ) public void dosomethingelse() { } 24
CONCURRENCY MANAGEMENT (2) @Singleton @ConcurrencyManagement( ConcurrencyManagementType.BEAN ) public class SingletonSessionBean { } public void dosomething() { synchronized(this) { } } public synchronized void dosomethingelse() { } 25
CALENDAR BASED TIMER SERVICE Anotace @Schedule s atributy: year, month, dayofmonth, dayofweek hour, minute, second timezone @Singleton public class ServiceBean { } @Schedule( dayofweek = "Sun", hour = "2", minute = "30" ) public void cleandatabase() { } 26
ASYNCHRONOUS INVOCATIONS Metodu EJB lze volat asynchronně Návratovou hodnotou asynchronní metody je Future @Stateless public class MathSessionBean { @Asynchronous public Future<Integer> compute( Integer x, Integer y ) { Integer z = return new AsyncResult( z ); } } Future<Integer> r = mathbean.compute( 20, 11 ); while (!r.isdone() ) { } Integer i = r.get(); 27
EJB LITE Podmnožina EJB Full: No Message Driven Beans No remote interfaces No EJB timers and scheduling No asynchronous invocation No web services EJB Lite mohou být součástí souboru.war 28
EMBEDDABLE CONTAINER Umožňuje programově spustit kontejner Vhodné pro testování @Test public void hello() throws Exception { EJBContainer ec = EJBContainer.createEJBContainer(); Context c = ec.getcontext(); HelloSessionBean hello = (HelloSessionBean) c.lookup( "java:global/classes/hellosessionbean" ); String s = hello.sayhello( "Eva" ); assertequals( "Hello, Eva", s ); } 29
30 OTÁZKY A ODPOVĚDI Děkuji za pozornost