Prezentace ke stažení [PDF - 269 kB]
Transkript
Prezentace ke stažení [PDF - 269 kB]
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 HTML JSP EJB Applet Servlets EJB Prezentační logika Business logika Database 6 ARCHIVE FILES Web Archive (WAR) HTML JSP DD EJB Archive (JAR) Enterprise Archive (EAR) bean DD JAR DD interface servlet tag libraries EJB JAR helper classes helper classes WAR JAR DD = Deployment Descriptor 7 DEPLOYMENT Aplikační server JAR EAR WAR 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 HTTP (HTTPS) Web container servlets JSP, JSF EJB Lite EJB Container Databáze Full EJB 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 Session Bean AutomaticTeller Entity TransactionLog databáze client ATMCustomer BranchTeller client Account Customer 12 EJB CONTAINER Container Life-Cycle Management Client Support Client 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 Bean import javax.ejb.Stateless; @Stateless @Stateful @Stateless public class HelloBean implements HelloLocal { public String sayHello() { return "Hello!"; } } 15 STATELESS SESSION EJB Container Pool Bean1 Client 1 1 EJB Object Banking 2 3 Bean2 Bean2 4 Client 2 16 STATELESS SESSION EJB LIFE CYCLE Does not exist 1. newInstance() @PreDestroy callback 2. dependency injection 3. @PostConstruct callback method Method-ready pool timeout callback 17 STATEFUL SESSION EJB Container Client1 Banking Bean1 Client2 Banking Bean2 Client3 Banking Bean3 Disc 18 STATEFUL SESSION EJB LIFE CYCLE dependency injection, business interface lookup timeout Does not exist @PreDestroy callback 1. newInstance() 2. dependency injection 3. @PostConstruct callback @Remove method or timeout @PrePassivate method Method-ready Passive @PostActivate 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 OTÁZKY A ODPOVĚDI 30 Děkuji za pozornost
Podobné dokumenty
Vybrané partie z jazyka Java Spring a Enterprise JavaBeans (EJB)
Těsnost vazeb – přímá komunikace
EJB - Enterprise Java Beans
API nabízí také tzv. interceptory
opět pomocí anotací lze snadno “přibalovat”
kód k jednotlivým metodám
příklad jednoduchého i/u v jedné třídě
@AroundInvoke
public Object myInterceptor(InvocationCo...