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
JMSJMS / 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 *
we believe that providing solid support for
standardized PaaS-based programming and multi-tenancy would delay the
release of Java EE 7 until the spring of 2014
way
too long
defer the remaining aspects of our agenda for PaaS
enablement and multi-tenancy support to
Java EE 8
already laid some of the infrastructure for cloud
support in Java EE 7
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
Granite Data Services provides a messaging feature, code name Gravity, implemented as a
Comet-like service with AMF3 data polling over HTTP
(producer/consumer based architecture)
GraniteDS messaging relies on two main AS3 components on the Flex side: org.granite.gravity.Consumer
and org.granite.gravity.Producer
6.3. Common Configuration
There are three main steps to configure Gravity in an application:
Declare the Gravity servlet implementation for your target server in web.xml
Declare a messaging service and destination in services-config.xml, mapped to a specific channel
definition of type GravityChannel
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