Your SlideShare is downloading. ×
0
Java  EE vs Spring Framework
Java  EE vs Spring Framework
Java  EE vs Spring Framework
Java  EE vs Spring Framework
Java  EE vs Spring Framework
Java  EE vs Spring Framework
Java  EE vs Spring Framework
Java  EE vs Spring Framework
Java  EE vs Spring Framework
Java  EE vs Spring Framework
Java  EE vs Spring Framework
Java  EE vs Spring Framework
Java  EE vs Spring Framework
Java  EE vs Spring Framework
Java  EE vs Spring Framework
Java  EE vs Spring Framework
Java  EE vs Spring Framework
Java  EE vs Spring Framework
Java  EE vs Spring Framework
Java  EE vs Spring Framework
Java  EE vs Spring Framework
Java  EE vs Spring Framework
Java  EE vs Spring Framework
Java  EE vs Spring Framework
Java  EE vs Spring Framework
Java  EE vs Spring Framework
Java  EE vs Spring Framework
Java  EE vs Spring Framework
Java  EE vs Spring Framework
Java  EE vs Spring Framework
Java  EE vs Spring Framework
Java  EE vs Spring Framework
Java  EE vs Spring Framework
Java  EE vs Spring Framework
Java  EE vs Spring Framework
Java  EE vs Spring Framework
Java  EE vs Spring Framework
Java  EE vs Spring Framework
Java  EE vs Spring Framework
Java  EE vs Spring Framework
Java  EE vs Spring Framework
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Java EE vs Spring Framework

24,641

Published on

This session compares the Spring and Java EE stacks in terms of Web frameworks. It re-examines the motivations behind the Spring framework and explores the emergence of the Java EE programming model …

This session compares the Spring and Java EE stacks in terms of Web frameworks. It re-examines the motivations behind the Spring framework and explores the emergence of the Java EE programming model to meet the challenges posed. The presentation provides insight into when Spring and/or Java EE is appropriate for a building Web applications and if they can coexist.

