SlideShare une entreprise Scribd logo
1  sur  20
Télécharger pour lire hors ligne
Contexts and Dependency Injection (CDI)
                                                  in JEE 6




                                              Presenter
                                       Prasanna Kumar.S


JUGChennai JTech Day Sep'12
About me
A Java developer (now interested in Scala as well ...)
Active member in JUG Chennai
Creator & Co-Founder of scalaxia.com (a site which lists
  out the popular tweets about scala)
Contributed for ScalaFX project


Contact
Mail me prassee.sathian@gmail.com
Follow me @prasonscala
I blog @ prasonscala@tumblr.com
Agenda

What is & Why DI ?
What is CDI
Features of CDI
Advantages of CDI
Injecting Beans (with some EJB tit-bits !!!)
Types of Injection
Qualifiers – Built in & custom qualifiers
Scope – Types of Scopes
CDI options....
Questions
What is Dependency Injection




        PHONE ==> SIM ==> TOWER
Why Dependency Injection

user just relies (on)ly the Phone
streamlining dependent objects injection by

“Don't call your service,
let service call you”

Achieve loose coupling of objects

Well proven practise
What is CDI

 JSR 299


 Provides a unifying Dependency Injection and contextual life
cycle model for Java EE


 A completely new, richer dependency management model


 Type-safe dependency injection


 Designed for use with stateful objects (scoped objects)
Advantages of CDI
Decouple server and client
   – Using well-defined types and qualifiers
   – Allows server implementations to vary

Decouple lifecycle of collaborating components
   – Automatic contextual lifecycle
   management by the CDI runtime

Decouple orthogonal concerns (AOP)
   – Interceptors & Decorators

NO XML !!!!

Can be used in both JAVA SE and JAVA EE applications
Injecting Beans
CDI is all about DI

CDI makes use of annotations

3 Types of injection points

    Field

    Method Parameter

Methods can be

  Constructor

  Initializer

  Setter

  Producer

  Observer
Basic CDI Beans
public interface Greeting {
    public String greet(String greet);
}

@Default
public class PlainGreetingCDI implements Greeting {
    public String greet(String greet) {
        return "greetings to " + greet;
    }
}

// client code
@Inject
private Greeting greeting;
public String sayGreeting(String whomToGreet) {
        return greeting.greet(whomToGreet);
}
Qualifiers – Built in & custom quali-
                     fiers
public interface CurrencyConverter {
    public Double convert(Double howMuchToConvert);
}

@Qualifier
@Retention(RUNTIME)
@Target({ TYPE, METHOD, FIELD, PARAMETER })
public @interface CurrencyType {
    VariousCurrencies type() default VariousCurrencies.DOLLAR;
}

@CurrencyType(type = VariousCurrencies.DOLLAR)
public class DollarConverter implements CurrencyConverter {
    @Override
    public Double convert(Double howMuchToConvert) {
        return howMuchToConvert * 55;
    }
}

public enum VariousCurrencies { DOLLAR,EURO,POUNDS }
Qualifier in CDI
public interface CurrencyConverter {
    public Double convert(Double howMuchToConvert);
}

@Qualifier
@Retention(RUNTIME)
@Target({ TYPE, METHOD, FIELD, PARAMETER })
public @interface CurrencyType {
    VariousCurrencies type() default VariousCurrencies.DOLLAR;
}

@CurrencyType(type = VariousCurrencies.DOLLAR)
public class DollarConverter implements CurrencyConverter {
    @Override
    public Double convert(Double howMuchToConvert) {
        return howMuchToConvert * 55;
    }
}

public enum VariousCurrencies { DOLLAR,EURO,POUNDS }
Qualifier in CDI (Contd)
// client code
@Inject @CurrencyType
private CurrencyConverter def_converter;

@Inject @CurrencyType(type=VariousCurrencies.EURO)
private CurrencyConverter euroConverter;
Scoped Beans – Request Scope
@RequestScoped
public class RequestScopedCurrencyConverterCDI {
    private double currValue;

    @Inject
    @CurrencyType(type=VariousCurrencies.DOLLAR)
    private CurrencyConverter currencyConverter;

    // setters and getter for currencyConverter

