Bridging The Gap  Integrating Spring and CDI                       Ray Ploski                        Director, Developer P...
Protagonists                 Spring                       Contexts & Dependency Injection                Since 2004       ...
Commonalities• Similar Concepts • container - managing object  graphs according to a developer-  provided blueprint • bean...
Differences                 JPA          JMS             JDBC      JSF          JTA   CDI                 JSP          EJB...
Seam-Spring Module    A utility library for integratingSpring and CDI programming models         Enables the use of     Ja...
Seam 3 Spring Module• Seam3 - a library of CDI extensions• Similar functionality to the Seam 2 Spring integration • With C...
Seam 3 Spring Module• Seam3 - a library of CDI extensions• Similar functionality to the Seam 2 Spring integration • With C...
Seam 3 Modules               •   Mail•   Solder               •   Validation•   Config               •   Wicket•   Social  ...
Seam 3 Modules                                 DeltaSpike               •   Mail•   Solder               •   Validation•  ...
Seam3 Spring Module         Design Goals• Minimize changes to existing code• Non-intrusive approach• Highly customizable• ...
Why?• Reuse existing investments• Integrate groups with various expertise• Simplify integration of Spring and Java EE• Eas...
Seam 3 Spring Module Features• Integrating Spring components  into CDI • Accessing Spring    ApplicationContexts   • creat...
Integrating Spring into CDI   1.) Get the ApplicationContext
Integrating Spring components into CDI  Managed                        Managed   • Implemented as a Standard CDI   Bean   ...
ApplicationContext Management   Spring contexts are exposed as CDI beans                          	   @Produces @Web @Spri...
@SpringContext Annotation1.) Bootstrapped By Spring- CDI Extension 	 @Produces @SpringContext 	 @ApplicationScoped 	 @Conf...
@SpringContext Annotation2.) Used within a CDI Managed Bean 	 //Usage 	 @Inject @SpringContext 	 ApplicationContext context;
@SpringContext Annotation1.) Web Application Context (external) // Spring Application Context loaded by // Servlet contain...
Integrating Spring into CDI  2.) Get access to the Spring Beans
@SpringContext Annotation2.) Use within a CDI Managed Bean 	 //Usage 	 @Inject @SpringContext 	 ApplicationContext context;
Spring Bean ProducerApply the resource producer pattern for creatingSpring ApplicationContext CDI beans@Produces @SpringBe...
Avoiding Bean Duplication•Imported Spring beans may cause duplication issues • CDI will add any classes automatically as b...
Bean Duplication and Vetoing                      Importing beans may                      result in duplication ...... bu...
In-Extension Context Bootstrapping  •Alternative to @Produces @SpringContext   @Configuration  •Advantages relative to CDI ...
Integrating CDI into Spring
CDI integration into Spring• Uses standard Spring mechanisms • BeanFactories • BeanPostProcessors/BeanFactoryPostProcessor...
Accessing the Bean Manager          <cdi:bean-manager/>         •Usage:          @Autowired BeanManager beanManager;xmlns:...
Accessing CDI Beans        	<cdi:bean-reference id="user" type="example.User">               <cdi:qualifier type="example....
Importing CDI Beans into Spring
Scoping•Spring and CDI have different approaches to bean scoping • Spring - singletons, application-scoped • CDI - prototy...
Beyond CDI•This module can serve as basis for integrating any Java EE component with Spring • EJBs • JAX-RS  • any compone...
Roadmap• Current version: 3.1.0.Final (included in Seam 3.1.0.Final)• Upcoming versions:  o 3.1.x - minor features, bug fi...
ENTERPRISE APPLICATION               PLATFORM               6.0JBoss AS 7.1
SUBSCRIPTIONS = DEVELOPER PRODUCTIVITY                                      Frees you to focus on the new stuff  NOT JUST ...
Thank You!             Seam 3 Spring Module - http://bit.ly/Seam3Spring         Example Code - http://bit.ly/JUDConSeamSpr...
Spring - CDI Interop
Upcoming SlideShare
Loading in...5
×

