1. Java EE and Spring Framework Shootout
Rohit Kelapure
WebSphere Application Server Caching Architect
Apache OpenWebBeans Committer
IBM
http://wasdynacache.blogspot.com/
http://www.linkedin.com/in/rohitkelapure
http://twitter.com/rkela
Recording: http://www.parleys.com/#st=5&id=2819&sl=0
Session ID = TDP-1163
1
2. Please Note
IBM's statements regarding its plans, directions, and intent are subject to change
or withdrawal at IBM's sole discretion.
Information regarding potential future products is intended to outline our general
product direction and it should not be relied on in making a purchasing decision.
The information mentioned regarding potential future products is not a
commitment, promise, or legal obligation to deliver any material, code or
functionality. Information about potential future products may not be incorporated
into any contract. The development, release, and timing of any future features or
functionality described for our products remains at our sole discretion.
Performance is based on measurements and projections using standard IBM
benchmarks in a controlled environment. The actual throughput or performance
that any user will experience will vary depending upon many factors, including
considerations such as the amount of multiprogramming in the user's job stream,
the I/O configuration, the storage configuration, and the workload processed.
Therefore, no assurance can be given that an individual user will achieve results
similar to those stated here.
2
3. Outline
Evolution of Java EE and Spring
Java EE 6 & Spring 3.0, 3.1 highlights
Spring 3.1 feature comparison with Java EE 6
CDI and Spring ecosystem
Spring and Java EE coexistence
Spring to Java EE migration
Conclusion
3
6. JSR 299 Contexts and Dependency Injection (CDI)
Adds dependency injection to JEE and interceptor bindings
makes it type-safe. – Refines interceptors into decorators
for finer grained control
– Hollywood principle - Don’t call us,
we will call you Integrates with the Unified EL to bridge
– No hard coded dependencies on JSF
other specifications
– Enables use of EJB 3.0 components
Assists in unifying the Bean model as JSF managed beans
Well defined contexts, the ability to bind Introduces an SPI to extend JEE – Roll
your own JEE7!
beans statefully to them & manage their
lifecycle. – Not only an API but also a SPI
– Rich ecosystem of CDI extensions
Introduces an event notification system
Adds the Web conversation context
to decouple producers & consumers
Spring does NOT provide support for
Uses interceptors to foster loose
CDI
coupling
– Extend behavior with type safe
6
7. Spring Framework
Lightweight dependency injection
Aspect oriented
Layered application & container framework
Well defined modules on top of the core container
NOT an all-or-nothing solution
7
8. Evolution of Spring [ 1.0, 2.0, 2.5, 3.0, 3.1]
3.0 3.1
• JSR-330 “at • A new “c”
inject” namespace
2.5 • New Spring • Configuration
1.0 2.0 • Annotation- Expression profiles
• Dependency
driven wiring Language
• Problem-
• Automatic • First-class REST • Unified
injection specific XML
bean support property
• POJO- • Extensible
oriented configuration • Java-based resolution
configuration
development • New configuration • Java
• Bean scoping annotation-
• Declarative • Several new configuration
• Groovy, JRuby, driven MVC Spring MVC
AOP &
and BeanShell
features
transactions framework features
• MVC • JSP tag library • JUnit 4-based
• Servlet 3.0
• Support for JSR- support
framework • Java 5 integration 303 declarative
autoboxing testing validation • Declarative
and generics • Annotation-based caching
background and • Spring MVC
scheduled jobs enhancements
8
33. Hacking the Java EE Platform - CDI Extensions
Activated by dropping jars on the application classpath
Loaded by the java.util.ServiceLoader SPI
Integrate with container through container lifecycle events by
– Register additional beans, interceptors and decorators
– Injecting dependencies into its own objects
– Introduce custom scope with backing context
– Augment or override bean annotation-based metadata with other
source
Tools/utilities, extending Java EE, integration with Java EE
APIs, integrating with non-standard APIs, making Java EE
features available in non-Java EE
33
36. Spring & Java EE Coexistence
Integration with Java EE APIs
– Spring beans can be injected into JSF Managed Beans
– Spring beans can be referenced in EL with no JSF Backing beans
– Spring JmsTemplate can be used on top of raw JMS API for convenience
– Spring Listeners similar to EJB MDBs especially JCA rather than JMS listeners
– Hibernate validator standardized as Bean Validation (JSR 303)
– Spring 3 supports excellent bi-directional integration with EJBs
– CDI and Spring Integration through the Spring Bridge to CDI
Native support for Java EE
– Java EE5 and Java EE6 annotations supported by Spring
– Spring can use JPA / Hibernate natively
Application server integration
– DataSources can use application server QoS like pooling, transactions, statement caching,
debugging, monitoring and security
36
37. Best Practices integrating Spring WAS
Presentation tier considerations
– Web MVC & Portlet
Data access considerations
– Using JDBC native connections
– Transactions, JPA & JMS
Spring Security Considerations
– Bypassing WAS security
Integration & Management considerations
– Registering Spring Mbeans in the application server
– Classloaders
Design Considerations
– Unmanaged threads
– Scheduling & Threadpools
37
39. Migrating Spring to Java EE 6
1. Upgrade Spring version
2. Replace old frameworks (ORM, Web Framework) within Spring
3. Run Spring and Java EE container side by side
4. Replace Spring entirely
5. Remove Spring container
39
40. Myths of Java EE
EJBs are heavy weight "bloated“
EJBs are hard to test J2EE and EJB2 sucked! “That
EJBs are not portable was eight years ago! Is this really
your best shot?”
EJBs are slow
Application server portability is a
EJBs are not scalable myth!
EJBs are too complex
EJBs are hard to integrate with
Web Frameworks and POJOs
EJBs are hard to configure
EJBs are hard to migrate
EJBs are hard to develop
EE application servers are
40
42. References
Evolution of Java EE http://en.wikipedia.org/wiki/Java_EE_version_history
Java EE 6 Tutorial http://download.oracle.com/javaee/6/tutorial/doc/
Spring Docs http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/
Spring Projects http://www.springsource.org/projects
Miscellaneous CDI Extensions https://github.com/softwaremill/softwaremill-common
Migrating Spring to Java EE
– https://github.com/paulbakker/migrating-spring-to-javaee
– http://ocpsoft.com/java/spring-to-java-ee-a-migration-guide-cdi-jsf-jpa-jta-ejb/
CDI- Spring Bridge
– http://rick-hightower.blogspot.com/2011/04/cdi-and-spring-living-in-harmony.html
– http://niklasschlimm.blogspot.com/2011/08/jsr-299-cdi-interceptors-for-spring.html
– http://niklasschlimm.blogspot.com/2011/08/jsr-299-cdi-decorators-for-spring-beans.html
Best practices integrating Spring with WebSphere Application Server
– http://www.ibm.com/developerworks/websphere/techjournal/0609_alcott/0609_alcott.htm
What’s new in Spring 3.1 http://static.springsource.org/spring/docs/3.1.x/spring-framework-
reference/htmlsingle/spring-framework-reference.html#new-in-3.1
42
44. We love your Feedback!
Don’t forget to submit your Impact session and speaker
feedback! Your feedback is very important to us, we use it to
improve our conference for you next year.
Go to impactsmartsite.com from your mobile device
From the Impact 2012 Online Conference Guide:
– Select Agenda
– Navigate to the session you want to give feedback on
– Select the session or speaker feedback links
– Submit your feedback
44