    public double convert() {
        return currencyConverter.convert(currValue);
    }
}
Scoped Beans – Request Scope
@Stateless
public class ScopedCurrencyConverterEJB {
    @Inject private RequestScopedCurrencyConverterCDI currencyConverterCDI
    @EJB private FormattedCurrencyConverter formattedCurrencyConverter;

    public String getConvertedValue(double valueToConvert) {
        currencyConverterCDI.setCurrValue(valueToConvert);
        return formattedCurrencyConverter.getFormattedCurrency();
    }
}

@Stateless @LocalBean
public class FormattedCurrencyConverter {
    @Inject private RequestScopedCurrencyConverterCDI currencyConverter;
    public String getFormattedCurrency() {
        return "The converted "+ currencyConverter.getCurrValue() +" to " +
currencyConverter.convert();
    }
}
Scoped Beans – Request Scope
// client code
@EJB
private ScopedCurrencyConverterEJB converterEJB;
converterEJB.getConvertedValue(2) // "The converted 2.0 to 110.0"
Scoped Beans – Application Scope
@ApplicationScoped
public class ApplicationScopedCDI {
    private double currValue;

   public void setCurrValue(double currValue) {
       this.currValue = currValue;
   }

   public double getCurrValue() {
       return currValue;
   }

}
// client code
public void setValueToConvert(double value) {
        applicationScopedCurrencyConverterCDI.setCurrValue(2);
    }

   public double getValueToConvert() {
       return applicationScopedCurrencyConverterCDI.getCurrValue();
   }
Scoped Beans – Application Scope
@ApplicationScoped
public class ApplicationScopedCDI {
    private double currValue;

   public void setCurrValue(double currValue) {
       this.currValue = currValue;
   }

   public double getCurrValue() {
       return currValue;
   }

}
// client code
public void setValueToConvert(double value) {
        applicationScopedCurrencyConverterCDI.setCurrValue(2);
    }

   public double getValueToConvert() {
       return applicationScopedCurrencyConverterCDI.getCurrValue();
   }
CDI options
Reference Implementations
JBoss Weld
http://seamframework.org/Weld
Apache OpenWebBeans
http://openwebbeans.apache.org/owb/indexhtml
Caucho
http://www.caucho.com/
Supported App Containers
Jboss AS 7,GlassFish 3.1x ,Caucho, TomEE !!! &
all JEE6 containers
How do I learn / adopt
All code presented here are available under
https://github.com/prassee/JTechDayCDIExamples
You are welcome to contribute your own examples -
(Shameless sales pitch !!!!)
Project using CDI
AGORAVA project - http://agorava.org/
Feel free to contribute
JavaPassion site
http://javapassion.com/jugtalks
TomEE examples Trunk
http://tomee.apache.org/examples-trunk/index.html
Q&A

Contenu connexe

Similaire à CDI in JEE6

Refactoring - improving the smell of your code
Refactoring - improving the smell of your codeRefactoring - improving the smell of your code
Refactoring - improving the smell of your codevmandrychenko
 
Angular workshop - Full Development Guide
Angular workshop - Full Development GuideAngular workshop - Full Development Guide
Angular workshop - Full Development GuideNitin Giri
 
Using Contexts & Dependency Injection in the Java EE 6 Platform
Using Contexts & Dependency Injection in the Java EE 6 PlatformUsing Contexts & Dependency Injection in the Java EE 6 Platform
Using Contexts & Dependency Injection in the Java EE 6 PlatformArun Gupta
 
Building maintainable app #droidconzg
Building maintainable app #droidconzgBuilding maintainable app #droidconzg
Building maintainable app #droidconzgKristijan Jurković
 
From framework coupled code to #microservices through #DDD /by @codelytv
From framework coupled code to #microservices through #DDD /by @codelytvFrom framework coupled code to #microservices through #DDD /by @codelytv
From framework coupled code to #microservices through #DDD /by @codelytvCodelyTV
 
Introduction to AngularJS
Introduction to AngularJSIntroduction to AngularJS
Introduction to AngularJSYoann Gotthilf
 
