What's New in Enterprise JavaBean Technology ?

28
<Insert Picture Here> What's New in Enterprise JavaBean Technology ? Sanjeeb Sahoo Sr. Staff Engineer, Sun, an Oracle Company

description

Presentation made at JavaONE, Hyderabad, on 11th May 2011.

Transcript of What's New in Enterprise JavaBean Technology ?

Page 1: What's New in Enterprise JavaBean Technology ?

<Insert Picture Here>

What's New in Enterprise JavaBean Technology ?

Sanjeeb SahooSr. Staff Engineer, Sun, an Oracle Company

Page 2: What's New in Enterprise JavaBean Technology ?

2

The following/preceding is intended to outline our general product direction. It is intended for information purposes only, and may not be incorporated into any contract. It is not a commitment to deliver any material, code, or functionality, and should not be relied upon in making purchasing decisions.The development, release, and timing of any features or functionality described for Oracle’s products remains at the sole discretion of Oracle.

Page 3: What's New in Enterprise JavaBean Technology ?

3

<Insert Picture Here>

Agenda

• Introduction• Ease of Use Improvements• New Functionality

Page 4: What's New in Enterprise JavaBean Technology ?

4

EJB 3.0 Specification

• Goal• Ease of use• Developer productivity

• JSR (Java Specification Request) 220• Final Specification – 2006

Page 5: What's New in Enterprise JavaBean Technology ?

5

EJB 3.0 Specification

• Metadata via Java annotations• Only annotations• Only XML DD• Both

• Sensible defaults• POJO friendly• Simplification of bean types• No home interface• Interceptors• Entity Beans replaced by JPA

Page 6: What's New in Enterprise JavaBean Technology ?

6

EJB 3.1 Specification

• Goals• Continued focus on ease-of-use• New features

• JSR (Java Specification Request) 318• Final Specification – December 2009

Page 7: What's New in Enterprise JavaBean Technology ?

7

Ease of Use Improvements

• Optional Local Business Interfaces• Simplified Packaging• EJB 3.1 “Lite” API• Portable Global JNDI Names• Simple Component Testing

Page 8: What's New in Enterprise JavaBean Technology ?

8

Session BeanWith “No-interface” View

@Statelesspublic class GreetingBean {

public String greet(String msg) { return “Hello “ + msg; }}

Page 9: What's New in Enterprise JavaBean Technology ?

9

No-interface View Client

@EJB GreetingBean h;

...

h.greet(“bob”);

Page 10: What's New in Enterprise JavaBean Technology ?

10

Session Bean“Interface” View

@Statelesspublic class HelloBean implements GreetingBean { public String greet(String msg) { return “Hello “ + msg; }}

@Statelesspublic class HowdyBean implements GreetingBean { public String greet(String msg) { return “Howdy “ + msg; }}

Page 11: What's New in Enterprise JavaBean Technology ?

11

Interface View Client

@EJB(beanName=”HelloBean”) GreetingBean h;h.greet(“bob”);

@EJB(beanName=”HowdyBean”) GreetingBean h2;h2.greet(“sam”);

Page 12: What's New in Enterprise JavaBean Technology ?

12

JavaTM EE Platform 5 Packaging

foo.ear

WEB-INF/web.xmlWEB-INF/classes/ com/acme/FooServlet.class 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 13: What's New in Enterprise JavaBean Technology ?

13

foo.warWEB-INF/classes/com/acme/ FooServlet.class FooBean.class

Simplified Packaging

Page 14: What's New in Enterprise JavaBean Technology ?

14

EJB 3.1 “Lite”

Page 15: What's New in Enterprise JavaBean Technology ?

15

Portable EJB JNDI Names

Each session bean gets the following entries :

• Globally unique namejava:global[/<app-name>]/<module-name>/<ejb-name>

• Unique name within same application java:app/<module-name>/<ejb-name>

• Unique name within defining modulejava:module/<ejb-name>

Page 16: What's New in Enterprise JavaBean Technology ?

16

Session Bean

@Statelesspublic class HelloBean implements Hello {

public String sayHello(String msg) { return “Hello “ + msg; }}

