Summary
The main themes for the next release of the Java EE framework are extensibility and modularity, two concepts JSR 316 spec lead Roberto Chinnici discusses in a recent blog post.
Advertisement
The two main themes of the next Java Enterprise platform release are extensibility and modularity. While the former is often understood as a corollary of the latter, there is more subtlety to what these terms mean in the context of the Java EE 6 specification, according to Roberto Chinnici, spec lead for JSR 316, Java Platform, Enterprise Edition 6.
I find it convenient to distinguish two cases, based on whether a technology can be added to an application by a user or by a server vendor. I will reserve the term "extensibility" for the first case, and use "modularity" for the latter.
He explains that extensibility must be weighed against simplicity and ease of use:
Extensibility is a great thing if it captures the 20% of functionality that covers 80% of the needs, thus enabling a lot of developers to painlessly use a lot of technologies at essentially no cost in complexity or performance. In essence, this is the reasoning behind making extensibility in the web container a key goal for Java EE 6...
A lot of the APIs we've been considering for the Web Profile can be handled via extensibility: drop one jar into the WEB-INF/lib directory of your application (or in some suitable shared directory on your server) and you get JAX-RS, or JSF, or JPA, or WebBeans, or server-side JAX-WS, or...
The key factors here are the availability of the technology in standalone form (which requires a separate TCK to exist) and the adequacy of the extensibility contracts in the servlet container. We certainly want to make sure that the latter are sufficient to plug in pretty much any web framework worth using, so please keep an eye on the Servlet 3.0 developments and let us know if you find any holes.
Chinnici points out that modularity is more difficult to achieve, because it requires standard interfaces to exist between modules:
In some other cases, there is no standard contract that would enable you to plug an arbitrary implementation into an application server. (EJB 3.1 is a good example.) Designing these contracts is non-trivial, so we need to accept as a fact of life that we won't have them in Java EE 6. Luckily, we got a bunch of new contracts done recently, e.g. the security-related ones in JSR-115 and JSR-196, so things are moving in the right direction...
As part of the work on profiles, we've been trying to improve on the situation as much as time and resources allow. In the case of EJB, we've been prodding the EJB EG to define a "lite" subset of EJB 3.1 which can be run on top of the Web Profile. This way, application server vendors will be able to offer a "EJB 3.1 Lite" implementation in their Web Profile products even if we went with a "small" Web Profile (e.g. option (A) in my previous blog entry)...
What do you think of the direction Java EE 6 is taking?
Isn't a servlet container already extensible? You just drop the required jars in WEB-INF/lib of your app and you are done. Tomcat (which is an RI) even hot deploys your code. Whats special about Web Profile? Now that you can write web services with JSE6 (I don't understand why they were included with Desktop edition) you don't even have to import Axis (or any other SOAP engine's) jars!
- Castor and JAXB are good and I am glad that JAXB is a spec. JAXB should have been part of JSE5 instead of JEE5. Will JAXB API be removed from JEE6?
- One thing I always wanted is for the container to perform authentication before obtaining a queue connection via createQueueConnection (JMS API) instead of developer having to pass the credentials. In other words, integrate JMS and JAAS.
- Most containers already expose methods to invoke on various resources via MBeans. I recently had to write code to pause message delivery from a Queue to an MDB between 6pm and 5am. Both JBoss and WebSphere expose methods on QueueConnection via an MBean. Obviously the method names in WebSphere and JBoss are different. So it'd be nice if the spec standardized some MBeans to control resources particularly the ones related to JMS, DataSources etc.
- The Timer Beans are not very helpful. I still use Quartz in a JEE application and I am sure I am not alone. Quartz has Stateful jobs which makes sure that 2 instances of the same job will not be run concurrently. Also Quartz allows cron expressions to schedule jobs.
- With Xdoclet and Ant I could inject values into env-entry in the ENC. Now with annotations, I can't unless I hard-code them.
I have a few more but I'll see if I can get answers for these.