Angular for Java Enterprise Developers: Oracle Code One 2018
Angular for Java Enterprise Developers: Oracle Code One 2018Angular for Java Enterprise Developers: Oracle Code One 2018
Angular for Java Enterprise Developers: Oracle Code One 2018Loiane Groner
 
Make JSF more type-safe with CDI and MyFaces CODI
Make JSF more type-safe with CDI and MyFaces CODIMake JSF more type-safe with CDI and MyFaces CODI
Make JSF more type-safe with CDI and MyFaces CODIos890
 
Petcube epic battle: architecture vs product. UA Mobile 2017.
Petcube epic battle: architecture vs product. UA Mobile 2017.Petcube epic battle: architecture vs product. UA Mobile 2017.
Petcube epic battle: architecture vs product. UA Mobile 2017.UA Mobile
 
Dart for Java Developers
Dart for Java DevelopersDart for Java Developers
Dart for Java DevelopersYakov Fain
 
PHP: 4 Design Patterns to Make Better Code
PHP: 4 Design Patterns to Make Better CodePHP: 4 Design Patterns to Make Better Code
PHP: 4 Design Patterns to Make Better CodeSWIFTotter Solutions
 

Similaire à CDI in JEE6 (20)

Devoxx 2012 (v2)
Devoxx 2012 (v2)Devoxx 2012 (v2)
Devoxx 2012 (v2)
 
CDI @javaonehyderabad
CDI @javaonehyderabadCDI @javaonehyderabad
CDI @javaonehyderabad
 
Refactoring - improving the smell of your code
Refactoring - improving the smell of your codeRefactoring - improving the smell of your code
Refactoring - improving the smell of your code
 
Angular workshop - Full Development Guide
Angular workshop - Full Development GuideAngular workshop - Full Development Guide
Angular workshop - Full Development Guide
 
Using Contexts & Dependency Injection in the Java EE 6 Platform
Using Contexts & Dependency Injection in the Java EE 6 PlatformUsing Contexts & Dependency Injection in the Java EE 6 Platform
Using Contexts & Dependency Injection in the Java EE 6 Platform
 
Hexagonal architecture
Hexagonal architectureHexagonal architecture
Hexagonal architecture
 
AngularJs Crash Course
AngularJs Crash CourseAngularJs Crash Course
AngularJs Crash Course
 
Building maintainable app #droidconzg
Building maintainable app #droidconzgBuilding maintainable app #droidconzg
Building maintainable app #droidconzg
 
From framework coupled code to #microservices through #DDD /by @codelytv
From framework coupled code to #microservices through #DDD /by @codelytvFrom framework coupled code to #microservices through #DDD /by @codelytv
From framework coupled code to #microservices through #DDD /by @codelytv
 
Introduction to AngularJS
Introduction to AngularJSIntroduction to AngularJS
Introduction to AngularJS
 
Building maintainable app
Building maintainable appBuilding maintainable app
Building maintainable app
 
S313937 cdi dochez
S313937 cdi dochezS313937 cdi dochez
S313937 cdi dochez
 
Angular for Java Enterprise Developers: Oracle Code One 2018
Angular for Java Enterprise Developers: Oracle Code One 2018Angular for Java Enterprise Developers: Oracle Code One 2018
Angular for Java Enterprise Developers: Oracle Code One 2018
 
Introduction to CDI
Introduction to CDIIntroduction to CDI
Introduction to CDI
 
Domain Driven Design 101
Domain Driven Design 101Domain Driven Design 101
Domain Driven Design 101
 
Make JSF more type-safe with CDI and MyFaces CODI
Make JSF more type-safe with CDI and MyFaces CODIMake JSF more type-safe with CDI and MyFaces CODI
Make JSF more type-safe with CDI and MyFaces CODI
 
Petcube epic battle: architecture vs product. UA Mobile 2017.
Petcube epic battle: architecture vs product. UA Mobile 2017.Petcube epic battle: architecture vs product. UA Mobile 2017.
Petcube epic battle: architecture vs product. UA Mobile 2017.
 
Angular js-crash-course
Angular js-crash-courseAngular js-crash-course
Angular js-crash-course
 
Dart for Java Developers
Dart for Java DevelopersDart for Java Developers
Dart for Java Developers
 
