ejb 3.1 and glassfish v3 prelude
DESCRIPTION
A quick overview of EJB 3.1 from the perspective of GlassFish v3 PreludeTRANSCRIPT
Kenneth SaksSenior Staff EngineerSUN Microsystems
Enterprise JavaBeansTM
(EJBTM) 3.1
2
EJB 3.1 Specification
• Goals> Continued focus on ease-of-use> New features
• JSR (Java Specification Request) 318> Part of Java EE 6> Java Persistence API will evolve separately ( JSR 317 )> Public Draft Released October 2008
• Caveat – APIs still subject to change
3
Ease of Use Improvements
• Optional Local Business Interfaces• Simplified Packaging in .war• EJB “Lite” • Portable Global JNDI Names• Simplified Unit Testing
4
Session Bean with “No-interface” View@Statelesspublic class HelloBean { public String sayHello(String msg) { return “Hello “ + msg; }}
// Client of HelloBean no-interface view@EJB HelloBean h;…h.sayHello(“bob”);
5
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
6
foo.war
WEB-INF/classes/ com/acme/FooServlet.class
WEB-INF/classes/ com/acme/FooBean.class
Web/EJB Application in JavaTM EE Platform 6
7
EJB “Lite” vs. Full EJB 3.1 API
EJB Lite • Local Session Beans• Annotations / ejb-jar.xml• CMT / BMT• Declarative Security• Interceptors
Full = Lite + :• Message Driven Beans• EJB Web Service
Endpoints• RMI-IIOP
Interoperability• 2.x / 3.x Remote view• 2.x Local view• Timer Service• CMP / BMP
8
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”);
9
Enhanced Testing Supportpublic 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(); }
10
Example : Embeddable API (cont.)
% java -classpath bankClient.jar : bank.jar : javaee.jar : <vendor_rt>.jar com.acme.BankTester
11
New Features
• Singletons• Application startup / shutdown callbacks• Calendar-based timer expressions• Automatic timer creation• Simple Asynchrony
12
Simple Singleton
@Singletonpublic class SharedBean {
private SharedData shared;
@PostConstruct private void init() { shared = ...; }
public int getXYZ() { return shared.xyz; }
}
13
Singleton Client
@Stateless public class FooBean {
@EJB private SharedBean shared;
public void foo() { int xyz = shared.getXYZ(); ... }
}
14
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() { ... }
}
15
Simple Asynchrony
@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) {...}
}
16
Asynchronous Operation Results -- Client@EJB Processor processor;
Task task = new Task(...);
Future<int> computeTask = processor.compute(task);
...
int result = computeTask.get();
17
EJB 3.1 and Glassfish V3 Prelude
• Glassfish V3 is reference implementation for EJB 3.1• V3 Prelude has preview implementations of these
EJB 3.1 features :> No-interface view> .war packaging of stateless session beans> Singletons> Portable Global JNDI Names
• EJB 3.1 preview module available from Update Tool
18
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]