cdi in jee6
DESCRIPTION
this slide has been presented in JUGChennai JTechDay held on Sep 15 2012TRANSCRIPT
![Page 1: CDI in JEE6](https://reader033.vdocuments.net/reader033/viewer/2022061218/54b723f04a795903798b4836/html5/thumbnails/1.jpg)
Presenter Prasanna Kumar.S
Contexts and Dependency Injection (CDI)in JEE 6
JUGChennai JTech Day Sep'12
![Page 2: CDI in JEE6](https://reader033.vdocuments.net/reader033/viewer/2022061218/54b723f04a795903798b4836/html5/thumbnails/2.jpg)
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 [email protected]
Follow me @prasonscala
I blog @ [email protected]
![Page 3: CDI in JEE6](https://reader033.vdocuments.net/reader033/viewer/2022061218/54b723f04a795903798b4836/html5/thumbnails/3.jpg)
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
![Page 4: CDI in JEE6](https://reader033.vdocuments.net/reader033/viewer/2022061218/54b723f04a795903798b4836/html5/thumbnails/4.jpg)
What is Dependency Injection
PHONE ==> SIM ==> TOWER
![Page 5: CDI in JEE6](https://reader033.vdocuments.net/reader033/viewer/2022061218/54b723f04a795903798b4836/html5/thumbnails/5.jpg)
Why Dependency Injection
user just relies (on)ly the Phonestreamlining dependent objects injection by
“Don't call your service, let service call you”
Achieve loose coupling of objects
Well proven practise
![Page 6: CDI in JEE6](https://reader033.vdocuments.net/reader033/viewer/2022061218/54b723f04a795903798b4836/html5/thumbnails/6.jpg)
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)
![Page 7: CDI in JEE6](https://reader033.vdocuments.net/reader033/viewer/2022061218/54b723f04a795903798b4836/html5/thumbnails/7.jpg)
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
![Page 8: CDI in JEE6](https://reader033.vdocuments.net/reader033/viewer/2022061218/54b723f04a795903798b4836/html5/thumbnails/8.jpg)
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
![Page 9: CDI in JEE6](https://reader033.vdocuments.net/reader033/viewer/2022061218/54b723f04a795903798b4836/html5/thumbnails/9.jpg)
Basic CDI Beans
public interface Greeting {public String greet(String greet);
}
@Defaultpublic class PlainGreetingCDI implements Greeting {
public String greet(String greet) {return "greetings to " + greet;
}}
// client code@Injectprivate Greeting greeting;public String sayGreeting(String whomToGreet) {
return greeting.greet(whomToGreet);}
![Page 10: CDI in JEE6](https://reader033.vdocuments.net/reader033/viewer/2022061218/54b723f04a795903798b4836/html5/thumbnails/10.jpg)
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 {
@Overridepublic Double convert(Double howMuchToConvert) {
return howMuchToConvert * 55;}
}
public enum VariousCurrencies { DOLLAR,EURO,POUNDS }
![Page 11: CDI in JEE6](https://reader033.vdocuments.net/reader033/viewer/2022061218/54b723f04a795903798b4836/html5/thumbnails/11.jpg)
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 {
@Overridepublic Double convert(Double howMuchToConvert) {
return howMuchToConvert * 55;}
}
public enum VariousCurrencies { DOLLAR,EURO,POUNDS }
![Page 12: CDI in JEE6](https://reader033.vdocuments.net/reader033/viewer/2022061218/54b723f04a795903798b4836/html5/thumbnails/12.jpg)
Qualifier in CDI (Contd)
// client code@Inject @CurrencyTypeprivate CurrencyConverter def_converter;
@Inject @CurrencyType(type=VariousCurrencies.EURO)private CurrencyConverter euroConverter;
![Page 13: CDI in JEE6](https://reader033.vdocuments.net/reader033/viewer/2022061218/54b723f04a795903798b4836/html5/thumbnails/13.jpg)
Scoped Beans – Request Scope
@RequestScopedpublic 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);
}}
![Page 14: CDI in JEE6](https://reader033.vdocuments.net/reader033/viewer/2022061218/54b723f04a795903798b4836/html5/thumbnails/14.jpg)
Scoped Beans – Request Scope
@Statelesspublic class ScopedCurrencyConverterEJB {
@Inject private RequestScopedCurrencyConverterCDI currencyConverterCDI@EJB private FormattedCurrencyConverter formattedCurrencyConverter;
public String getConvertedValue(double valueToConvert) {currencyConverterCDI.setCurrValue(valueToConvert);return formattedCurrencyConverter.getFormattedCurrency();
}}
@Stateless @LocalBeanpublic class FormattedCurrencyConverter {
@Inject private RequestScopedCurrencyConverterCDI currencyConverter;public String getFormattedCurrency() {
return "The converted "+ currencyConverter.getCurrValue() +" to " + currencyConverter.convert();
}}
![Page 15: CDI in JEE6](https://reader033.vdocuments.net/reader033/viewer/2022061218/54b723f04a795903798b4836/html5/thumbnails/15.jpg)
Scoped Beans – Request Scope
// client code @EJBprivate ScopedCurrencyConverterEJB converterEJB;converterEJB.getConvertedValue(2) // "The converted 2.0 to 110.0"
![Page 16: CDI in JEE6](https://reader033.vdocuments.net/reader033/viewer/2022061218/54b723f04a795903798b4836/html5/thumbnails/16.jpg)
Scoped Beans – Application Scope
@ApplicationScopedpublic class ApplicationScopedCDI {
private double currValue;
public void setCurrValue(double currValue) {this.currValue = currValue;
}
public double getCurrValue() {return currValue;
}
}// client codepublic void setValueToConvert(double value) {
applicationScopedCurrencyConverterCDI.setCurrValue(2);}
public double getValueToConvert() {return applicationScopedCurrencyConverterCDI.getCurrValue();
}
![Page 17: CDI in JEE6](https://reader033.vdocuments.net/reader033/viewer/2022061218/54b723f04a795903798b4836/html5/thumbnails/17.jpg)
Scoped Beans – Application Scope
@ApplicationScopedpublic class ApplicationScopedCDI {
private double currValue;
public void setCurrValue(double currValue) {this.currValue = currValue;
}
public double getCurrValue() {return currValue;
}
}// client codepublic void setValueToConvert(double value) {
applicationScopedCurrencyConverterCDI.setCurrValue(2);}
public double getValueToConvert() {return applicationScopedCurrencyConverterCDI.getCurrValue();
}
![Page 18: CDI in JEE6](https://reader033.vdocuments.net/reader033/viewer/2022061218/54b723f04a795903798b4836/html5/thumbnails/18.jpg)
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
![Page 19: CDI in JEE6](https://reader033.vdocuments.net/reader033/viewer/2022061218/54b723f04a795903798b4836/html5/thumbnails/19.jpg)
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
![Page 20: CDI in JEE6](https://reader033.vdocuments.net/reader033/viewer/2022061218/54b723f04a795903798b4836/html5/thumbnails/20.jpg)
Q&A