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[/
]/<module-name>/[!] java:app/<module-name>/[!] java:module/[!]
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 compute( Integer x, Integer y ) { Integer z = … return new AsyncResult( z ); } } Future 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