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
2
3. Ease of Use Improvements
• Optional Local Business Interfaces
• Simplified Packaging in .war
• EJB “Lite”
• Portable Global JNDI Names
• Simplified Unit Testing
3
4. Session Bean with “No-interface”
View
@Stateless
public class HelloBean {
public String sayHello(String msg) {
return “Hello “ + msg;
}
}
// Client of HelloBean no-interface view
@EJB HelloBean h;
…
h.sayHello(“bob”);
4
5. Web/EJB Application in
TM
Java EE Platform 5
foo.ear foo.ear
lib/foo_common.jar
foo_web.war
WEB-INF/web.xml com/acme/Foo.class
WEB-INF/classes/
com/acme/FooServlet.class foo_web.war
WEB-INF/classes
com/acme/Foo.class OR WEB-INF/web.xml
WEB-INF/classes/
com/acme/FooServlet.class
foo_ejb.jar
com/acme/FooBean.class foo_ejb.jar
com/acme/Foo.class
com/acme/FooBean.class
5
6. Web/EJB Application in
TM
Java EE Platform 6
foo.war
WEB-INF/classes/
com/acme/FooServlet.class
WEB-INF/classes/
com/acme/FooBean.class
6
7. EJB “Lite” vs. Full EJB 3.1 API
EJB Lite Full = Lite + :
• Local Session Beans • Message Driven Beans
• Annotations / ejb-jar.xml • EJB Web Service
• CMT / BMT Endpoints
• Declarative Security • RMI-IIOP
Interoperability
• Interceptors
• 2.x / 3.x Remote view
• 2.x Local view
• Timer Service
• CMP / BMP 7
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 environment
Hello hello = (Hello) new InitialContext()
lookup(“java:global/hello/HelloBean”);
8
9. Enhanced Testing Support
public 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();
}
9
10. Example : Embeddable API (cont.)
% java -classpath bankClient.jar :
bank.jar :
javaee.jar :
<vendor_rt>.jar
com.acme.BankTester
10
12. Simple Singleton
@Singleton
public class SharedBean {
private SharedData shared;
@PostConstruct private void init() {
shared = ...;
}
public int getXYZ() {
return shared.xyz;
}
}
12
13. Singleton Client
@Stateless
public class FooBean {
@EJB
private SharedBean shared;
public void foo() {
int xyz = shared.getXYZ();
...
}
}
13
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() {
...
}
}
14
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) {...}
}
15
16. Asynchronous Operation Results --
Client
@EJB Processor processor;
Task task = new Task(...);
Future<int> computeTask = processor.compute(task);
...
int result = computeTask.get();
16
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
17
18. For More Information
• JSR 318 Home : http://jcp.org/en/jsr/detail?id=318
> Send comments to jsr-318-comments@jcp.org
• Blog : http://blogs.sun.com/kensaks/
• Reference Implementation : GlassFish project V3
> http://glassfish.dev.java.net
> ejb@glassfish.dev.java.net
18