Spring - CDI Interop

6,568

Published on

My talk at JUDCon:India about Spring/CDI interop.

Published in: Technology, Education
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
6,568
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
66
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Spring - CDI Interop

  1. 1. Bridging The Gap Integrating Spring and CDI Ray Ploski Director, Developer Programs & Strategy @rayploski
  2. 2. Protagonists Spring Contexts & Dependency Injection Since 2004 Since 2009 Popular Enterprise Java Framework Standard Programming Model for Java EE 6Conceived to provide an alternative to EJBs Integrates with EJB Dependency Injection Dependency Injection AOP Cross Cutting Concerns
  3. 3. Commonalities• Similar Concepts • container - managing object graphs according to a developer- provided blueprint • bean - a managed object• Both Support • JSR-330 (@Inject) • JSR-250 (Java EE 5 injection, Lifecycle Annotations)
  4. 4. Differences JPA JMS JDBC JSF JTA CDI JSP EJB Spring•Implicit (CDI) vs. explicit (Spring) blueprint
  5. 5. Seam-Spring Module A utility library for integratingSpring and CDI programming models Enables the use of Java business components across technology lines
  6. 6. Seam 3 Spring Module• Seam3 - a library of CDI extensions• Similar functionality to the Seam 2 Spring integration • With CDI specific undertones• Will merge into Apache DeltaSpike
  7. 7. Seam 3 Spring Module• Seam3 - a library of CDI extensions• Similar functionality to the Seam 2 Spring integration • With CDI specific undertones• Will merge into Apache DeltaSpike + + CDISource DeltaSpike
  8. 8. Seam 3 Modules • Mail• Solder • Validation• Config • Wicket• Social • Catch• JMS • Remoting• JCR Drools SwitchYard • REST• Security • Faces jBPM Errai• I18N • Spring TBD Ecetera
  9. 9. Seam 3 Modules DeltaSpike • Mail• Solder • Validation• Config • Wicket• Social • Catch Various JBoss• JMS Projects • Remoting• JCR Drools SwitchYard • REST• Security • Faces jBPM Errai• I18N • Spring TBD Ecetera
  10. 10. Seam3 Spring Module Design Goals• Minimize changes to existing code• Non-intrusive approach• Highly customizable• Mirror similar capabilities
  11. 11. Why?• Reuse existing investments• Integrate groups with various expertise• Simplify integration of Spring and Java EE• Ease migration of legacy Spring apps to Java EE 6
  12. 12. Seam 3 Spring Module Features• Integrating Spring components into CDI • Accessing Spring ApplicationContexts • created by the extension -or- • access AC’s created by Spring components (e.g. web ApplicationContext)• Accessing CDI beans • exposing Spring beans as CDI beans
  13. 13. Integrating Spring into CDI 1.) Get the ApplicationContext
  14. 14. Integrating Spring components into CDI Managed Managed • Implemented as a Standard CDI Bean Managed Bean Extension Bean • Spring contexts and Spring beans are installed as CDI beans • ApplicationContexts • Implemented using the resource • Spring Beans producer pattern * Can be bootstrapped or external
  15. 15. ApplicationContext Management Spring contexts are exposed as CDI beans @Produces @Web @SpringContext ApplicationContext context;Created by Seam Created by Spring Spring Module - or - - @Producer fields e.g. a Web - SPI Based ApplicationContext
  16. 16. @SpringContext Annotation1.) Bootstrapped By Spring- CDI Extension @Produces @SpringContext @ApplicationScoped @Configuration (locations={"classpath:springCtx.xml"}) ApplicationContext springContext;
  17. 17. @SpringContext Annotation2.) Used within a CDI Managed Bean //Usage @Inject @SpringContext ApplicationContext context;
  18. 18. @SpringContext Annotation1.) Web Application Context (external) // Spring Application Context loaded by // Servlet container @Produces @Web @SpringContext ApplicationContext context;
  19. 19. Integrating Spring into CDI 2.) Get access to the Spring Beans
  20. 20. @SpringContext Annotation2.) Use within a CDI Managed Bean //Usage @Inject @SpringContext ApplicationContext context;
  21. 21. Spring Bean ProducerApply the resource producer pattern for creatingSpring ApplicationContext CDI beans@Produces @SpringBean UserService userService;//Usage@SessionScopedpublic class AllocationManager { @Inject UserService userService;}
  22. 22. Avoiding Bean Duplication•Imported Spring beans may cause duplication issues • CDI will add any classes automatically as beans • Extension-added beans will be in conflict•Options: • Solder @Veto annotation (recommended) • Using side-effects of @Typed and @Alternative (standard-based but we do not recommend)• Proprietary extensions for bean scanning (e.g. Weld)
  23. 23. Bean Duplication and Vetoing Importing beans may result in duplication ...... but vetoing cansolve this problem
  24. 24. In-Extension Context Bootstrapping •Alternative to @Produces @SpringContext @Configuration •Advantages relative to CDI lifecycle • Spring context is bootstrapped before bean discovery • Spring bean classes are automatically vetoed
  25. 25. Integrating CDI into Spring
  26. 26. CDI integration into Spring• Uses standard Spring mechanisms • BeanFactories • BeanPostProcessors/BeanFactoryPostProcessors• Most facilities are hidden behind the <cdi:*/> namespace
  27. 27. Accessing the Bean Manager    <cdi:bean-manager/> •Usage: @Autowired BeanManager beanManager;xmlns:cdi="http://www.jboss.org/schema/seam/spring"
  28. 28. Accessing CDI Beans <cdi:bean-reference id="user" type="example.User">         <cdi:qualifier type="example.BusinessUser"/> </cdi:bean-reference> @Component  public class User { @Autowired User user; }xmlns:cdi="http://www.jboss.org/schema/seam/spring"
  29. 29. Importing CDI Beans into Spring
  30. 30. Scoping•Spring and CDI have different approaches to bean scoping • Spring - singletons, application-scoped • CDI - prototype, default-scoped•The module preserves the original scope • @SpringContext beans are @ApplicationScoped  • @SpringBean are default-scoped and fall back to the native Spring scope (AOP scope proxy required) • CDI beans are prototype-scoped and fall back to the native CDI scope (through their scoped proxy) 
  31. 31. Beyond CDI•This module can serve as basis for integrating any Java EE component with Spring • EJBs • JAX-RS  • any component that understands CDI
  32. 32. Roadmap• Current version: 3.1.0.Final (included in Seam 3.1.0.Final)• Upcoming versions: o 3.1.x - minor features, bug fixes o 3.2.x (March/April 2012) - additional features  bean autoimport  eventing bridge  bridging Spring AOP/CDI interceptors,decorators  Seam Persistence integration (transactions, Persistence Contexts)• Post 3.2 o integration into Apache DeltaSpike
  33. 33. ENTERPRISE APPLICATION PLATFORM 6.0JBoss AS 7.1
  34. 34. SUBSCRIPTIONS = DEVELOPER PRODUCTIVITY Frees you to focus on the new stuff NOT JUST FOR ADMINS“Q: I’m writing a WS-Policy and...” A C C E L E R AT E KILL YOUR PROJECT! DRUDGERY Fight your bugs, not others’ 33 http://www.redhat.com/jboss/benefits/
  35. 35. Thank You! Seam 3 Spring Module - http://bit.ly/Seam3Spring Example Code - http://bit.ly/JUDConSeamSpringCode Apache DeltaSpike - http://bit.ly/zsWz2xRay PloskiDirector, Developer Programs & Strategy @rayploski
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×