![Page 1: Jacek Laskowski - 33rd Degree33degree.org/pdf/JacekLaskowskiCDI.pdfa set of services for object lifecycle, dependency injection, Unified EL support, decoration, interceptors, event](https://reader034.vdocuments.mx/reader034/viewer/2022050217/5f63006c5fbf7809f71e9bc7/html5/thumbnails/1.jpg)
EJB 3.1 vs Contexts and Dependency Injection (CDI) and Dependency Injection for Java in Java EE 6
Jacek [email protected]
![Page 2: Jacek Laskowski - 33rd Degree33degree.org/pdf/JacekLaskowskiCDI.pdfa set of services for object lifecycle, dependency injection, Unified EL support, decoration, interceptors, event](https://reader034.vdocuments.mx/reader034/viewer/2022050217/5f63006c5fbf7809f71e9bc7/html5/thumbnails/2.jpg)
Jacek Laskowski
• Blogger of http://blog.japila.pl
• Blogger of http://jaceklaskowski.pl
• Member of Confitura 2011 conference organizing committeehttp://confitura.pl
• Twitters as @jaceklaskowski
• Committer of Apache OpenEJB and Apache Geronimo
• Works as a specialist for IBM WebSphere in IBM Poland
![Page 3: Jacek Laskowski - 33rd Degree33degree.org/pdf/JacekLaskowskiCDI.pdfa set of services for object lifecycle, dependency injection, Unified EL support, decoration, interceptors, event](https://reader034.vdocuments.mx/reader034/viewer/2022050217/5f63006c5fbf7809f71e9bc7/html5/thumbnails/3.jpg)
Java conference
Confitura 2011http://confitura.pl
June, 11thWarsaw, Poland
(formerly Javarsovia)
![Page 4: Jacek Laskowski - 33rd Degree33degree.org/pdf/JacekLaskowskiCDI.pdfa set of services for object lifecycle, dependency injection, Unified EL support, decoration, interceptors, event](https://reader034.vdocuments.mx/reader034/viewer/2022050217/5f63006c5fbf7809f71e9bc7/html5/thumbnails/4.jpg)
![Page 5: Jacek Laskowski - 33rd Degree33degree.org/pdf/JacekLaskowskiCDI.pdfa set of services for object lifecycle, dependency injection, Unified EL support, decoration, interceptors, event](https://reader034.vdocuments.mx/reader034/viewer/2022050217/5f63006c5fbf7809f71e9bc7/html5/thumbnails/5.jpg)
Let’s begin with...Enterprise JavaBeans 3.1
![Page 6: Jacek Laskowski - 33rd Degree33degree.org/pdf/JacekLaskowskiCDI.pdfa set of services for object lifecycle, dependency injection, Unified EL support, decoration, interceptors, event](https://reader034.vdocuments.mx/reader034/viewer/2022050217/5f63006c5fbf7809f71e9bc7/html5/thumbnails/6.jpg)
Enterprise JavaBeans isa standard component model of Java, managed,
object-oriented, distributed, secure, transactional business applications
![Page 7: Jacek Laskowski - 33rd Degree33degree.org/pdf/JacekLaskowskiCDI.pdfa set of services for object lifecycle, dependency injection, Unified EL support, decoration, interceptors, event](https://reader034.vdocuments.mx/reader034/viewer/2022050217/5f63006c5fbf7809f71e9bc7/html5/thumbnails/7.jpg)
@Statelesspublic class HelloInEnglish implements Hello { @Override public String sayHello(String whom) { return "Hello, " + whom; } }
![Page 8: Jacek Laskowski - 33rd Degree33degree.org/pdf/JacekLaskowskiCDI.pdfa set of services for object lifecycle, dependency injection, Unified EL support, decoration, interceptors, event](https://reader034.vdocuments.mx/reader034/viewer/2022050217/5f63006c5fbf7809f71e9bc7/html5/thumbnails/8.jpg)
@Statefulpublic class HelloInEnglish {
public String sayHello(String whom) { return "Hello, " + whom; } }
![Page 9: Jacek Laskowski - 33rd Degree33degree.org/pdf/JacekLaskowskiCDI.pdfa set of services for object lifecycle, dependency injection, Unified EL support, decoration, interceptors, event](https://reader034.vdocuments.mx/reader034/viewer/2022050217/5f63006c5fbf7809f71e9bc7/html5/thumbnails/9.jpg)
@MessageDrivenpublic class HelloInEnglish {
public void onMessage(Message message) { // … } }
![Page 10: Jacek Laskowski - 33rd Degree33degree.org/pdf/JacekLaskowskiCDI.pdfa set of services for object lifecycle, dependency injection, Unified EL support, decoration, interceptors, event](https://reader034.vdocuments.mx/reader034/viewer/2022050217/5f63006c5fbf7809f71e9bc7/html5/thumbnails/10.jpg)
@MessageDriven( activationConfig = { @ActivationConfigProperty( propertyName = "destinationType", propertyValue = "javax.jms.Queue") })public class HelloInEnglish implements MessageListener {
public void onMessage(Message message) { // … } }
![Page 11: Jacek Laskowski - 33rd Degree33degree.org/pdf/JacekLaskowskiCDI.pdfa set of services for object lifecycle, dependency injection, Unified EL support, decoration, interceptors, event](https://reader034.vdocuments.mx/reader034/viewer/2022050217/5f63006c5fbf7809f71e9bc7/html5/thumbnails/11.jpg)
Enterprise JavaBeans is NOTa silver bullet for every business application
![Page 12: Jacek Laskowski - 33rd Degree33degree.org/pdf/JacekLaskowskiCDI.pdfa set of services for object lifecycle, dependency injection, Unified EL support, decoration, interceptors, event](https://reader034.vdocuments.mx/reader034/viewer/2022050217/5f63006c5fbf7809f71e9bc7/html5/thumbnails/12.jpg)
@Statelesspublic class TestFacadeEJB implements Hello { @EJB(beanName="HelloInEnglish") Hello hello; @Override public String sayHello(String whom) { return hello.sayHello(whom); } }
![Page 13: Jacek Laskowski - 33rd Degree33degree.org/pdf/JacekLaskowskiCDI.pdfa set of services for object lifecycle, dependency injection, Unified EL support, decoration, interceptors, event](https://reader034.vdocuments.mx/reader034/viewer/2022050217/5f63006c5fbf7809f71e9bc7/html5/thumbnails/13.jpg)
Enterprise JavaBeans is NOTtype-safe dependency injection framework
![Page 14: Jacek Laskowski - 33rd Degree33degree.org/pdf/JacekLaskowskiCDI.pdfa set of services for object lifecycle, dependency injection, Unified EL support, decoration, interceptors, event](https://reader034.vdocuments.mx/reader034/viewer/2022050217/5f63006c5fbf7809f71e9bc7/html5/thumbnails/14.jpg)
Welcome to...Dependency Injection for Java
(JSR-330)
![Page 15: Jacek Laskowski - 33rd Degree33degree.org/pdf/JacekLaskowskiCDI.pdfa set of services for object lifecycle, dependency injection, Unified EL support, decoration, interceptors, event](https://reader034.vdocuments.mx/reader034/viewer/2022050217/5f63006c5fbf7809f71e9bc7/html5/thumbnails/15.jpg)
Dependency Injection for Java istype-safe dependency injection framework
![Page 16: Jacek Laskowski - 33rd Degree33degree.org/pdf/JacekLaskowskiCDI.pdfa set of services for object lifecycle, dependency injection, Unified EL support, decoration, interceptors, event](https://reader034.vdocuments.mx/reader034/viewer/2022050217/5f63006c5fbf7809f71e9bc7/html5/thumbnails/16.jpg)
The types on which a type depends are known as its dependencies. The process of finding an instance of a dependency to use at run time is
known as resolving the dependency.
Package javax.inject Description
![Page 17: Jacek Laskowski - 33rd Degree33degree.org/pdf/JacekLaskowskiCDI.pdfa set of services for object lifecycle, dependency injection, Unified EL support, decoration, interceptors, event](https://reader034.vdocuments.mx/reader034/viewer/2022050217/5f63006c5fbf7809f71e9bc7/html5/thumbnails/17.jpg)
javax.inject package
• a single interface - javax.inject.Provider<T>
•@Inject marks a place to inject
•@Qualifier identifies new qualifier annotations
•@Named for stringified @Qualifiers
•@Scope identifies scope annotations
•@Singleton is a @Scope for once-instantiated types
![Page 18: Jacek Laskowski - 33rd Degree33degree.org/pdf/JacekLaskowskiCDI.pdfa set of services for object lifecycle, dependency injection, Unified EL support, decoration, interceptors, event](https://reader034.vdocuments.mx/reader034/viewer/2022050217/5f63006c5fbf7809f71e9bc7/html5/thumbnails/18.jpg)
javax.inject vs javax.ejb
•@Singleton is a @Scope for once-instantiated types
•@Singleton is a singleton session bean
![Page 19: Jacek Laskowski - 33rd Degree33degree.org/pdf/JacekLaskowskiCDI.pdfa set of services for object lifecycle, dependency injection, Unified EL support, decoration, interceptors, event](https://reader034.vdocuments.mx/reader034/viewer/2022050217/5f63006c5fbf7809f71e9bc7/html5/thumbnails/19.jpg)
@Singleton@Lock(READ)public class ComponentRegistryBean implements ComponentRegistry {
private final Map<Class, Object> components = new HashMap<Class, Object>();
public <T> T getComponent(Class<T> type) { return (T) components.get(type); }
@Lock(WRITE) public <T> T setComponent(Class<T> type, T value) { return (T) components.put(type, value); }
@Lock(WRITE) public <T> T removeComponent(Class<T> type) { return (T) components.remove(type); }
}
openejb3/examples/simple-singleton
![Page 20: Jacek Laskowski - 33rd Degree33degree.org/pdf/JacekLaskowskiCDI.pdfa set of services for object lifecycle, dependency injection, Unified EL support, decoration, interceptors, event](https://reader034.vdocuments.mx/reader034/viewer/2022050217/5f63006c5fbf7809f71e9bc7/html5/thumbnails/20.jpg)
@Singletonpublic class JavaLoggerFactory implements LoggerFactory {
public <T> T getLogger(Class<?> clazz, Class<T> type) { Object logger = Logger.getLogger(clazz.getName()); return type.cast(logger); }}
openwebbeans/samples/standalone-sample
![Page 21: Jacek Laskowski - 33rd Degree33degree.org/pdf/JacekLaskowskiCDI.pdfa set of services for object lifecycle, dependency injection, Unified EL support, decoration, interceptors, event](https://reader034.vdocuments.mx/reader034/viewer/2022050217/5f63006c5fbf7809f71e9bc7/html5/thumbnails/21.jpg)
EJB vs DI4j
•@Resource
•@EJB
•@PersistenceContext
•@PersistenceUnit
•@WebServiceRef
•@Inject
![Page 22: Jacek Laskowski - 33rd Degree33degree.org/pdf/JacekLaskowskiCDI.pdfa set of services for object lifecycle, dependency injection, Unified EL support, decoration, interceptors, event](https://reader034.vdocuments.mx/reader034/viewer/2022050217/5f63006c5fbf7809f71e9bc7/html5/thumbnails/22.jpg)
All rise....Contexts and Dependency
Injection for the Java EE Platform(JSR-229)
...is now in session
![Page 23: Jacek Laskowski - 33rd Degree33degree.org/pdf/JacekLaskowskiCDI.pdfa set of services for object lifecycle, dependency injection, Unified EL support, decoration, interceptors, event](https://reader034.vdocuments.mx/reader034/viewer/2022050217/5f63006c5fbf7809f71e9bc7/html5/thumbnails/23.jpg)
CDI isa set of services for object lifecycle,
dependency injection, Unified EL support, decoration, interceptors, event notification and
extensions.
![Page 24: Jacek Laskowski - 33rd Degree33degree.org/pdf/JacekLaskowskiCDI.pdfa set of services for object lifecycle, dependency injection, Unified EL support, decoration, interceptors, event](https://reader034.vdocuments.mx/reader034/viewer/2022050217/5f63006c5fbf7809f71e9bc7/html5/thumbnails/24.jpg)
CDI defines a beanthat is a source of contextual objects which define
application state and/or logic.
JSR-299: Contexts and Dependency Injection for the Java EE platform Chapter 2. Concepts
![Page 25: Jacek Laskowski - 33rd Degree33degree.org/pdf/JacekLaskowskiCDI.pdfa set of services for object lifecycle, dependency injection, Unified EL support, decoration, interceptors, event](https://reader034.vdocuments.mx/reader034/viewer/2022050217/5f63006c5fbf7809f71e9bc7/html5/thumbnails/25.jpg)
@Statelesspublic class HelloInEnglish implements Hello { @Override public String sayHello(String whom) { return "Hello, " + whom; } }
![Page 26: Jacek Laskowski - 33rd Degree33degree.org/pdf/JacekLaskowskiCDI.pdfa set of services for object lifecycle, dependency injection, Unified EL support, decoration, interceptors, event](https://reader034.vdocuments.mx/reader034/viewer/2022050217/5f63006c5fbf7809f71e9bc7/html5/thumbnails/26.jpg)
public class HelloInEnglish implements Hello { @Override public String sayHello(String whom) { return "Hello, " + whom; } }
![Page 27: Jacek Laskowski - 33rd Degree33degree.org/pdf/JacekLaskowskiCDI.pdfa set of services for object lifecycle, dependency injection, Unified EL support, decoration, interceptors, event](https://reader034.vdocuments.mx/reader034/viewer/2022050217/5f63006c5fbf7809f71e9bc7/html5/thumbnails/27.jpg)
@Named(“hello”)public class HelloInEnglish implements Hello { @Override public String sayHello(String whom) { return "Hello, " + whom; } }
![Page 28: Jacek Laskowski - 33rd Degree33degree.org/pdf/JacekLaskowskiCDI.pdfa set of services for object lifecycle, dependency injection, Unified EL support, decoration, interceptors, event](https://reader034.vdocuments.mx/reader034/viewer/2022050217/5f63006c5fbf7809f71e9bc7/html5/thumbnails/28.jpg)
@ManagedBeanpublic class HelloInEnglish implements Hello { @Override public String sayHello(String whom) { return "Hello, " + whom; } }
![Page 29: Jacek Laskowski - 33rd Degree33degree.org/pdf/JacekLaskowskiCDI.pdfa set of services for object lifecycle, dependency injection, Unified EL support, decoration, interceptors, event](https://reader034.vdocuments.mx/reader034/viewer/2022050217/5f63006c5fbf7809f71e9bc7/html5/thumbnails/29.jpg)
public class HelloInEnglish implements Hello {
HelloInEnglish(String whom) { // … }
@Override public String sayHello(String whom) { return "Hello, " + whom; } }
![Page 30: Jacek Laskowski - 33rd Degree33degree.org/pdf/JacekLaskowskiCDI.pdfa set of services for object lifecycle, dependency injection, Unified EL support, decoration, interceptors, event](https://reader034.vdocuments.mx/reader034/viewer/2022050217/5f63006c5fbf7809f71e9bc7/html5/thumbnails/30.jpg)
@MessageDrivenpublic class HelloInEnglish implements MessageListener {
public void onMessage(Message message) { // … } }
![Page 31: Jacek Laskowski - 33rd Degree33degree.org/pdf/JacekLaskowskiCDI.pdfa set of services for object lifecycle, dependency injection, Unified EL support, decoration, interceptors, event](https://reader034.vdocuments.mx/reader034/viewer/2022050217/5f63006c5fbf7809f71e9bc7/html5/thumbnails/31.jpg)
EJB vs CDI
•@MessageDriven in EJB
•@Observes + @Inject Event or BeanManager
![Page 32: Jacek Laskowski - 33rd Degree33degree.org/pdf/JacekLaskowskiCDI.pdfa set of services for object lifecycle, dependency injection, Unified EL support, decoration, interceptors, event](https://reader034.vdocuments.mx/reader034/viewer/2022050217/5f63006c5fbf7809f71e9bc7/html5/thumbnails/32.jpg)
@MessageDrivenpublic class HelloInEnglish implements MessageListener {
public void onMessage(Message message) { // … } }
![Page 33: Jacek Laskowski - 33rd Degree33degree.org/pdf/JacekLaskowskiCDI.pdfa set of services for object lifecycle, dependency injection, Unified EL support, decoration, interceptors, event](https://reader034.vdocuments.mx/reader034/viewer/2022050217/5f63006c5fbf7809f71e9bc7/html5/thumbnails/33.jpg)
import javax.enterprise.event.Observes; public class EnabledBean { public void observerMethod(@Observes String firstName) { System.out.println("Observed firstName: " + firstName); }}
![Page 34: Jacek Laskowski - 33rd Degree33degree.org/pdf/JacekLaskowskiCDI.pdfa set of services for object lifecycle, dependency injection, Unified EL support, decoration, interceptors, event](https://reader034.vdocuments.mx/reader034/viewer/2022050217/5f63006c5fbf7809f71e9bc7/html5/thumbnails/34.jpg)
@InjectBeanManager manager; @InjectEvent<String> firstNameEvent;
firstNameEvent.fire("Jacek");manager.fireEvent("Agatka", new Annotation[0]);
![Page 35: Jacek Laskowski - 33rd Degree33degree.org/pdf/JacekLaskowskiCDI.pdfa set of services for object lifecycle, dependency injection, Unified EL support, decoration, interceptors, event](https://reader034.vdocuments.mx/reader034/viewer/2022050217/5f63006c5fbf7809f71e9bc7/html5/thumbnails/35.jpg)
Thanks!