PHP: 4 Design Patterns to Make Better Code
PHP: 4 Design Patterns to Make Better CodePHP: 4 Design Patterns to Make Better Code
PHP: 4 Design Patterns to Make Better Code
 

Plus de PrasannaKumar Sathyanarayanan (10)

Akka introtalk HyScala DEC 2016
Akka introtalk HyScala DEC 2016Akka introtalk HyScala DEC 2016
Akka introtalk HyScala DEC 2016
 
Akka fsm presentation
Akka fsm presentationAkka fsm presentation
Akka fsm presentation
 
Cps (continuation passing style) in scala
Cps (continuation passing style) in scalaCps (continuation passing style) in scala
Cps (continuation passing style) in scala
 
Introduction to akka chense
Introduction to akka   chenseIntroduction to akka   chense
Introduction to akka chense
 
Finagle - an intro to rpc & a sync programming in jvm
Finagle - an intro to rpc & a sync programming in jvmFinagle - an intro to rpc & a sync programming in jvm
Finagle - an intro to rpc & a sync programming in jvm
 
Websocket,JSON in JEE7
Websocket,JSON in JEE7Websocket,JSON in JEE7
Websocket,JSON in JEE7
 
Scala Introduction with play - for my CSS nerds
Scala Introduction with play - for my CSS nerdsScala Introduction with play - for my CSS nerds
Scala Introduction with play - for my CSS nerds
 
Ejb3.1
Ejb3.1Ejb3.1
Ejb3.1
 
Producer consumerproblem
Producer consumerproblemProducer consumerproblem
Producer consumerproblem
 
Scala presentationjune112011
Scala presentationjune112011Scala presentationjune112011
Scala presentationjune112011
 

Dernier

SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxNavinnSomaal
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostZilliz
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteDianaGray10
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):comworks
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxhariprasad279825
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfRankYa
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsRizwan Syed
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 

Dernier (20)

SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptx
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test Suite
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptx
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdf
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 