Published in: Technology, Education
1 Comment
14 Likes
Statistics
Notes
  • http://dbmanagement.info/Tutorials/Java.htm
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
No Downloads
Views
Total Views
24,641
On Slideshare
0
From Embeds
0
Number of Embeds
35
Actions
Shares
0
Downloads
661
Comments
1
Likes
14
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide
  • http://www.ibm.com/developerworks/websphere/library/techarticles/0707_barcia/0707_barcia.htmlhttp://en.wikipedia.org/wiki/Java_EE_version_historyA brief history of J2EE / Java EEBefore J2EE (Mid 1990s)Many competing products, In-house frameworks, Fragmented server side market, real danger of vendor lock-in, expensive solutionsGlory days of J2EE (1999-2003)Release of J2EE 1.2, 1.3 & 1.4Specifying first and then implementingStandardization of server side java enterprise technologiesEnterprise Java gains a reputation of complexityDecline of J2EE (2004- 2008)Projects fail due to flaws in platformRise of open source – Spring Framework, Seam, AspectJ, HibernateMove towards lighter weight solutionsRise of Java EE (2007 - Present)Emphasis on user Component model not just a deployment platformDeveloper productivity & ease of use enhancements Extensibility and right sizingTraps that created complexityDesign by committeeEverything has to be standardizedTools can make complexity acceptableLack of openness to other platforms, sources of ideasLack of developer freedom to hack the platformIvory tower architectureEJB Programming model was the worst offenderNaïve ORM solution & Broken persistence modelIdea that all business objects should be distributedRigid API interfaces, Difficult to unit test, Needed IDE toolingGlutton for XML & boilerplateJSF 1.2 ShortcomingsNo integration with EJBsNo templating support (before 1.2) Transparent to HTTP RequestsDifficult to create custom componentsLacks conversation scope & advanced componentsWeak page oriented supportOverly complex lifecycleJSP & JSF inherent mismatchJava EE pioneers innovations in server-side JavaA widely deployed but much maligned platformSpring, along with Hibernate, brings POJO programming, IoC and testability to the mainstreamJava EE 5 adopts ideas, as well as annotations and convention-over-configurationHibernate standardized into JPA, Spring remains nonstandard but adopts Java EE features to a degreeJava EE 6 matures ideas in Java EE 5 in addition to pruning and profilesCDI, JSF 2, JPA 2, EJB 3.1, Servlet 3, JAX-RS major API changes
  • Context abuse HttpSessionSo many beans so little common groundAddresses long standing challenges with Java EE
  • http://blog.springsource.com/2011/02/11/spring-framework-3-1-m1-released/Bean definition profilesUnified property management through Spring's new Environment abstractionEnhancements to Java-based configuration with @Feature methodsExpanded MVC namespace support and a Java-based configuration equivalentStreaming support and new interception model for the RestTemplate APIComprehensive caching supportNew c: XML namespace for concise configuration of constructor injection
  • Applications developed against commonframework(s)– common programming model– common configuration model• Adapted onto target platform at runtime– using common service abstractions– thread pooling, service lookups, etc• Strict separation between applicationcomponent model and platform services– clear boundaries and separation of responsibilitieshttp://www.springsource.org/aboutThe most complete lightweight container, providing centralized, automated configuration and wiring of your application objects. The container is non-invasive, capable of assembling a complex system from a set of loosely-coupled components (POJOs) in a consistent and transparent fashion. The container brings agility and leverage, and improves application testability and scalability by allowing software components to be first developed and tested in isolation, then scaled up for deployment in any environment (J2SE or J2EE). A common abstraction layer for transaction management, allowing for pluggable transaction managers, and making it easy to demarcate transactions without dealing with low-level issues. Generic strategies for JTA and a single JDBC DataSource are included. In contrast to plain JTA or EJB CMT, Spring's transaction support is not tied to J2EE environments. A JDBC abstraction layer that offers a meaningful exception hierarchy (no more pulling vendor codes out of SQLException), simplifies error handling, and greatly reduces the amount of code you'll need to write. You'll never need to write another finally block to use JDBC again. The JDBC-oriented exceptions comply to Spring's generic DAO exception hierarchy. Integration with Toplink, Hibernate, JDO, and iBATIS SQL Maps: in terms of resource holders, DAO implementation support, and transaction strategies. First-class Hibernate support with lots of IoC convenience features, addressing many typical Hibernate integration issues. All of these comply to Spring's generic transaction and DAO exception hierarchies. AOP functionality, fully integrated into Spring configuration management. You can AOP-enable any object managed by Spring, adding aspects such as declarative transaction management. With Spring, you can have declarative transaction management without EJB... even without JTA, if you're using a single database in Tomcat or another web container without JTA support. A flexible MVC web application framework, built on core Spring functionality. This framework is highly configurable via strategy interfaces, and accommodates multiple view technologies like JSP, Velocity, Tiles, iText, and POI. Note that a Spring middle tier can easily be combined with a web tier based on any other web MVC framework, like Struts, WebWork, or Tapestry.
  • Both are competent middleware stacks with mostly equivalent functionality but very different approachesJava EE provides a well-integrated solution stack that makes sensible default choices for you and minimizes the amount of configuration requiredSpring is a pluggable framework with explicit configuration, fine grained control and wide-variety of integration with overlapping technologiesJava EE is an open standard, while Spring is an open source tool from a commercial vendorCDI and 3rd party Extensions have provided a standard compliant way to hack the Java EE platformSpring framework weakens integration with application server runtime QoS, such as security, workload management, and high availabilitySeveral implementations of Java EE specifications are available whereas Spring has only ONE implementationPace of innovation is faster in the Spring Framework since Spring is Community driven vs Java EE that is driven by the JCP
  • MyFaces CODI is your best friend for CDI based projects.The Apache MyFaces Extensions CDI project (aka CODI) hosts portable extensions for Contexts and Dependency Injection (CDI - JSR 299) for the Java-Platform (SE and EE). CODI is a toolbox for your CDI application (it provides advanced and convenient features e.g. for JSF and Bean-Validation). Like CDI itself CODI is focused on type-safety. It is a modularized and extensible framework. So it's easy to choose the needed parts to facilitate the daily work in your project.The main focus is to provide superior tools which will support you on solving your daily needs of software development with CDI, JSF, BV and JPA. However, you will also find modules which are independent of JSF as well as modules which improve the compatibility with other MyFaces frameworks like MyFacesExtVal. Maybe the most important feature of MyFaces CODI is that it allows you to build a concise and efficient application-architecture.
  • Transcript

    • 1. Java EE and Spring Framework Shootout<br />Rohit Kelapure IBM Advisory Software Engineer, http://wasdynacache.blogspot.com/<br />Reza RahmanIndependent Consultant, Author, Java EE Expert http://www.rahmannet.net/<br />Presentation can be downloaded from http://db.tt/1q9us2JH<br />
    • 2. Important Disclaimers<br />THE INFORMATION CONTAINED IN THIS PRESENTATION IS PROVIDED FOR INFORMATIONAL PURPOSES ONLY. <br />WHILST EFFORTS WERE MADE TO VERIFY THE COMPLETENESS AND ACCURACY OF THE INFORMATION CONTAINED IN THIS PRESENTATION, IT IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED. <br />ALL PERFORMANCE DATA INCLUDED IN THIS PRESENTATION HAVE BEEN GATHERED IN A CONTROLLED ENVIRONMENT. YOUR OWN TEST RESULTS MAY VARY BASED ON HARDWARE, SOFTWARE OR INFRASTRUCTURE DIFFERENCES.<br />ALL DATA INCLUDED IN THIS PRESENTATION ARE MEANT TO BE USED ONLY AS A GUIDE.<br />IN ADDITION, THE INFORMATION CONTAINED IN THIS PRESENTATION IS BASED ON IBM’S CURRENT PRODUCT PLANS AND STRATEGY, WHICH ARE SUBJECT TO CHANGE BY IBM, WITHOUT NOTICE. <br />IBM AND ITS AFFILIATED COMPANIES SHALL NOT BE RESPONSIBLE FOR ANY DAMAGES ARISING OUT OF THE USE OF, OR OTHERWISE RELATED TO, THIS PRESENTATION OR ANY OTHER DOCUMENTATION. <br />NOTHING CONTAINED IN THIS PRESENTATION IS INTENDED TO, OR SHALL HAVE THE EFFECT OF: <br />- CREATING ANY WARRANT OR REPRESENTATION FROM IBM, ITS AFFILIATED COMPANIES OR ITS OR THEIR SUPPLIERS AND/OR LICENSORS<br />2<br />
    • 3. Copyright and Trademarks<br />© IBM Corporation 2011. All Rights Reserved. <br />IBM, the IBM logo, and ibm.com are trademarks or registered trademarks of International Business Machines Corp., and registered in many jurisdictions worldwide. <br />Other product and service names might be trademarks of IBM or other companies. <br />A current list of IBM trademarks is available on the Web – see the IBM “Copyright and trademark information” page at URL: www.ibm.com/legal/copytrade.shtml<br />3<br />
    • 4. Outline <br />Evolution of Java EE and Spring<br />Java EE 6 & Spring 3.0, 3.1 highlights<br />Spring 3.1 feature comparison with Java EE 6<br />CDI and Spring ecosystem<br />Spring and Java EE coexistence<br />Conclusion<br />4<br />
    • 5. J2EE Java EE Specifications<br />* Introduced in spec.<br />
    • 6. Evolution of J2EEJava EE6 (Dec 09)<br />New specs (JAX-RS, CDI, Bean Validation)<br />Prune dead wood<br />EJB 2.x, JAX-RPC, JAXR, JEE App. Deploy, JEE App mgmt.<br />Extensibility<br /> Easy Framework Pluggability (web fragments & CDI Extensions)<br />Enhanced ease of development<br />POJO annotation based Servlets, <br />Asynchronous processing (Servlet 3.0 & EJB 3.1)<br />EJB 3.1<br />EJB-in-WAR, No-interface view, Singleton, EJB-lite, Timers<br />Contextual Dependency Injection (CDI)<br />RESTful services<br />Portable JNDI names<br />JSF2.0<br />Facelets, built-in-AJAX, Skins, Annotations, Resource handling<br />Simplified Navigation, Easier custom components, View & Page scopes<br />Bookmarkable pages, Project Stage, Expanded event model<br />JPA 2.0<br />Mapping enhancements, JPAQL, Criteria Query API, Pessimistic locking<br />Profiles reduce platform size <br />Web Profile 12 specs<br />Vendor support<br />WebSphere AS 8<br /> JBOSS AS 7<br /> Oracle WebLogic 11g<br /> Glassfish 3<br />6<br />
    • 7. JSR 299 Contexts and Dependency Injection (CDI)<br /><ul><li>Adds dependency injection to JEE and makes it type-safe.
    • 8. Hollywood principle - Don’t call us, we will call you
    • 9. No hard coded dependencies on other specifications</li></ul>Assists in unifying the Bean model<br />Well defined contexts, the ability to bind beans statefully to them & manage their lifecycle.<br />Introduces an event notification system to decouple producers & consumers<br />Uses interceptors to foster loose coupling <br />Extend behavior with type safe interceptor bindings<br />Refines interceptors into decorators for finer grained control<br />Integrates with the Unified EL to bridge JSF<br />Enables use of EJB 3.0 components as JSF managed beans<br />Introduces an SPI to extend JEE – Roll your own JEE7!<br />Not only an API but also a SPI<br />Rich ecosystem of CDI extensions<br />Adds the Web conversation context<br />Spring does NOT provide support for CDI<br />7<br />
    • 10. Evolution of Spring [ 1.0, 2.0, 2.5, 3.0, 3.1]<br />8<br />
    • 11. Spring Framework<br />9<br />Lightweight dependency injection <br />Aspect oriented<br />Layered application & container framework<br />Well defined modules on top of the core container<br />NOT an all-or-nothing solution<br />
    • 12. Birds Eye View<br />10<br />
    • 13. Java EE vs. Spring Framework Features/APIs Overview<br />11<br />
    • 14. Java EE vs. Spring Business Component<br />12<br />
    • 15. Spring XML for Business Component Injection<br />13<br />
    • 16. Spring XML for Business Component Injection<br />14<br />
    • 17. Spring Java Based Configuration<br />15<br />
    • 18. Spring Java Based Configuration<br />16<br />
    • 19. Java EE Interceptor vs. Spring Aspects<br />17<br />
    • 20. Java EE vs. Spring Injection<br />18<br />
    • 21. Java EE vs. Spring Injection – Spring configuration<br />19<br />
    • 22. Facelet Component<br />20<br />JSF 2 vs. Spring MVC Front Controller<br />
    • 23. 21<br />JSF 2 vs. Spring MVC Front Controller<br />Facelet<br />
    • 24. 22<br />JSF 2 vs. Spring MVC Front Controller<br />Entity<br />JSF Event Handler<br />
    • 25. JSF 2 vs. Spring MVC<br />23<br />Spring MVC JSP<br />
    • 26. Spring MVC Configuration<br />24<br />
    • 27. Spring Controller<br />25<br />
    • 28. Spring MVC web.xml configuration<br />26<br />
    • 29. Java EE vs. Spring Scheduling<br />27<br />
    • 30. Java EE vs. Spring Scheduling<br />28<br />
    • 31. Java EE vs. Spring Messaging<br />29<br />
    • 32. Spring JMS Configuration<br />30<br />
    • 33. Spring Message Producer<br />31<br />
    • 34. Java EE Message Producer & JMS Abstraction<br />32<br />
    • 35. Java EE Message Producer & JMS Abstraction<br />33<br />
    • 36. Hacking the Java EE Platform - CDI Extensions<br />Activated by dropping jars on the application classpath<br />Loaded by the java.util.ServiceLoader SPI<br />Integrate with container through container lifecycle events by<br />Register additional beans, interceptors and decorators<br />Injecting dependencies into its own objects<br />Introduce custom scope with backing context<br />Augment or override bean annotation-based metadata with other source<br /> Tools/utilities, extending Java EE, integration with Java EE APIs, integrating with non-standard APIs, making Java EE features available in non-Java EE <br />34<br />
    • 37. Spring Ecosystem<br />35<br />
    • 38. CDI Ecosystem Snapshot<br />36<br />Runtimes<br />Implementations<br />Portable Extensions<br />Weld<br />CanDI<br />Tools<br />
    • 39. Spring & Java EE Coexistence<br />Integration with Java EE APIs <br />Spring beans can be injected into JSF Managed Beans<br />Spring beans can be referenced in EL with no JSF Backing beans<br />Spring JmsTemplate can be used on top of raw JMS API for convenience<br />Spring Listeners similar to EJB MDBs especially JCA rather than JMS listeners<br />Hibernate validator standardized as Bean Validation (JSR 303) <br />Spring 3 supports excellent bi-directional integration with EJBs<br />CDI and Spring Integration through the Spring Bridge to CDI<br />Native support for Java EE<br />Java EE5 and Java EE6 annotations supported by Spring<br />Spring can use JPA / Hibernate natively<br />Application server integration<br />DataSourcescan use application server QoS like pooling, transactions, statement caching, debugging, monitoring and security<br />37<br />
    • 40. Java EE coexistence with Spring<br />38<br />
    • 41. Birds Eye View<br />39<br />
    • 42. References<br />Evolution of Java EE http://en.wikipedia.org/wiki/Java_EE_version_history<br />Java EE 6 Tutorial http://download.oracle.com/javaee/6/tutorial/doc/<br />Spring Docs http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/<br />Spring Projects http://www.springsource.org/projects<br />Miscellaneous CDI Extensions https://github.com/softwaremill/softwaremill-common<br />Migrating Spring to Java EE <br />https://github.com/paulbakker/migrating-spring-to-javaee<br />http://ocpsoft.com/java/spring-to-java-ee-a-migration-guide-cdi-jsf-jpa-jta-ejb/<br />CDI- Spring Bridge<br />http://rick-hightower.blogspot.com/2011/04/cdi-and-spring-living-in-harmony.html<br />http://niklasschlimm.blogspot.com/2011/08/jsr-299-cdi-interceptors-for-spring.html<br />http://niklasschlimm.blogspot.com/2011/08/jsr-299-cdi-decorators-for-spring-beans.html<br />Best practices integrating Spring with WebSphere Application Server<br />http://www.ibm.com/developerworks/websphere/techjournal/0609_alcott/0609_alcott.htm<br />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<br />40<br />
    • 43. References continued <br />SEAM 3 http://seamframework.org/Seam3<br />CODI http://myfaces.apache.org/extensions/cdi/<br />Weld http://seamframework.org/Weld<br />CanDIhttp://www.caucho.com/resin/candi/<br />OpenWebBeanshttp://openwebbeans.apache.org/owb/index.html<br />41<br />

    ×