If deployed as hello.jar, JNDI entries are:

java:global/hello/HelloBeanjava:app/hello/HelloBeanjava:module/HelloBean

Page 17: What's New in Enterprise JavaBean Technology ?

17

Simple Testing : Session Bean

@Stateless@Local(Bank.class)public class BankBean implements Bank {

@PersistenceContext EntityManager accountDB;

public String createAccount(AcctDetails d){ … }

public void removeAccount(String acctID)

{ … }

Page 18: What's New in Enterprise JavaBean Technology ?

18

Embeddable API

public class BankTester { public static void main(String[] args) {

EJBContainer container = EJBContainer.createEJBContainer();

// Acquire Local EJB reference Bank bank = (Bank) container.getContext(). lookup(“java:global/bank/BankBean”);

testAccountCreation(bank); container.close();

Page 19: What's New in Enterprise JavaBean Technology ?

19

Test Client Execution

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

Page 20: What's New in Enterprise JavaBean Technology ?

20

New Features

• Singletons• Startup / Shutdown callbacks• Automatic timer creation

• Cron-like syntax

• Asynchronous session bean invocations

Page 21: What's New in Enterprise JavaBean Technology ?

21

Singleton

@Singletonpublic class SharedBean {

private SharedData shared;

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

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

Page 22: What's New in Enterprise JavaBean Technology ?

22

Singleton Concurrency Options

• Single threaded (default)• For consistency with all existing bean types

• Container Managed Concurrency• Control access via method-level locking metadata

• Bean Managed Concurrency • All concurrent invocations have access to bean instance

Page 23: What's New in Enterprise JavaBean Technology ?

23

Startup / Shutdown Callbacks

@Singleton@Startuppublic class StartupBean {

@PostConstruct private void onStartup() { … }

@PreDestroy private void onShutdown() { … } }

Page 24: What's New in Enterprise JavaBean Technology ?

24

Timers

• Automatically created EJB Timers• Calendar-based Timers – cron like semantics

• Every 14th minute within the hour, for the hours 1 and 2 am(minute=”*/14”, hour=”1,2”)

• Every 10 seconds starting at 30(second=”30/10”)

• Every 5 minutes of every hour(minute=”*/5”, hour=”*”)

• 2pm on Last Thur of Nov of every year(hour=”14”, dayOfMonth=”Last Thu”, month=”Nov”)

• Every Mon & Wed midnight @Schedule(dayOfWeek=”Mon,Wed”)

Page 25: What's New in Enterprise JavaBean Technology ?

25

Automatic Timer Creation

@Stateless public class BankBean { @PersistenceContext EntityManager accountDB; @Resource javax.mail.Session mailSession;

// Callback the last day of each month at 8 a.m.

@Schedule(hour=”8”, dayOfMonth=”Last”) void sendMonthlyBankStatements() { ... }}

Page 26: What's New in Enterprise JavaBean Technology ?

26

Asynchronous Session Beans

• Control returns to the client before the container dispatches invocation to a bean instance

• @Asynchronous – method or class• Return type – void or Future<V>• “Fire and and Forget” or async results via

Future<V>

• Best effort delivery – persistent delivery guarantees are not required by spec

• Transaction context does not propagate• REQUIRED → REQUIRED_NEW

• Security principal propagates

Page 27: What's New in Enterprise JavaBean Technology ?

27

Asynchronous Session BeansCode Sample

@Stateless@Asynchronouspublic class SimpleAsyncEJB { public Future<Integer> addNumbers(int n1, int n2) { Integer result;

result = n1 + n2; try { // simulate JPA queries + reading file system Thread.currentThread().sleep(2000); } catch (InterruptedException ex) { ex.printStackTrace(); }

return new AsyncResult(result); }}

http://blogs.sun.com/arungupta/entry/totd_137_asynchronous_ejb_a

Page 28: What's New in Enterprise JavaBean Technology ?

28

References

• oracle.com/javaee• glassfish.org• oracle.com/goto/glassfish• blogs.sun.com/theaquarium• youtube.com/GlassFishVideos• Follow @glassfish