Jacek Laskowski - 33rd Degree33degree.org/pdf/JacekLaskowskiCDI.pdfa set of services for object...

35
EJB 3.1 vs Contexts and Dependency Injection (CDI) and Dependency Injection for Java in Java EE 6 Jacek Laskowski [email protected]

Transcript of Jacek Laskowski - 33rd Degree33degree.org/pdf/JacekLaskowskiCDI.pdfa set of services for object...

Page 1: Jacek Laskowski - 33rd Degree33degree.org/pdf/JacekLaskowskiCDI.pdfa set of services for object lifecycle, dependency injection, Unified EL support, decoration, interceptors, event

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

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

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
Page 5: Jacek Laskowski - 33rd Degree33degree.org/pdf/JacekLaskowskiCDI.pdfa set of services for object lifecycle, dependency injection, Unified EL support, decoration, interceptors, event

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

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

@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

@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

@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

@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

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

@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

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

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

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

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

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

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

@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

@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

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

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

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

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

@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

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

@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

@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

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

@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

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

@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

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

@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

Thanks!