John,
I posted a brief answer on EJB3 versus Spring/Hibernate on this thread:
https://coderanch.com/t/216038/ORM/java/EJB EJB3 is definitely a huge improvement of EJB2. So much so that I would readily use it. However, once you dive into the details you will encounter various issues:
* Spring's dependency injection is a lot more powerful and flexible, e.g. inject POJOs into POJOs, create objects via factory methods etc. In comparison, JEE dependency injection is limited to injecting JNDI objects into a fixed set of objects (EJBs, Web tier components such as servlets etc)
* EJB3/JPA object/relational mapping is less flexible than Hibernate or JDO's. e.g. lack of support for collections of non-entity beans; only limited support for preserving the ordering of lists.
* Session beans still need to be deployed in order to test them. EJB microcontainers do help with this though. In comparison, Spring beans are testable without any kind of deployment.
I write about these and other issues in chapters 1 and 10. The example code the book also includes some EJB 3 examples.
In summary. I think that Spring (and Hibernate) has a very bright future among developers who are not tied to using standards.
Chris