ejb3 1 overview glassfish webinar 100208
DESCRIPTION
EJB 3.1 Presentation by Ken Sacks, Expert Group LeadTRANSCRIPT
![Page 1: Ejb3 1 Overview Glassfish Webinar 100208](https://reader033.vdocuments.mx/reader033/viewer/2022052903/5577cb13d8b42ae0418b489c/html5/thumbnails/1.jpg)
Kenneth SaksSenior Staff EngineerSUN Microsystems
Enterprise JavaBeansTM
(EJBTM) 3.1
![Page 2: Ejb3 1 Overview Glassfish Webinar 100208](https://reader033.vdocuments.mx/reader033/viewer/2022052903/5577cb13d8b42ae0418b489c/html5/thumbnails/2.jpg)
2
Agenda
• Background• Proposed Functionality• Summary• Q & A
![Page 3: Ejb3 1 Overview Glassfish Webinar 100208](https://reader033.vdocuments.mx/reader033/viewer/2022052903/5577cb13d8b42ae0418b489c/html5/thumbnails/3.jpg)
3
EJB 3.0 Specification (JSR 220)
• Features> Simplified EJB API> Java Platform Persistence API
• Focus on ease-of-use> Annotations > Intelligent defaults> Fewer classes needed
• Very well received within the community> But... more work is needed
![Page 4: Ejb3 1 Overview Glassfish Webinar 100208](https://reader033.vdocuments.mx/reader033/viewer/2022052903/5577cb13d8b42ae0418b489c/html5/thumbnails/4.jpg)
4
EJB 3.1 Specification
• Goals> Continued focus on ease-of-use> New features
• JSR (Java Specification Request) 318> Launched in August 2007
– Java Persistence API will evolve separately ( JSR 317 )
> Early Draft February 2008 > Public Draft October 2008
• Caveat – APIs still subject to change
![Page 5: Ejb3 1 Overview Glassfish Webinar 100208](https://reader033.vdocuments.mx/reader033/viewer/2022052903/5577cb13d8b42ae0418b489c/html5/thumbnails/5.jpg)
5
Agenda
• Introduction• Proposed Functionality • Summary• Q & A
![Page 6: Ejb3 1 Overview Glassfish Webinar 100208](https://reader033.vdocuments.mx/reader033/viewer/2022052903/5577cb13d8b42ae0418b489c/html5/thumbnails/6.jpg)
6
Ease of Use Improvements
• Optional Local Business Interfaces• Simplified Packaging• EJB “Lite” • Portable Global JNDI Names• Simplified Unit Testing
![Page 7: Ejb3 1 Overview Glassfish Webinar 100208](https://reader033.vdocuments.mx/reader033/viewer/2022052903/5577cb13d8b42ae0418b489c/html5/thumbnails/7.jpg)
7
Session Bean with Local Business Interface
<<interface>com.acme.Hello
String sayHello()
com.acme.HelloBean
public String sayHello() { ... }
@EJB private Hello h;
...
h.sayHello();
HelloBean Client
![Page 8: Ejb3 1 Overview Glassfish Webinar 100208](https://reader033.vdocuments.mx/reader033/viewer/2022052903/5577cb13d8b42ae0418b489c/html5/thumbnails/8.jpg)
8
Optional Local Business Interfaces
• Sometimes local business interface isn't needed• Better to completely remove interface from
developer's view than to generate it• Result : “no-interface” view
> Just a bean class> public bean class methods exposed to client> Same behavior and client programming model
as Local view– Client acquires an EJB component reference instead
of calling new()
![Page 9: Ejb3 1 Overview Glassfish Webinar 100208](https://reader033.vdocuments.mx/reader033/viewer/2022052903/5577cb13d8b42ae0418b489c/html5/thumbnails/9.jpg)
9
Session Bean with “No-interface” View@Statelesspublic class HelloBean {
public String sayHello(String msg) { return “Hello “ + msg; }
}
![Page 10: Ejb3 1 Overview Glassfish Webinar 100208](https://reader033.vdocuments.mx/reader033/viewer/2022052903/5577cb13d8b42ae0418b489c/html5/thumbnails/10.jpg)
10
No-interface View Client
@EJB HelloBean h;
...
h.sayHello(“bob”);
![Page 11: Ejb3 1 Overview Glassfish Webinar 100208](https://reader033.vdocuments.mx/reader033/viewer/2022052903/5577cb13d8b42ae0418b489c/html5/thumbnails/11.jpg)
11
Web/EJB Application in JavaTM EE Platform 5
foo.ear
WEB-INF/web.xmlWEB-INF/classes/ com/acme/FooServlet.classWEB-INF/classes com/acme/Foo.class
foo_web.war
com/acme/FooBean.classcom/acme/Foo.class
foo_ejb.jar
foo.ear
lib/foo_common.jar
com/acme/Foo.class
WEB-INF/web.xmlWEB-INF/classes/ com/acme/FooServlet.class
foo_web.war
com/acme/FooBean.class
foo_ejb.jar
OR
![Page 12: Ejb3 1 Overview Glassfish Webinar 100208](https://reader033.vdocuments.mx/reader033/viewer/2022052903/5577cb13d8b42ae0418b489c/html5/thumbnails/12.jpg)
12
foo.war
WEB-INF/classes/ com/acme/FooServlet.class
WEB-INF/classes/ com/acme/FooBean.class
Web/EJB Application in JavaTM EE Platform 6
![Page 13: Ejb3 1 Overview Glassfish Webinar 100208](https://reader033.vdocuments.mx/reader033/viewer/2022052903/5577cb13d8b42ae0418b489c/html5/thumbnails/13.jpg)
13
Simplified Packaging
• Goal is to remove an artificial packaging restriction> Not to create a new flavor of EJB component
• EJB component behavior is independent of packaging> One exception : module-level vs. component-level
environment
• No new restrictions placed on .war > Deploy .war stand-alone OR within an .ear
![Page 14: Ejb3 1 Overview Glassfish Webinar 100208](https://reader033.vdocuments.mx/reader033/viewer/2022052903/5577cb13d8b42ae0418b489c/html5/thumbnails/14.jpg)
14
EJB “Lite”
• Small subset of EJB 3.1 API for use in Web Profile• Broaden the availability of EJB technology
> Without losing portability
• Same exact Lite application can be deployed to Web Profile and Full Profile > Thanks to simplified .war packaging
• Open issue : whether Web Profile will require EJB Lite
![Page 15: Ejb3 1 Overview Glassfish Webinar 100208](https://reader033.vdocuments.mx/reader033/viewer/2022052903/5577cb13d8b42ae0418b489c/html5/thumbnails/15.jpg)
15
“Lite” vs. Full Functionality
Lite • Local Session Beans• Annotations / ejb-
jar.xml• CMT / BMT• Declarative Security• Interceptors
• (Also requires JPA 2.0 API / JTA 1.1 API )
Full = Lite + the following:• Message Driven Beans• EJB Web Service
Endpoints• RMI-IIOP
Interoperability• 2.x / 3.x Remote view• 2.x Local view• Timer Service• CMP / BMP
![Page 16: Ejb3 1 Overview Glassfish Webinar 100208](https://reader033.vdocuments.mx/reader033/viewer/2022052903/5577cb13d8b42ae0418b489c/html5/thumbnails/16.jpg)
16
Session Bean Exposing a Remote View@Stateless@Remote(Hello.class)public class HelloBean implements Hello {
public String sayHello(String msg) { return “Hello “ + msg; }
}
![Page 17: Ejb3 1 Overview Glassfish Webinar 100208](https://reader033.vdocuments.mx/reader033/viewer/2022052903/5577cb13d8b42ae0418b489c/html5/thumbnails/17.jpg)
17
Remote Clients
// Remote client in a Java EE container@EJB Hello hello;
// Remote client in a Java SE environmentHello hello = (Hello) new InitialContext().lookup(???);
Question : How does the caller find the target EJB component?
![Page 18: Ejb3 1 Overview Glassfish Webinar 100208](https://reader033.vdocuments.mx/reader033/viewer/2022052903/5577cb13d8b42ae0418b489c/html5/thumbnails/18.jpg)
18
Problems with “Global” JNDI Names
• Not portable> Global JNDI namespace is not defined in Java EE
platform specification > Vendor-specific configuration needed for each
deployment
• No standard syntax> Can names contain : “.”, “_”, “/” ?
• Not clear which resources have them> Local interfaces?
![Page 19: Ejb3 1 Overview Glassfish Webinar 100208](https://reader033.vdocuments.mx/reader033/viewer/2022052903/5577cb13d8b42ae0418b489c/html5/thumbnails/19.jpg)
19
Portable Global JNDI Names
“java:global[/<app-name>]/<module-name>/<bean-name>”
// Client in a Java EE container@EJB(mappedName= ”java:global/hello/HelloBean”) Hello hello;
// Client in a Java SE environmentHello hello = (Hello) new InitialContext() lookup(“java:global/hello/HelloBean”);
![Page 20: Ejb3 1 Overview Glassfish Webinar 100208](https://reader033.vdocuments.mx/reader033/viewer/2022052903/5577cb13d8b42ae0418b489c/html5/thumbnails/20.jpg)
20
EJB Component Testing
• It's too hard to test EJB components, especially the Local view > Forced to go through Remote facade or Web tier> Separate JVM™ instances needed for server and client
• Support for running in Java SE exists, but...> Not present in all implementations> No standard API for bootstrapping, component discovery,
shutdown etc.
![Page 21: Ejb3 1 Overview Glassfish Webinar 100208](https://reader033.vdocuments.mx/reader033/viewer/2022052903/5577cb13d8b42ae0418b489c/html5/thumbnails/21.jpg)
21
Example: No-interface Stateless Session Bean
@Statelesspublic class BankBean {
@PersistenceContext EntityManager accountDB;
public String createAccount(AccountDetails d) { ... }
public void removeAccount(String accountID) { ... }
}
![Page 22: Ejb3 1 Overview Glassfish Webinar 100208](https://reader033.vdocuments.mx/reader033/viewer/2022052903/5577cb13d8b42ae0418b489c/html5/thumbnails/22.jpg)
22
Example: Embeddable APIpublic class BankTester {
public static void main(String[] args) { EJBContainer container = EJBContainer.createEJBContainer();
// Acquire EJB component reference BankBean bank = (BankBean)container.getContext(). lookup(“java:global/bank/BankBean”);
testBank(bank); ... container.close(); }
![Page 23: Ejb3 1 Overview Glassfish Webinar 100208](https://reader033.vdocuments.mx/reader033/viewer/2022052903/5577cb13d8b42ae0418b489c/html5/thumbnails/23.jpg)
23
Example : Embeddable API (cont.)
% java -classpath bankClient.jar : bank.jar : javaee.jar : <vendor_rt>.jar com.acme.BankTester
![Page 24: Ejb3 1 Overview Glassfish Webinar 100208](https://reader033.vdocuments.mx/reader033/viewer/2022052903/5577cb13d8b42ae0418b489c/html5/thumbnails/24.jpg)
24
Embeddable API
• Execute enterprise beans in a Java SE environment• “Single application” model• Same EJB component behavior / lifecycle as
server-side> CMT, injection, threading guarantees, etc.
• Only EJB “Lite” functionality required to be available
![Page 25: Ejb3 1 Overview Glassfish Webinar 100208](https://reader033.vdocuments.mx/reader033/viewer/2022052903/5577cb13d8b42ae0418b489c/html5/thumbnails/25.jpg)
25
New Features
• Singletons• Application startup / shutdown callbacks• Calendar-based timer expressions• Automatic timer creation• Simple Asynchrony
![Page 26: Ejb3 1 Overview Glassfish Webinar 100208](https://reader033.vdocuments.mx/reader033/viewer/2022052903/5577cb13d8b42ae0418b489c/html5/thumbnails/26.jpg)
26
Singletons
• New session bean component type> One singleton bean instance per application per JVM> Provides easy sharing of state within application> Designed for instance-level concurrent access
• Lots in common with stateless / stateful beans> Client views (No-interface , Local, Remote, Web Service) > CMT / BMT> Container services: timer service, injection, etc.> Method authorization
![Page 27: Ejb3 1 Overview Glassfish Webinar 100208](https://reader033.vdocuments.mx/reader033/viewer/2022052903/5577cb13d8b42ae0418b489c/html5/thumbnails/27.jpg)
27
Simple Singleton
@Singletonpublic class SharedBean {
private SharedData shared;
@PostConstruct private void init() { shared = ...; }
public int getXYZ() { return shared.xyz; }
}
![Page 28: Ejb3 1 Overview Glassfish Webinar 100208](https://reader033.vdocuments.mx/reader033/viewer/2022052903/5577cb13d8b42ae0418b489c/html5/thumbnails/28.jpg)
28
Singleton Client
@Stateless public class FooBean {
@EJB private SharedBean shared;
public void foo() { int xyz = shared.getXYZ(); ... }
}
![Page 29: Ejb3 1 Overview Glassfish Webinar 100208](https://reader033.vdocuments.mx/reader033/viewer/2022052903/5577cb13d8b42ae0418b489c/html5/thumbnails/29.jpg)
29
Singleton Concurrency Options
• Single threaded (default)> Container serializes concurrent requests
• Container Managed Concurrency> Concurrency via method-level locking metadata
– Read lock (Shared): allow any number of concurrent accesses
– Write lock (Exclusive) : ensure single-threaded access
> Container blocks invocations until they can proceed– ...or until app-specified timeout is reached
• Bean Managed Concurrency > Like Java Servlet API threading model
![Page 30: Ejb3 1 Overview Glassfish Webinar 100208](https://reader033.vdocuments.mx/reader033/viewer/2022052903/5577cb13d8b42ae0418b489c/html5/thumbnails/30.jpg)
30
Read-Only Singleton with Container Managed Concurrency
@Singletonpublic class SharedBean {
private SharedData shared;
@Lock(READ) public int getXYZ() { return shared.xyz; }
...}
![Page 31: Ejb3 1 Overview Glassfish Webinar 100208](https://reader033.vdocuments.mx/reader033/viewer/2022052903/5577cb13d8b42ae0418b489c/html5/thumbnails/31.jpg)
31
Read-Mostly Singleton with Container Managed Concurrency
@Singleton@Lock(READ)public class SharedBean {
private SharedData shared;
public int getXYZ() { return shared.xyz; }
@Lock(WRITE) public void update(...) { // update shared data ... }
![Page 32: Ejb3 1 Overview Glassfish Webinar 100208](https://reader033.vdocuments.mx/reader033/viewer/2022052903/5577cb13d8b42ae0418b489c/html5/thumbnails/32.jpg)
32
Concurrent Access Timeouts
@Singletonpublic class SharedBean {
private SharedData shared;
@Lock(READ) @AccessTimeout(1000) public int getXYZ() { return shared.xyz; }
@Lock(WRITE) public void update(...) { // update shared data }
![Page 33: Ejb3 1 Overview Glassfish Webinar 100208](https://reader033.vdocuments.mx/reader033/viewer/2022052903/5577cb13d8b42ae0418b489c/html5/thumbnails/33.jpg)
33
Read-Mostly Singleton with Bean Managed Concurrency
@Singleton@ConcurrencyManagement(BEAN)public class SharedBean {
private SharedData shared;
synchronized public int getXYZ() { return shared.xyz; }
synchronized public void update(...) { // update shared data ... }
![Page 34: Ejb3 1 Overview Glassfish Webinar 100208](https://reader033.vdocuments.mx/reader033/viewer/2022052903/5577cb13d8b42ae0418b489c/html5/thumbnails/34.jpg)
34
Startup / Shutdown Callbacks
@Singleton@Startuppublic class StartupBean {
@PostConstruct private void onStartup() { ... }
@PreDestroy private void onShutdown() { ... }
![Page 35: Ejb3 1 Overview Glassfish Webinar 100208](https://reader033.vdocuments.mx/reader033/viewer/2022052903/5577cb13d8b42ae0418b489c/html5/thumbnails/35.jpg)
35
Timer Service Features
• Calendar-based timeout expressions • Automatic timer creation• Non-persistent timers
![Page 36: Ejb3 1 Overview Glassfish Webinar 100208](https://reader033.vdocuments.mx/reader033/viewer/2022052903/5577cb13d8b42ae0418b489c/html5/thumbnails/36.jpg)
36
Calendar Based Timeouts
• “Cron”-like semantics with improved syntax• Usable with automatic or programmatic timers • Named attributes
> second, minute, hour ( default = “0” )> dayOfMonth, month, dayOfWeek, year (default = “*”)
![Page 37: Ejb3 1 Overview Glassfish Webinar 100208](https://reader033.vdocuments.mx/reader033/viewer/2022052903/5577cb13d8b42ae0418b489c/html5/thumbnails/37.jpg)
37
Calendar Based Timeouts
// The last Thursday in November at 2 p.m.(hour=”14”, dayOfMonth=”Last Thu”, month=”Nov”)
// Every weekday morning at 3:15 a.m.(minute=”15”, hour=”3”, dayOfWeek=”Mon-Fri”)
// Every five minutes (minute=”*/5”, hour=”*”)
![Page 38: Ejb3 1 Overview Glassfish Webinar 100208](https://reader033.vdocuments.mx/reader033/viewer/2022052903/5577cb13d8b42ae0418b489c/html5/thumbnails/38.jpg)
38
Expression Attribute Syntax
• Single value : minute = “30”• List : month = “Jan, Jul, Dec”• Range : dayOfWeek = “Mon-Fri”• Wildcard : hour = “*”• Increment : minute = “*/10”
![Page 39: Ejb3 1 Overview Glassfish Webinar 100208](https://reader033.vdocuments.mx/reader033/viewer/2022052903/5577cb13d8b42ae0418b489c/html5/thumbnails/39.jpg)
39
Automatic Timer Creation
• Container creates timer automatically upon deployment
• Logically equivalent to one createTimer() invocation• Each automatic timer can have its own timeout
callback method
![Page 40: Ejb3 1 Overview Glassfish Webinar 100208](https://reader033.vdocuments.mx/reader033/viewer/2022052903/5577cb13d8b42ae0418b489c/html5/thumbnails/40.jpg)
40
Automatic Timer Creation
@Stateless public class BankBean { @PersistenceContext EntityManager accountDB; @Resource javax.mail.Session mailSession;
// Callback the 1st of each month at 8 a.m.
@Schedule(hour=”8”, dayOfMonth=”1”) void sendMonthlyBankStatements() { ... }
}
![Page 41: Ejb3 1 Overview Glassfish Webinar 100208](https://reader033.vdocuments.mx/reader033/viewer/2022052903/5577cb13d8b42ae0418b489c/html5/thumbnails/41.jpg)
41
Non-persistent Timers
• Timers without persistent delivery guarantee • Only live for duration JVM instance• Good fit for Singleton cache updates• Better performance for fine-grained timeouts
![Page 42: Ejb3 1 Overview Glassfish Webinar 100208](https://reader033.vdocuments.mx/reader033/viewer/2022052903/5577cb13d8b42ae0418b489c/html5/thumbnails/42.jpg)
42
Non-Persistent Timer Example
@Singleton public class CacheBean {
private Cache cache;
@Schedule(minute=”*/5”,hour=”*”,persistent=false) private void updateCache() { ... }
...
}
![Page 43: Ejb3 1 Overview Glassfish Webinar 100208](https://reader033.vdocuments.mx/reader033/viewer/2022052903/5577cb13d8b42ae0418b489c/html5/thumbnails/43.jpg)
43
Simple Asynchrony
• Different styles> Local concurrency
– E.g : break large piece of work into independent tasks
> Async RPC
• Too difficult with existing APIs> JMS API – complex API / lots of configuration> Threads – not well integrated with component model
• Approach : integrate asynchronous support directly into session bean components
![Page 44: Ejb3 1 Overview Glassfish Webinar 100208](https://reader033.vdocuments.mx/reader033/viewer/2022052903/5577cb13d8b42ae0418b489c/html5/thumbnails/44.jpg)
44
Simple Local Concurrent Computation
@Stateless public class DocBean {
@Resource SessionContext ctx;
public void processDocument(Document document) { DocBean me = ctx.getBusinessObject(DocBean.class); me.doAnalysisA(document); me.doAnalysisB(document); }
@Asynchronous public void doAnalysisA(Document d) {...} @Asynchronous public void doAnalysisB(Document d) {...}
}
![Page 45: Ejb3 1 Overview Glassfish Webinar 100208](https://reader033.vdocuments.mx/reader033/viewer/2022052903/5577cb13d8b42ae0418b489c/html5/thumbnails/45.jpg)
45
Asynchronous Operation Results -- Client@EJB Processor processor;
Task task = new Task(...);
Future<int> computeTask = processor.compute(task);
...
int result = computeTask.get();
![Page 46: Ejb3 1 Overview Glassfish Webinar 100208](https://reader033.vdocuments.mx/reader033/viewer/2022052903/5577cb13d8b42ae0418b489c/html5/thumbnails/46.jpg)
46
@Asynchronous on Bean Class
@Stateless public class ProcessorBean implements Processor {
@PersistenceContext EntityManager db;
@Asynchronous public Future<int> compute(Task t) { // perform computation int result = ...;
return new javax.ejb.AsyncResult<int>(result); }
}
![Page 47: Ejb3 1 Overview Glassfish Webinar 100208](https://reader033.vdocuments.mx/reader033/viewer/2022052903/5577cb13d8b42ae0418b489c/html5/thumbnails/47.jpg)
47
@Asynchronous on Interface
public interface Processor {
@Asynchronous public Future<int> compute(Task t);
}
![Page 48: Ejb3 1 Overview Glassfish Webinar 100208](https://reader033.vdocuments.mx/reader033/viewer/2022052903/5577cb13d8b42ae0418b489c/html5/thumbnails/48.jpg)
48
@Asynchronous on Interface
@Stateless @Local(Processor.class)public class ProcessorBean {
@PersistenceContext EntityManager db;
public int compute(Task t) { // perform computation int result = ...;
return result; }
}
![Page 49: Ejb3 1 Overview Glassfish Webinar 100208](https://reader033.vdocuments.mx/reader033/viewer/2022052903/5577cb13d8b42ae0418b489c/html5/thumbnails/49.jpg)
49
Async Behavior
• Transactions> No transaction propagation from caller to callee
• Method authorization> Works the same as for synchronous invocations
• Exceptions> Exception thrown from target invocation available via
Future<V>.get()
• SessionContext.isCancelled() allows bean to check for cancellation during processing
![Page 50: Ejb3 1 Overview Glassfish Webinar 100208](https://reader033.vdocuments.mx/reader033/viewer/2022052903/5577cb13d8b42ae0418b489c/html5/thumbnails/50.jpg)
50
Agenda
• Introduction• Proposed Functionality• Summary• Q & A
![Page 51: Ejb3 1 Overview Glassfish Webinar 100208](https://reader033.vdocuments.mx/reader033/viewer/2022052903/5577cb13d8b42ae0418b489c/html5/thumbnails/51.jpg)
51
Summary
• EJB 3.1 Specification (JSR 318)• Part of Java EETM Platform 6• Goals
> Ease-of-use> New Features
![Page 52: Ejb3 1 Overview Glassfish Webinar 100208](https://reader033.vdocuments.mx/reader033/viewer/2022052903/5577cb13d8b42ae0418b489c/html5/thumbnails/52.jpg)
52
For More Information
• JSR 318 Home : http://jcp.org/en/jsr/detail?id=318> Send comments to [email protected]
• Blog : http://blogs.sun.com/kensaks/• Reference Implementation : GlassFish project V3
> http://glassfish.dev.java.net> [email protected]
![Page 53: Ejb3 1 Overview Glassfish Webinar 100208](https://reader033.vdocuments.mx/reader033/viewer/2022052903/5577cb13d8b42ae0418b489c/html5/thumbnails/53.jpg)
53
Agenda
• Introduction• Proposed Functionality• Summary• Q & A
![Page 54: Ejb3 1 Overview Glassfish Webinar 100208](https://reader033.vdocuments.mx/reader033/viewer/2022052903/5577cb13d8b42ae0418b489c/html5/thumbnails/54.jpg)
Kenneth SaksSenior Staff EngineerSUN Microsystems
Enterprise JavaBeansTM
(EJBTM) 3.1