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
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
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
J2EE Java EE Specifications




                                   * Introduced in spec.
4
Evolution of J2EEJava EE6 (Dec 09)
                                                               • Facelets, built-in-AJAX, Skins,
     New specs (JAX-RS, CDI, Bean                               Annotations, Resource handling
      Validation)                                              • Simplified Navigation, Easier custom
                                                                 components, View & Page scopes
     Prune dead wood                                          • Bookmarkable pages, Project Stage,
        –   EJB 2.x, JAX-RPC, JAXR, JEE App.                     Expanded event model
            Deploy, JEE App mgmt.                        –   JPA 2.0
     Extensibility                                            • Mapping enhancements, JPAQL,
                                                                 Criteria Query API, Pessimistic
        –    Easy Framework Pluggability (web                    locking
            fragments & CDI Extensions)
                                                      Profiles reduce platform size
     Enhanced ease of development
                                                         –   Web Profile 12 specs
        –   POJO annotation based Servlets,
        –   Asynchronous processing (Servlet 3.0 &    Vendor support
            EJB 3.1)                                     –   WebSphere AS 8
        –   EJB 3.1                                      –   JBOSS AS 7
              • EJB-in-WAR, No-interface view,           –   Oracle WebLogic 11g
                 Singleton, EJB-lite, Timers
                                                         –   Glassfish 3
        –   Contextual Dependency Injection (CDI)
        –   RESTful services
        –    Portable JNDI names
        –   JSF2.0


5
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
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
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
Birds Eye View




9
Java EE vs. Spring Framework Features/APIs




10
Java EE vs. Spring Business Component




11
Spring XML for Business Component Injection




12
Spring XML for Business Component Injection




13
Spring Java Based Configuration




14
Spring Java Based Configuration




15
Java EE Interceptor vs. Spring Aspects




16
Java EE vs. Spring Injection




17
Java EE vs. Spring Injection




18
JSF 2 vs. Spring MVC Front Controller
      Facelet Component




19
JSF 2 vs. Spring MVC Front Controller
      Facelet




20
JSF 2 vs. Spring MVC Front Controller
                                  Entity




21
JSF 2 vs. Spring MVC
     Spring MVC JSP




22
Spring MVC Configuration




23
Spring Controller




24
Spring MVC web.xml configuration




25
Java EE vs. Spring Scheduling




26
Java EE vs. Spring Scheduling




27
Java EE vs. Spring Messaging




28
Spring JMS Configuration




29
Spring Message Producer




30
Java EE Message Producer & JMS Abstraction




31
Java EE Message Producer & JMS Abstraction




32
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
Spring Ecosystem




34
CDI Ecosystem Snapshot

     Implementations            Portable    Runtimes
                               Extensions



     Weld   CanDI




                       Tools




35
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
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
Java EE coexistence with Spring




38
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
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
Birds Eye View




41
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
References continued
        SEAM 3 http://seamframework.org/Seam3
        CODI http://myfaces.apache.org/extensions/cdi/
        Weld http://seamframework.org/Weld
        CanDI http://www.caucho.com/resin/candi/
        OpenWebBeans
         http://openwebbeans.apache.org/owb/index.html




43
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
Copyright and Trademarks

       © IBM Corporation 2012. All Rights Reserved.

        IBM, the IBM logo, ibm.com are trademarks or registered
          trademarks of International Business Machines Corp.,
      registered in many jurisdictions worldwide. Other product and
     service names might be trademarks of IBM or other companies.
        A current list of IBM trademarks is available on the Web at
                “Copyright and trademark information” at
                    www.ibm.com/legal/copytrade.shtml.




45

2012 04-06-v2-tdp-1163-java e-evsspringshootout-final

  • 1.
    Java EE andSpring 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
  • 4.
    J2EE Java EESpecifications * Introduced in spec. 4
  • 5.
    Evolution of J2EEJavaEE6 (Dec 09) • Facelets, built-in-AJAX, Skins,  New specs (JAX-RS, CDI, Bean Annotations, Resource handling Validation) • Simplified Navigation, Easier custom components, View & Page scopes  Prune dead wood • Bookmarkable pages, Project Stage, – EJB 2.x, JAX-RPC, JAXR, JEE App. Expanded event model Deploy, JEE App mgmt. – JPA 2.0  Extensibility • Mapping enhancements, JPAQL, Criteria Query API, Pessimistic – Easy Framework Pluggability (web locking fragments & CDI Extensions)  Profiles reduce platform size  Enhanced ease of development – Web Profile 12 specs – POJO annotation based Servlets, – Asynchronous processing (Servlet 3.0 &  Vendor support EJB 3.1) – WebSphere AS 8 – EJB 3.1 – JBOSS AS 7 • EJB-in-WAR, No-interface view, – Oracle WebLogic 11g Singleton, EJB-lite, Timers – Glassfish 3 – Contextual Dependency Injection (CDI) – RESTful services – Portable JNDI names – JSF2.0 5
  • 6.
    JSR 299 Contextsand 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
  • 9.
  • 10.
    Java EE vs.Spring Framework Features/APIs 10
  • 11.
    Java EE vs.Spring Business Component 11
  • 12.
    Spring XML forBusiness Component Injection 12
  • 13.
    Spring XML forBusiness Component Injection 13
  • 14.
    Spring Java BasedConfiguration 14
  • 15.
    Spring Java BasedConfiguration 15
  • 16.
    Java EE Interceptorvs. Spring Aspects 16
  • 17.
    Java EE vs.Spring Injection 17
  • 18.
    Java EE vs.Spring Injection 18
  • 19.
    JSF 2 vs.Spring MVC Front Controller  Facelet Component 19
  • 20.
    JSF 2 vs.Spring MVC Front Controller  Facelet 20
  • 21.
    JSF 2 vs.Spring MVC Front Controller Entity 21
  • 22.
    JSF 2 vs.Spring MVC Spring MVC JSP 22
  • 23.
  • 24.
  • 25.
    Spring MVC web.xmlconfiguration 25
  • 26.
    Java EE vs.Spring Scheduling 26
  • 27.
    Java EE vs.Spring Scheduling 27
  • 28.
    Java EE vs.Spring Messaging 28
  • 29.
  • 30.
  • 31.
    Java EE MessageProducer & JMS Abstraction 31
  • 32.
    Java EE MessageProducer & JMS Abstraction 32
  • 33.
    Hacking the JavaEE 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
  • 34.
  • 35.
    CDI Ecosystem Snapshot Implementations Portable Runtimes Extensions Weld CanDI Tools 35
  • 36.
    Spring & JavaEE 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 integratingSpring 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
  • 38.
    Java EE coexistencewith Spring 38
  • 39.
    Migrating Spring toJava 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 JavaEE  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
  • 41.
  • 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
  • 43.
    References continued  SEAM 3 http://seamframework.org/Seam3  CODI http://myfaces.apache.org/extensions/cdi/  Weld http://seamframework.org/Weld  CanDI http://www.caucho.com/resin/candi/  OpenWebBeans http://openwebbeans.apache.org/owb/index.html 43
  • 44.
    We love yourFeedback!  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
  • 45.
    Copyright and Trademarks © IBM Corporation 2012. All Rights Reserved. IBM, the IBM logo, ibm.com are trademarks or registered trademarks of International Business Machines Corp., registered in many jurisdictions worldwide. Other product and service names might be trademarks of IBM or other companies. A current list of IBM trademarks is available on the Web at “Copyright and trademark information” at www.ibm.com/legal/copytrade.shtml. 45