Live from JavaOne: EJB 3.1 New Features

I’m blogging live from the floor of the Sun JavaOne Conference in San Francisco today, currently attending a session about the new features of EJB 3.1. This article highlights some of the much-needed features added to the EJB 3.1 specification.

1. EJB Singletons (finally!)
The EJB 3.1 specification will support shared session bean instances without using a Java static object. Singleton session beans are added with the @Singleton annotation and are created per application, per JVM. The new features of a singleton object require a number of concurrency enhancements, referred to as bean-managed concurrency and container managed concurrency, which essentially supports read/write locks for the singleton object, helping to ensure proper access from multiple concurrent clients.

2. Dynamic/Portable JNDI names
When EJB modules are deployed, JNDI names are auto-created for each bean as follows:

  • Global: java:global/[<app-name>]/<module-name>/<ejb-name>
  • Same App: java:app/[<module-name>]/<ejb-name>
  • Module: java:module/<ejb-name>

3. EJB Timers
Added cron-like support for EJB timers. Seems identical to Java Quartz, but I’d have to see the lower level details to see if they are related. Timers can be created via annotations or explicitly in Java code and seem to have a much larger expressive language for creating schedules.

4. EJB Lite
Subset of the EJB implementation allowing vendors to create and support EJB environments with a much smaller overhead. Not sure how helpful this will be in practice since most vendors are currently used to creating full EJB implementations and creating a new, smaller subset will require some amount of non-trivial work.

5. Asynchronous Session Bean Invocations
Add asynchronous support for remote/local enterprise bean. “Fire and forget” with results available from Java concurrent Future API. Example:

@Stateless
public class HelloBean {
...
@Asynchronous public Future<int> getHelloValue() {...}
}

More to come
There were other things discussed in EJB 3.1 specification such as interface-less local beans, testing EJBs, startup/shutdown callbacks, and JAX-RS integration, but I’ve covered the ones I find most exciting. Overall, the Singleton aspect has to be one of the most needed features of EJB. More to come from the JavaOne conference this week!

See you in San Francisco!

I’ll be away this week from June 1-5 attending the Sun JavaOne Conference in beautiful San Francisco. I plan to expand my knowledge of advanced J2EE/SOA topics as well as pick up some introductory courses on new technologies. If you want to meet up to discuss any of my recent articles, the conference, or how cold San Francisco seems to be this time of year, drop me an e-mail!

San Francisco

javaranch – the web based pick winners program

JavaRanch uses a Java program to pick the weekly winners for book promotions.  It previously used a serious of classes that went the URLs, parsed the data, went to more URLs, picked some random winners and then output them to a file.  These contortions were done because the old software was hard to change.  With the new Java based software, we have much more active development.  Time for a new approach.

Designing the new pick winners program.  (It’s the 3rd iteration of the program and the 2nd I’ve done so I’m familiar with the domain.)

  1. Decide to make a web based version (servlet)
  2. Think about what I need from the database.
  3. Write three DAO methods to get post, topic and user info.  While I wrote the integration tests first, I did write the unit tests after the code.
  4. Start the pick winner class  Realize there is a lot of date validation logic (and determining the default week) and rename class to WinnerPickingWeek to encapsulate the date range.
  5. Start the pick winner class again.  Call the three DAO methods tying them together.
  6. Now add the randomness.  My test with 1 post will give me enough determinism to keep the tests passing and useful.
  7. Added a test for excluding ineligible winners (like Henry and I – the winner pickers)
  8. Now on to the front end.  My servlet needs to make sure you are logged in as admin and then delegate to the processing logic.

This got a useable program that runs much faster.  After that I added some jQuery logic to make the page dynamic and even more useful.  But that’s another topic – possibly a more interesting one.  I’ll post it later in the week.