- There are no dependencies to external frameworks, libraries etc. Your project consists only of your sourcecode and few annotations needed for compilation.
- Because of 1. your code is independent of the infrastructure.
- Because of 1. there are no conflicts with already existing frameworks on the server
- EJB 3 is not a product, but a spec. There are several implementations from SpringSource, WebLogic (Oracle), WebSphere (IBM), Glassfish (Sun), Geronimo (Apache) and probably others.
- There is no XML required. Actually with EJB 3 XML descriptors become at least suspicious :-).
- Monitoring comes out of the box.
- The dependency on the framework is almost zero - in worst case you can just delete the @Stateless, @Local annotations and use something else.
- The integration with JPA is superb.
- Multithreading issues just do not exist.
- The synergy between Convention Over Configuration and Dependency Injection rocks!
- EJBs 3.0 are annotated POJOs, they can be easily unit-tested.
- ...and most important: developers, who used EJB 3 in projects already, really liked it.
I actually didn't had any problems with EJB 3, except some bugs in some commercial application servers which should be fixed already.
So if you are a consultant, you should put some additional stuff to your EJB 3 project to make it more complicated and you more valuable to your customer :-).
I'm a consultant, but with EJB 3 my "taskforces" became really short. 2 days for bootstraping, creating the infrastructure and built even a small prototype, are absolutely enough.
I will discuss some item next week at the JUG HH - so see you next week in beautiful Hamburg.