CDI in JEE6

  • 1. Contexts and Dependency Injection (CDI) in JEE 6 Presenter Prasanna Kumar.S JUGChennai JTech Day Sep'12
  • 2. About me A Java developer (now interested in Scala as well ...) Active member in JUG Chennai Creator & Co-Founder of scalaxia.com (a site which lists out the popular tweets about scala) Contributed for ScalaFX project Contact Mail me prassee.sathian@gmail.com Follow me @prasonscala I blog @ prasonscala@tumblr.com
  • 3. Agenda What is & Why DI ? What is CDI Features of CDI Advantages of CDI Injecting Beans (with some EJB tit-bits !!!) Types of Injection Qualifiers – Built in & custom qualifiers Scope – Types of Scopes CDI options.... Questions
  • 4. What is Dependency Injection PHONE ==> SIM ==> TOWER
  • 5. Why Dependency Injection user just relies (on)ly the Phone streamlining dependent objects injection by “Don't call your service, let service call you” Achieve loose coupling of objects Well proven practise
  • 6. What is CDI  JSR 299  Provides a unifying Dependency Injection and contextual life cycle model for Java EE  A completely new, richer dependency management model  Type-safe dependency injection  Designed for use with stateful objects (scoped objects)
  • 7. Advantages of CDI Decouple server and client – Using well-defined types and qualifiers – Allows server implementations to vary Decouple lifecycle of collaborating components – Automatic contextual lifecycle management by the CDI runtime Decouple orthogonal concerns (AOP) – Interceptors & Decorators NO XML !!!! Can be used in both JAVA SE and JAVA EE applications
  • 8. Injecting Beans CDI is all about DI CDI makes use of annotations 3 Types of injection points  Field  Method Parameter Methods can be  Constructor  Initializer  Setter  Producer  Observer
  • 9. Basic CDI Beans public interface Greeting { public String greet(String greet); } @Default public class PlainGreetingCDI implements Greeting { public String greet(String greet) { return "greetings to " + greet; } } // client code @Inject private Greeting greeting; public String sayGreeting(String whomToGreet) { return greeting.greet(whomToGreet); }
  • 10. Qualifiers – Built in & custom quali- fiers public interface CurrencyConverter { public Double convert(Double howMuchToConvert); } @Qualifier @Retention(RUNTIME) @Target({ TYPE, METHOD, FIELD, PARAMETER }) public @interface CurrencyType { VariousCurrencies type() default VariousCurrencies.DOLLAR; } @CurrencyType(type = VariousCurrencies.DOLLAR) public class DollarConverter implements CurrencyConverter { @Override public Double convert(Double howMuchToConvert) { return howMuchToConvert * 55; } } public enum VariousCurrencies { DOLLAR,EURO,POUNDS }
  • 11. Qualifier in CDI public interface CurrencyConverter { public Double convert(Double howMuchToConvert); } @Qualifier @Retention(RUNTIME) @Target({ TYPE, METHOD, FIELD, PARAMETER }) public @interface CurrencyType { VariousCurrencies type() default VariousCurrencies.DOLLAR; } @CurrencyType(type = VariousCurrencies.DOLLAR) public class DollarConverter implements CurrencyConverter { @Override public Double convert(Double howMuchToConvert) { return howMuchToConvert * 55; } } public enum VariousCurrencies { DOLLAR,EURO,POUNDS }
  • 12. Qualifier in CDI (Contd) // client code @Inject @CurrencyType private CurrencyConverter def_converter; @Inject @CurrencyType(type=VariousCurrencies.EURO) private CurrencyConverter euroConverter;
  • 13. Scoped Beans – Request Scope @RequestScoped public class RequestScopedCurrencyConverterCDI { private double currValue; @Inject @CurrencyType(type=VariousCurrencies.DOLLAR) private CurrencyConverter currencyConverter; // setters and getter for currencyConverter public double convert() { return currencyConverter.convert(currValue); } }
  • 14. Scoped Beans – Request Scope @Stateless public class ScopedCurrencyConverterEJB { @Inject private RequestScopedCurrencyConverterCDI currencyConverterCDI @EJB private FormattedCurrencyConverter formattedCurrencyConverter; public String getConvertedValue(double valueToConvert) { currencyConverterCDI.setCurrValue(valueToConvert); return formattedCurrencyConverter.getFormattedCurrency(); } } @Stateless @LocalBean public class FormattedCurrencyConverter { @Inject private RequestScopedCurrencyConverterCDI currencyConverter; public String getFormattedCurrency() { return "The converted "+ currencyConverter.getCurrValue() +" to " + currencyConverter.convert(); } }
  • 15. Scoped Beans – Request Scope // client code @EJB private ScopedCurrencyConverterEJB converterEJB; converterEJB.getConvertedValue(2) // "The converted 2.0 to 110.0"
  • 16. Scoped Beans – Application Scope @ApplicationScoped public class ApplicationScopedCDI { private double currValue; public void setCurrValue(double currValue) { this.currValue = currValue; } public double getCurrValue() { return currValue; } } // client code public void setValueToConvert(double value) { applicationScopedCurrencyConverterCDI.setCurrValue(2); } public double getValueToConvert() { return applicationScopedCurrencyConverterCDI.getCurrValue(); }
  • 17. Scoped Beans – Application Scope @ApplicationScoped public class ApplicationScopedCDI { private double currValue; public void setCurrValue(double currValue) { this.currValue = currValue; } public double getCurrValue() { return currValue; } } // client code public void setValueToConvert(double value) { applicationScopedCurrencyConverterCDI.setCurrValue(2); } public double getValueToConvert() { return applicationScopedCurrencyConverterCDI.getCurrValue(); }
  • 18. CDI options Reference Implementations JBoss Weld http://seamframework.org/Weld Apache OpenWebBeans http://openwebbeans.apache.org/owb/indexhtml Caucho http://www.caucho.com/ Supported App Containers Jboss AS 7,GlassFish 3.1x ,Caucho, TomEE !!! & all JEE6 containers
  • 19. How do I learn / adopt All code presented here are available under https://github.com/prassee/JTechDayCDIExamples You are welcome to contribute your own examples - (Shameless sales pitch !!!!) Project using CDI AGORAVA project - http://agorava.org/ Feel free to contribute JavaPassion site http://javapassion.com/jugtalks TomEE examples Trunk http://tomee.apache.org/examples-trunk/index.html
  • 20. Q&A