<Insert Picture Here>




What's New in Enterprise JavaBean Technology
Arun Gupta, Java EE & GlassFish Guy
blogs.sun.com/arungupta, @arungupta
Beijing 2010
December 13–16, 2010




                       2
The following 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.




                                                      3
Agenda


• Introduction               <Insert Picture Here>


• Ease of Use Improvements
• New Functionality




                                                4
EJB 3.1 Specification

• Goals
   – Continued focus on ease-of-use
   – New features
• JSR (Java Specification Request) 318
   – Expert Group Formed – August 2007
   – Public Draft – October 2008
   – Proposed Final Draft – March 2009
   – Final Specification – December 2009




                                           5
Ease of Use Improvements

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




                                       6
Session Bean
With “No-interface” View




@Stateless
public class HelloBean {

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




                                           7
No-interface View Client


@EJB HelloBean h;

...

h.sayHello(“bob”);




                           8
TM
Java             EE Platform 5 Packaging


          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              OR   WEB-INF/web.xml
 com/acme/Foo.class               WEB-INF/classes/
foo_ejb.jar                        com/acme/FooServlet.class

com/acme/FooBean.class            foo_ejb.jar
com/acme/Foo.class                com/acme/FooBean.class




                                                               9
Simplified Packaging



                foo.war
        WEB-INF/classes/com/acme/
         FooServlet.class
         FooBean.class




                                    10
EJB 3.1 “Lite”




                 11
Portable EJB JNDI Names

Each session bean gets the following entries :

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

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

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


                                                 12
Session Bean

@Stateless
public class HelloBean implements Hello {
    public String sayHello(String msg) {
        return “Hello “ + msg;
    }
}


If deployed as hello.jar, JNDI entries are:

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


                                              13
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)
  { … }



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



                                                15
Test Client Execution


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


                  com.acme.BankTester




                                        16
New Features

• Singletons
• Startup / Shutdown callbacks
• Automatic timer creation
  – Cron-like syntax
• Asynchronous session bean invocations




                                          17
Singleton

@Singleton
public class SharedBean {


 private SharedData shared;


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


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


                              18
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




                                                               19
Startup / Shutdown Callbacks

@Singleton
@Startup
public class StartupBean {


    @PostConstruct
    private void onStartup() { … }


    @PreDestroy
    private void onShutdown() { … }


}



                                      20
Timers

• Automatically created EJB Timers
• Calendar-based Timers – cron like semantics
 – Every Mon & Wed midnight
   @Schedule(dayOfWeek=”Mon,Wed”)
 – 2pm on Last Thur of Nov of every year
   (hour=”14”, dayOfMonth=”Last Thu”,
   month=”Nov”)
 – Every 5 minutes of every hour
   (minute=”*/5”, hour=”*”)
 – Every 10 seconds starting at 30
   (second=”30/10”)
 – Every 14th minute within the hour, for the hours 1 and 2 am
   (minute=”*/14”, hour=”1,2”)
                                                            21
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() {
        ...
    }
}


                                                       22
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
                                                       23
Asynchronous Session Beans
Code Sample
 @Stateless
 @Asynchronous
 public 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


                                                                   24
References


• glassfish.org
• blogs.sun.com/theaquarium
• youtube.com/user/GlassFishVideos
• facebook.com/glassfish
• Follow @glassfish




                                     25
<Insert Picture Here>




What's New in Enterprise JavaBean Technology
Arun Gupta, Java EE & GlassFish Guy
blogs.sun.com/arungupta, @arungupta

S314168 - What's New in Enterprise Java Bean Technology @ JavaOne Brazil 2010

  • 1.
    <Insert Picture Here> What'sNew in Enterprise JavaBean Technology Arun Gupta, Java EE & GlassFish Guy blogs.sun.com/arungupta, @arungupta
  • 2.
  • 3.
    The following isintended 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. 3
  • 4.
    Agenda • Introduction <Insert Picture Here> • Ease of Use Improvements • New Functionality 4
  • 5.
    EJB 3.1 Specification •Goals – Continued focus on ease-of-use – New features • JSR (Java Specification Request) 318 – Expert Group Formed – August 2007 – Public Draft – October 2008 – Proposed Final Draft – March 2009 – Final Specification – December 2009 5
  • 6.
    Ease of UseImprovements • Optional Local Business Interfaces • Simplified Packaging • EJB 3.1 “Lite” API • Portable Global JNDI Names • Simple Component Testing 6
  • 7.
    Session Bean With “No-interface”View @Stateless public class HelloBean { public String sayHello(String msg) { return “Hello “ + msg; } } 7
  • 8.
    No-interface View Client @EJBHelloBean h; ... h.sayHello(“bob”); 8
  • 9.
    TM Java EE Platform 5 Packaging 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 OR WEB-INF/web.xml com/acme/Foo.class WEB-INF/classes/ foo_ejb.jar com/acme/FooServlet.class com/acme/FooBean.class foo_ejb.jar com/acme/Foo.class com/acme/FooBean.class 9
  • 10.
    Simplified Packaging foo.war WEB-INF/classes/com/acme/ FooServlet.class FooBean.class 10
  • 11.
  • 12.
    Portable EJB JNDINames Each session bean gets the following entries : • Globally unique name java:global[/<app-name>]/<module-name>/<ejb- name> • Unique name within same application java:app/<module-name>/<ejb-name> • Unique name within defining module java:module/<ejb-name> 12
  • 13.
    Session Bean @Stateless public classHelloBean implements Hello { public String sayHello(String msg) { return “Hello “ + msg; } } If deployed as hello.jar, JNDI entries are: java:global/hello/HelloBean java:app/hello/HelloBean java:module/HelloBean 13
  • 14.
    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) { … } 14
  • 15.
    Embeddable API public classBankTester { 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(); 15
  • 16.
    Test Client Execution %java -classpath bankClient.jar : bank.jar : javaee.jar : <vendor_rt>.jar com.acme.BankTester 16
  • 17.
    New Features • Singletons •Startup / Shutdown callbacks • Automatic timer creation – Cron-like syntax • Asynchronous session bean invocations 17
  • 18.
    Singleton @Singleton public class SharedBean{ private SharedData shared; @PostConstruct private void init() { shared = ...; } public int getXYZ() { return shared.xyz; } 18
  • 19.
    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 19
  • 20.
    Startup / ShutdownCallbacks @Singleton @Startup public class StartupBean { @PostConstruct private void onStartup() { … } @PreDestroy private void onShutdown() { … } } 20
  • 21.
    Timers • Automatically createdEJB Timers • Calendar-based Timers – cron like semantics – Every Mon & Wed midnight @Schedule(dayOfWeek=”Mon,Wed”) – 2pm on Last Thur of Nov of every year (hour=”14”, dayOfMonth=”Last Thu”, month=”Nov”) – Every 5 minutes of every hour (minute=”*/5”, hour=”*”) – Every 10 seconds starting at 30 (second=”30/10”) – Every 14th minute within the hour, for the hours 1 and 2 am (minute=”*/14”, hour=”1,2”) 21
  • 22.
    Automatic Timer Creation @Stateless publicclass 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() { ... } } 22
  • 23.
    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 23
  • 24.
    Asynchronous Session Beans CodeSample @Stateless @Asynchronous public 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 24
  • 25.
    References • glassfish.org • blogs.sun.com/theaquarium •youtube.com/user/GlassFishVideos • facebook.com/glassfish • Follow @glassfish 25
  • 26.
    <Insert Picture Here> What'sNew in Enterprise JavaBean Technology Arun Gupta, Java EE & GlassFish Guy blogs.sun.com/arungupta, @arungupta