boundary, which main responsibilities are:Providing coarser granularityEnsuring consistencyProviding a defined entry point which can be easily decorated with aspects / interceptorsExposure of components (what components are we will cover later) functionality to remote clients via IIOP, REST, SOAP, JMS, Hessian etc...
ServiceFacade - the facade to Services. The Services just rely on a certain amount of cross cutting aspects and concentrate on the realization of business logic
only invokes Services in consistent way, mostly using transactions
The discussion whether or not to use Spring vs. Java EE for new enterprise Java applications is a no-brainer
Why migrate?
since then fallen a prey to the hungry minds of Venture Capitalists and finally into the hands of a virtualization company called VMware
While the different companies and individuals behind the Spring framework have been doing some work in the JCP their voting behavior on important JSRs is peculiar to say the least
outdated ORM solution like JDBC templates
some developers completely stopped looking at new developments in the Java EE space and might have lost track of the current state of technology
size of the deployment archive
fairly standard Java EE 6 application will take up about 100 kilobytes
comparable Spring application weighs in at a whopping 30 Megabytes!
Lightweight
Firing up the latest JBoss AS 7 Application Server from scratch and deploying a full blown Java EE 6 application into the server takes somewhere between two and five seconds on a standard machine. This is in the same league as a Tomcat / Spring combo
Dependency injection
Java EE 6, the Context and Dependency Injection (CDI) specification was introduced to the Java platform, which has a very powerful contextual DI model adding extensibility of injectable enterprise services
Aspect Oriented Programming
“AOP Light” and this is exactly what Java EE Interceptors do
common pitfall when taking AOP too far is that your code might end up all asymmetric and unreadable. This is due to the fact that the aspect and its implementation are not in the same place. Determining what a piece of code will do at runtime at a glance will be really hard
Testing
With Arquillian we can get rid of mocking frameworks and test Java EE components in their natural environment
Tooling
capabilities comparison matrix below to map Spring’s technology to that of Java EE
Capability
Spring
JavaEE
Dependency Injection
Spring Container
CDI
Transactions
AOP / annotations
EJB
Web framework
Spring Web MVC
JSF
AOP
AspectJ (limited to Spring beans)
Interceptors
Messaging
JMS
JMS / CDI
Data Access
JDBC templates / other ORM / JPA
JPA
RESTful Web Services
Spring Web MVC (3.0)
JAX-RS
Integration testing
Spring Test framework
Arquillian *
Java Persistence API (JPA)
Java Contexts and Dependency Injection (CDI)
Java Authentication and Authorization Service (JAAS)
Java Authorization Contract for Containers (JACC)
JavaMail API
Bean Validation
Enterprise JavaBeans