ejb 3.1 and glassfish v3 prelude

18
Kenneth Saks Senior Staff Engineer SUN Microsystems Enterprise JavaBeans TM (EJB TM ) 3.1

Upload: eduardo-pelegri-llopart

Post on 13-Dec-2014

16.588 views

Category:

Technology


1 download

DESCRIPTION

A quick overview of EJB 3.1 from the perspective of GlassFish v3 Prelude

TRANSCRIPT

Page 1: EJB 3.1 and GlassFish v3 Prelude

Kenneth SaksSenior Staff EngineerSUN Microsystems

Enterprise JavaBeansTM

(EJBTM) 3.1

Page 2: EJB 3.1 and GlassFish v3 Prelude

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

Page 3: EJB 3.1 and GlassFish v3 Prelude

3

Ease of Use Improvements

• Optional Local Business Interfaces• Simplified Packaging in .war• EJB “Lite” • Portable Global JNDI Names• Simplified Unit Testing

Page 4: EJB 3.1 and GlassFish v3 Prelude

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”);

Page 5: EJB 3.1 and GlassFish v3 Prelude

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

Page 6: EJB 3.1 and GlassFish v3 Prelude

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

Page 7: EJB 3.1 and GlassFish v3 Prelude

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

Page 8: EJB 3.1 and GlassFish v3 Prelude

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”);

Page 9: EJB 3.1 and GlassFish v3 Prelude

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(); }

Page 10: EJB 3.1 and GlassFish v3 Prelude

10

Example : Embeddable API (cont.)

% java -classpath bankClient.jar : bank.jar : javaee.jar : <vendor_rt>.jar com.acme.BankTester

Page 11: EJB 3.1 and GlassFish v3 Prelude

11

New Features

• Singletons• Application startup / shutdown callbacks• Calendar-based timer expressions• Automatic timer creation• Simple Asynchrony

Page 12: EJB 3.1 and GlassFish v3 Prelude

12

Simple Singleton

@Singletonpublic class SharedBean {

private SharedData shared;

@PostConstruct private void init() { shared = ...; }

public int getXYZ() { return shared.xyz; }

}

Page 13: EJB 3.1 and GlassFish v3 Prelude

13

Singleton Client

@Stateless public class FooBean {

@EJB private SharedBean shared;

public void foo() { int xyz = shared.getXYZ(); ... }

}

Page 14: EJB 3.1 and GlassFish v3 Prelude

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() { ... }

}

Page 15: EJB 3.1 and GlassFish v3 Prelude

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) {...}

}

Page 16: EJB 3.1 and GlassFish v3 Prelude

16

Asynchronous Operation Results -- Client@EJB Processor processor;

Task task = new Task(...);

Future<int> computeTask = processor.compute(task);

...

int result = computeTask.get();

Page 17: EJB 3.1 and GlassFish v3 Prelude

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

Page 18: EJB 3.1 and GlassFish v3 Prelude

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]