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

EJB - Enterprise Java Beans

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...

Více

Vybrané partie z jazyka Java

Vybrané partie z jazyka Java Podporují více klientů – výkon

Více