CDI @ ApacheOpenWebBeans and DeltaSpike        Deep Dive       Mark Struberg      Gerhard Petracek
Agenda●   CDI and its terms●   Why OpenWebBeans?●   Portable CDI Extensions●   CDI by example with DeltaSpike
CDI is a ...●   JCP specification started in ~2007    Contexts and Dependency Injection for    the Java EE platform (CDI) ...
CDI Features●   Type-safe Dependency Injection●   Interceptors●   Decorators●   Events●   SPI for implementing "Portable E...
What is Dependency Injection?●   "Inversion Of Control" object creation●   No more hardcoded dependencies when    working ...
Singletons and Contexts●   What is a Singleton●   "exactly one single instance    in a well specified context"
Built-in CDI Scopes●   NormalScoped with well defined lifecycle:    – @ApplicationScoped    – @SessionScoped    – @Request...
Terms - Managed Bean●   ... a Java Class and all its rules to create    (contextual) instances of that bean.●   Managed Be...
Terms - Contextual Instance●   ... a Java instance created with the rules of    the Managed Bean Bean<T>●   Contextual Ins...
Terms - Contextual Reference●   ... a proxy for a Contextual Instance.●   Proxies will automatically be created for    inj...
Bootstrapping & Runtime●   Creating the meta information at startup    –   Bean meta-data can be changed    –   Fail fast ...
Why Apache OpenWebBeans?●   Fast●   Stable●   Modular Plugin Architecture●   Usable    (e.g. alternative approach for BDAs)
Portable CDI Extensions●   Apache MyFaces CODI    http://myfaces.apache.org/extensions/cdi●   JBoss Seam3    http://seamfr...
DeltaSpike closes the gapsbetween ...●   ... Java-EE and the needs of        real-world applications●   ... different CDI ...
History of Apache DeltaSpike
CDI in Action with Apache DeltaSpike
DeltaSpike 0.3 - Overview●   Core●   JPA●   Security●   Container-Control
Interceptors and Producers in action
@Transactional - 1●   Transactional bean in the application    @Transactional    public class MyBean {      @Inject      p...
@Transactional - 2●   Producer and disposer in the application    @Produces    @TransactionScoped    protected EntityManag...
@Transactional - 3●   Interceptor annotation in DeltaSpike    @InterceptorBinding    public @interface Transactional {    ...
@Transactional - 4●   Interceptor implementation in DeltaSpike    @Interceptor @Transactional    public class Transactiona...
Qualifiers in action
@Transactional - 5●   Transactional bean in the application    @Transactional    public class MyBean {      @Inject      p...
@Transactional - 6●   Producer implementations in the application    @Produces @RequestScoped @First    protected EntityMa...
@Transactional - 7●   Producers and disposers in the application    protected void disposeFirst(@Disposes @First      Enti...
@Transactional - 8●   Qualifier implementations in the application    @Qualifier    public @interface First {    }    @Qua...
Events in action
@BeforeJsfRequest - 1●   Observer in the application    public void onBeforeJsfRequest(      @Observes @BeforeJsfRequest  ...
@BeforeJsfRequest - 2●   Fired event in DeltaSpike    @Inject    @BeforeJsfRequest    private Event<FacesContext> beforeJs...
@Specializes and @Alternative
@Specializes configs - 1●   Specialized type-safe config in the    application    @Specializes    public class CustomWindo...
@Specializes configs - 2●   Config implementation in CODI (/DS)    @ApplicationScoped    public class WindowContextConfig ...
@Alternative - 1●   Alternative implementation in the    application    @Alternative    @Exclude(      exceptIfProjectStag...
@Alternative - 2●   Primary implementation in the application    public interface MailService {    }    @ApplicationScoped...
Apache DeltaSpike.Next●   Simple answer:    There is no fixed master plan!    The future depends on the community    -> ge...
Upcoming SlideShare
Loading in...5
×

OpenWebBeans and DeltaSpike at ApacheCon

6,856

Published on

OpenWebBeans and DeltaSpike at ApacheCon 2012

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
6,856
On Slideshare
0
From Embeds
0
Number of Embeds
42
Actions
Shares
0
Downloads
0
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Transcript of "OpenWebBeans and DeltaSpike at ApacheCon"

  1. 1. CDI @ ApacheOpenWebBeans and DeltaSpike Deep Dive Mark Struberg Gerhard Petracek
  2. 2. Agenda● CDI and its terms● Why OpenWebBeans?● Portable CDI Extensions● CDI by example with DeltaSpike
  3. 3. CDI is a ...● JCP specification started in ~2007 Contexts and Dependency Injection for the Java EE platform (CDI) as JSR-299● component model designed for Java EE (can be used with Java SE)
  4. 4. CDI Features● Type-safe Dependency Injection● Interceptors● Decorators● Events● SPI for implementing "Portable Extensions"● Unified EL integration
  5. 5. What is Dependency Injection?● "Inversion Of Control" object creation● No more hardcoded dependencies when working with Interfaces MailService ms = new VerySpecialMailService();● Basically the old Factory Pattern● Hollywood Principle: "Dont call us, we call you!"● Macho Principle "Dude, gimme that bloody stuff!"
  6. 6. Singletons and Contexts● What is a Singleton● "exactly one single instance in a well specified context"
  7. 7. Built-in CDI Scopes● NormalScoped with well defined lifecycle: – @ApplicationScoped – @SessionScoped – @RequestScoped – @ConversationScoped● Pseudo Scope: – @Dependent
  8. 8. Terms - Managed Bean● ... a Java Class and all its rules to create (contextual) instances of that bean.● Managed Beans in JSR-299 and JSR-346 doesnt mean JavaBeans!● Interface Bean<T> extends Contextual<T>
  9. 9. Terms - Contextual Instance● ... a Java instance created with the rules of the Managed Bean Bean<T>● Contextual Instances usually dont get injected directly!
  10. 10. Terms - Contextual Reference● ... a proxy for a Contextual Instance.● Proxies will automatically be created for injecting @NormalScope beans and allow decoupled scope handling
  11. 11. Bootstrapping & Runtime● Creating the meta information at startup – Bean meta-data can be changed – Fail fast (e.g. AmbiguousResolutionException)● Contextual Instance creation at runtime – based on the Managed Beans – the Context will maintain the instances● Well defined contextual instance termination
  12. 12. Why Apache OpenWebBeans?● Fast● Stable● Modular Plugin Architecture● Usable (e.g. alternative approach for BDAs)
  13. 13. Portable CDI Extensions● Apache MyFaces CODI http://myfaces.apache.org/extensions/cdi● JBoss Seam3 http://seamframework.org/Seam3● Apache DeltaSpike http://incubator.apache.org/deltaspike
  14. 14. DeltaSpike closes the gapsbetween ...● ... Java-EE and the needs of real-world applications● ... different CDI communities
  15. 15. History of Apache DeltaSpike
  16. 16. CDI in Action with Apache DeltaSpike
  17. 17. DeltaSpike 0.3 - Overview● Core● JPA● Security● Container-Control
  18. 18. Interceptors and Producers in action
  19. 19. @Transactional - 1● Transactional bean in the application @Transactional public class MyBean { @Inject private EntityManager em; }
  20. 20. @Transactional - 2● Producer and disposer in the application @Produces @TransactionScoped protected EntityManager defaultEntityManager() { return …; } protected void dispose(@Disposes EntityManager em) { if (em.isOpen()) { em.close(); } }
  21. 21. @Transactional - 3● Interceptor annotation in DeltaSpike @InterceptorBinding public @interface Transactional { //... }
  22. 22. @Transactional - 4● Interceptor implementation in DeltaSpike @Interceptor @Transactional public class TransactionalInterceptor implements Serializable { @Inject private TransactionStrategy ts; @AroundInvoke public Object executeInTransaction( InvocationContext invocationContext) throws Exception { return ts.execute(invocationContext); } } + config in the beans.xml
  23. 23. Qualifiers in action
  24. 24. @Transactional - 5● Transactional bean in the application @Transactional public class MyBean { @Inject private @First EntityManager em1; @Inject private @Second EntityManager em2; }
  25. 25. @Transactional - 6● Producer implementations in the application @Produces @RequestScoped @First protected EntityManager firstEntityManager() { //... } @Produces @RequestScoped @Second protected EntityManager secondEntityManager() { //... }
  26. 26. @Transactional - 7● Producers and disposers in the application protected void disposeFirst(@Disposes @First EntityManager em) { if (em.isOpen()) { em.close(); } } protected void disposeSecond(@Disposes @Second EntityManager em) { if (em.isOpen()) { em.close(); } }
  27. 27. @Transactional - 8● Qualifier implementations in the application @Qualifier public @interface First { } @Qualifier public @interface Second { }
  28. 28. Events in action
  29. 29. @BeforeJsfRequest - 1● Observer in the application public void onBeforeJsfRequest( @Observes @BeforeJsfRequest FacesContext facesContext) { //… }
  30. 30. @BeforeJsfRequest - 2● Fired event in DeltaSpike @Inject @BeforeJsfRequest private Event<FacesContext> beforeJsfRequestEvent; this.beforeJsfRequestEvent.fire(facesContext);
  31. 31. @Specializes and @Alternative
  32. 32. @Specializes configs - 1● Specialized type-safe config in the application @Specializes public class CustomWindowContextConfig extends WindowContextConfig { public int getWindowContextTimeoutInMinutes() { return 240; } }
  33. 33. @Specializes configs - 2● Config implementation in CODI (/DS) @ApplicationScoped public class WindowContextConfig { public int getWindowContextTimeoutInMinutes() { return 60; } public int getMaxWindowContextCount() { return 64; } //… }
  34. 34. @Alternative - 1● Alternative implementation in the application @Alternative @Exclude( exceptIfProjectStage = ProjectStage.Development.class) public class MockedMailService implements MailService { } + config in beans.xml
  35. 35. @Alternative - 2● Primary implementation in the application public interface MailService { } @ApplicationScoped public class DefaultMailService implements MailService { }
  36. 36. Apache DeltaSpike.Next● Simple answer: There is no fixed master plan! The future depends on the community -> get involved!

×