cdi essential recipes at java day tokyo 2015

174

Upload: oracle-fusion-middleware

Post on 16-Jul-2015

8.061 views

Category:

Technology


0 download

TRANSCRIPT

  • Java EE 7

    Fusion Middleware Java Java Day Tokyo 2015 201548

    Copyright 2015, Oracle and/or its aliates. All rights reserved. |

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. |

    Oracle Conden@al Internal/Restricted/Highly Restricted

    4

    OracleJavaOracle Corpora@on

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 5

    1. 2. Managed Bean 3. Interceptor 4. Bean Validation 5. DI 6. CDI

    @torazuka

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 6

    1. 2. Managed Bean 3. Interceptor 4. Bean Validation 5. DI 6. CDI

    @torazuka

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. |

    JPE 1.0 J2EE 1.2 J2EE 1.3 J2EE 1.4 Java EE 5 Java EE 6 Java EE 7

    20065 200912 20135

    J2EE (>_

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 8

    ( () ()

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 9

    Java EE 7

    Java EE 7

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 10

    JSP 2.3 /JSTL JSON-P 1.0 EL 3.0 Servlet 3.1

    Java EE 7

    WebSocket 1.0 JAX-RS 2.0 JSF 2.2

    DI 1.0 / CDI 1.1 / EJB 3.2

    JPA 2.1

    JTA 1.2

    JMS 2.0

    JCA 1.7

    Batch 1.0 JavaMail 1.5

    Intercep

    tors 1.2

    Bean

    ValidaO

    on 1.1

    Common

    Ann

    otaO

    on 1.2

    Man

    aged

    Bea

    n 1.0

    Concurrency UOl fo

    r EE 1.0

    Java EE 7

    Java EE 7

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 11

    DB

    Queue

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 12

    DB

    Queue

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 13

    Java Common Annotation JSR-250 Managed Bean JSR-316 Interceptor JSR-318

    Bean Validation JSR-349 DI JSR-330 CDI JSR-346

    EJB JSR-345

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 14

    1. 2. Managed Bean 3. Interceptor 4. Bean Validation 5. DI 6. CDI

    @torazuka

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 15

    Java Common Annotation JSR-250 Managed Bean JSR-316 Interceptor JSR-318

    Bean Validation JSR-349 DI JSR-330 CDI JSR-346

    EJB JSR-345

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 16

    JSR-250 Common Annotation (EE)

    Web EJB JSR-250 EE.6.29 Common Annotations for the JavaTM Platform 1.2 Requirements

    Resource Resources PostConstructPreDestroy RunAs DeclareRolesRolesAllowed PermitAll DenyAllManagedBean DataSourceDeniOon DataSourceDeniOonsPriority

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 17

    JSR-316 Managed Bean

    JSF Managed Bean

    CDI EJB

    EE @ManagedBean

    Managed Bean

    JSR-316 Managed Bean

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 18

    Web

    CDI

    EJB

    Managed Bean

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 19

    Managed Bean #1 : JMS (Queue, Topic) ORB

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 20

    Ini@alContext ic = new Ini@alContext(); ManagedExecutorService managedExecSvc = (ManagedExecutorService ) ic.lookup (" java:comp/DefaultManagedExecutorService"); mangedExecSvc.submit(() -> System.out.println(New Thread));

    Java EE

    JNDI

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 21

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 22

    @Resource(name = concurrent/DefaultManagedExecutorService") ManagedExecutorService mangedExecSvc; public void foo(){ mangedExecSvc.submit(() -> System.out.println(New Thread)); }

    Java EE @Resource

    @Resource

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 23

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 24

    javax.annota@on @Resource JNDI

    JMS ORB

    @Resource JNDI

    JSR-250 Common Annotation

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 25

    #2

    Managed Bean

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 26

    public class Foo() { @Resource(name = concurrent/DefaultManagedExecutorService") ManagedExecutorService mangedExecSvc; public Foo(){ mangedExecSvc.submit(() -> System.out.println(Init something)); } }

    java.lang.NullPointerExcepOon

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 27

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 28

    @PostConstruct

    public class Foo() { @Resource(name = concurrent/DefaultManagedExecutorService") ManagedExecutorService mangedExecSvc; @PostConstruct public void init (){ mangedExecSvc.submit(() -> System.out.println(Init something)); } }

    EE @PostConstruct

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 29

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 30

    javax.annota@on @PostConstruct

    @PreDestroy

    CDI EJB Proxy Proxy (2) Why is the constructor invoked twice when a normal scoped bean is created? http://www.cdi-spec.org/faq/#accordion7

    JSR-250 Common Annotation

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 31

    Web

    CDI

    EJB

    : @Resource : @PostConstruct : @PreDestroy

    Managed Bean

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 32

    1. 2. Managed Bean 3. Interceptor 4. Bean Validation 5. DI 6. CDI

    @torazuka

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 33

    Java Common Annotation JSR-250 Managed Bean JSR-316 Interceptor JSR-318

    Bean Validation JSR-349 DI JSR-330 CDI JSR-346

    EJB JSR-345

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 34

    A B C D E

    Interceptor :

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 35

    Java EE 5 (EJB 3.0) @AroundInvoke @Intercerptors @ExcludeDefaultInterceptors @ExcludeClassInterceptors

    EJB

    Bean XML

    Java EE 6 (EJB 3.1) CDI @InterceptorBinding @Interceptor @AroundTimeout

    XML

    Java EE 7 (EJB 3.1 : Maintenance Release) Interceptor.Priority @AroundConstruct

    Interceptor

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 36

    #3

    Interceptor

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 37

    public void executeSomeMethod1 () { long start = System.currentTimeMillis(); // // long end = System.currentTimeMillis(); // long Ome = end - start; logger.log(Level.DEBUG, (ms) : + Ome); }

    ?

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 38

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 39

    public class SomeLogic { @MySimpleProlerInterceptor public void executeSomeMethod1 () { // } }

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 40

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 41

    1. Interceptor

    2. Interceptor

    3. Interceptor

    Java EE 7 : Interceptor

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 42

    @Inherited @InterceptorBinding @Target({ElementType.TYPE, ElementType.METHOD}) @Reten@on([email protected]) public @interface MySimpleProlerInterceptor { }

    1.

    @InterceptorBinding

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 43

    @Priority(Interceptor.Priority.APPLICATION + 10) @MySimpleProlerInterceptor // @Interceptor public class MyInterceptor { @AroundInvoke public Object calcExecTime (InvocaOonContext ic) throws Excep@on { // } }

    2. Interceptor

    Java EE 7 @Priority beans.xml

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 44

    @AroundInvoke public Object calcExecTime (InvocaOonContext ic) throws ExcepOon { long start = System.currentTimeMillis(); // try { return ic.proceed(); // } catch (Excep@on e) { throw e; } nally { long end = System.currentTimeMillis(); // long Ome = end - start ; String className = ic.getTarget().getClass().getSuperclass().getName(); String methodName = ic.getMethod().getName() ; logger.log(Level.INFO, "{0}#{1} took {2} (ms)", new Object[]{ className, methodName, Ome }); } }

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 45

    @MySimpleProlerInterceptor // public void executeSomeMethod() { // do Something }

    3. Interceptor

    : jp.co.oracle.cdis.HomePage#executeSomeMethod took 300 (ms)

    or

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 46

    A B C D E

    @MyInteceptor @MyInteceptor @MyInteceptor @MyInteceptor @MyInteceptor

    Interceptor :

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 47

    1. 2. Managed Bean 3. Interceptor 4. Bean Validation 5. DI 6. CDI

    @torazuka

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 48

    Java Common Annotation JSR-250 Managed Bean JSR-316 Interceptor JSR-318

    Bean Validation JSR-349 DI JSR-330 CDI JSR-346

    EJB JSR-345

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 49

    DB

    Queue

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 50

    #:

    Bean Validation

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 51

    public class Person { private String name; private String jpZipCode; public String doSomething() { if (name == null || name.equals("")) { validaOonFailed();}; if (jpZipCode == null || jpZipCode.equals("")) { validaOonFailed();}; Pajern pajern = Pajern.compile("^\\d{3}-\\d{4}$"); Matcher matcher = pajern.matcher(jpZipCode); if (!matcher.nd()){validaOonFailed();} // }}

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. |

    public class Person { private String name; private String jpZipCode; public String doSomething() { if (name == null || name.equals("")) { validaOonFailed();}; if (jpZipCode == null || jpZipCode.equals("")) { validaOonFailed();}; Pajern pajern = Pajern.compile("^\\d{3}-\\d{4}$"); Matcher matcher = pajern.matcher(jpZipCode); if (!matcher.nd()){validaOonFailed();} // } }

    52

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 53

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 54

    public class Person { @NotNull @Size(min=1) private String name; @NotNull @Size(min=8,max=8) @Pajern("^\\d{3}-\\d{4}$") private String jpZipCode; public String doSomething() { //

    Bean Validation

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 55

    1. 2. Managed Bean 3. Interceptor 4. Bean Validation 5. DI 6. CDI

    @torazuka

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 56

    Java Common Annotation JSR-250 Managed Bean JSR-316 Interceptor JSR-318

    Bean Validation JSR-349 DI JSR-330 CDI JSR-346

    EJB JSR-345

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 57

    DB

    Queue

    new? Factory?

    ?

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 58

    @Inject @Qualier @Named @Scope @Singleton

    javax.inject

    EE

    JSR-330 : Dependency Injection for Java

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 59

    #

    Dependency Injection

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 60

    public class PersonDAOFromCSV implements PersonDAO { public List getPersons() throws IOExcepOon{ FileSystem fs = FileSystems.getDefault(); Path le = fs.getPath("/tmp/listPerson.csv"); return Files.newBueredReader(le).lines().map(str -> { String[] array = str.split(","); Person person = new Person(); person.setName(array[0]); person.setAge(Integer.parseInt(array[1])); return person; }).collect(Collectors.toList()); } }

    CSV List

    CSV

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 61

    public class PersonController { public void listPersonName() throws IOExcep@on { // Person DAO PersonDAO personDAO = new PersonDAOFromCSV(); List persons = personDAO.getPersons(); persons.forEach(person -> System.out.println(person.getName())); } }

    newFactoryAbstract FactoryService Locator

    DB

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 62

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 63

    public class PersonController {

    @Inject PersonDAO personDAO ; // public void listPersonName() throws IOExcep@on { List persons = personDAO.getPersons(); persons.forEach(person -> System.out.println(person.getName())); } }

    new -> Factory -> Abstract Factory -> Service Locator

    ,, !!

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 64

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 65

    PersonController PersonDAO

    PersonDAO

    DI

    PersonDAO new PersonDAO()

    dao.getPersons()

    PersonController @Inject PersonDAO

    dao.getPersons()

    PersonDAO

    PersonDAO PersonDAO

    new @Inject

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 66

    #

    Dependency Injection

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 67

    public interface Service { public void doSomething (); }

    public class DukeService implements Service { @Override public void doSomething () { // System.out.println(Duke Service); } }

    public class DuchessService implements Service { @Override public void doSomething () { // System.out.println(Duchess Service); } }

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 68

    public class Foo { @Inject private Service service; public void execService(){ service.doSomething(); } }

    OR ???

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 69

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 70

    @Inject @DukeQualier Service service1; public void execMul@pleService(){ service1.doSomething(); }

    @Inject @DuchessQualier Service service2; public void execMul@pleService(){ service2.doSomething(); }

    (Qualier)

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 71

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 72

    (@Qualier)

    Qualier

    Qualier :

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 73

    @Dependent @Qualier @Reten@on([email protected]) @Target({ElementType.FIELD, ElementType.TYPE, ElementType.METHOD, ElementType.PARAMETER}) public @interface DukeQualier {}

    (@Qualier)

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 74

    @DukeQualier public class DukeServiceImpl implements Service { @Override public void doSomething() { System.out.println("Duke Service"); } }

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 75

    @Inject @DukeQualier Service service1; public void execMul@pleService(){ service1.doSomething(); }

    Qualier

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 76

    (Qualier) /

    com.yoshio3.qualiers.* @DukeQualier, @DatabaseQualier

    Qualier

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 77

    # ()

    Dependency Injection

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 78

    public interface Service { public void doSomething (); }

    @DukeQualier public class DukeService implements Service{ @Override public void doSomething () { // System.out.println(Duke Service); } }

    @Dependent @Qualier @Reten@on([email protected]) @Target({ElementType.FIELD,

    ElementType.TYPE, ElementType.METHOD, ElementType.PARAMETER})

    public @interface DukeQualier { }

    Duke

    : @Qualier

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 79

    Duke

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 80

    public class Foo { @Inject @DukeQualier private nal Service service; public void execService(){ service.doSomething(); } }

    nal

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 81

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 82

    @Dependent public class Foo { private nal Service service; @Inject public Foo(@DukeQualier Service service) { this.service = service; } public void execService(){ service.doSomething(); }}

    nal

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 83

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 84

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 85

    #

    Dependency Injection

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 86

    public interface Service { public void doSomething (); }

    @Duke@Duchess

    @Printer @IoT@MyEnterprise

    @Hoge@Foo @Bar@Oracle@MySQL

    @GlassFish

    ?!

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 87

    ?!

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 88

    public interface Service { public void doSomething (); }

    @Named(value=duke) public class DukeService implements Service{ @Override public void doSomething () { // System.out.println(Duke Service); } }

    OK !!

    @Named

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 89

    public interface Service { public void doSomething (); }

    @Named(value=duke) public class DukeService implements Service{ @Override public void doSomething () { // System.out.println(Duke Service); } }

    @Inject @Named(value=duke) Service service1; public void execMul@pleService(){ service1.doSomething(); }

    !!

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 90

    !!

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 91

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 92

    public interface Service { public void doSomething (); }

    @Named(value=duke) public class DukeService implements Service{ @Override public void doSomething () { // System.out.println(Duke Service); } }

    @Inject @Named(value=duke) Service service1; public void execMul@pleService(){ service1.doSomething(); }

    (Weld)

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 93

    DI CDI

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 94

    JSF(EL ) DI

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 95

    1. 2. Managed Bean 3. Interceptor 4. Bean Validation 5. DI 6. CDI

    @torazuka

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 96

    Java Common Annotation JSR-250 Managed Bean JSR-316 Interceptor JSR-318

    Bean Validation JSR-349 DI JSR-330 CDI JSR-346

    EJB JSR-345

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. |

    97

    @Resource DI/CDI

    EJB

    @Inject

    @EJBManaged Bean

    Java EE

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 98

    EJBCDI

    16:15- 17:05

    CDI EJB (Out of Scope)

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 99

    javax.decorator javax.enterprise.context javax.enterprise.event javax.enterprise.inject javax.enterprise.uOl

    JSR-346 : Contexts and Dependency Injection for Java EE 1.2

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 100

    CDI Managed Bean

    Java EE

    EL

    Observer

    Java EE CDI

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 101

    Contexts&Dependency Injection

    #CDI CDI

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 102

    Java EE 7

    CDI Managed Bean

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 103

    /WEB-INF/beans.xml

    It is strongly recommended you use "annotated

    (Java EE 6)

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 104

    CDI Container Java Class

    Java Class

    Java Class

    Java Class Java Class

    Java Class

    Java Class

    Java Class

    Java Class

    Java Class

    Java Class

    CDI

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 105

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. |

    CDI DI

    106

    CDI Managed Bean Bean @NormalScope

    @ApplicaOonScoped @SessionScoped @ConversaOonScoped @RequestScoped ()

    @Dependent ( ) @Interceptor @Decorator @Stereotype

    UnsaOsed dependencies for type NGClass with qualiers @Default

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 107

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 108

    CDI Managed Bean ?

    CDI Container

    Contextual Reference

    Proxy

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 109

    @Inject Proxy

    CDI Container

    Contextual Reference

    Proxy

    @Inject SomeManagedBean bean;

    bean Proxy

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 110

    CDI Managed Bean (Proxy)

    Qualiers (Set)

    Scope Bean

    Stereotypes (Set)

    Type Bean (Set)

    AlternaOve Bean Alternative

    : @Named

    CDI Managed Bean

    javax.enterprise.inject.spi.Bean

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 111

    Java EE / Web Container

    CDI Container

    Contextual Reference

    CDI Managed Bean

    Bean Proxy

    UserTransacOon Principal Validator ValidatorFactory HjpServletRequest HjpSession ServletContext

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 112

    #10

    Contexts&Dependency Injection

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. |

    DI : javax.inject.Scope Singleton

    CDI : javax.enterprise.context Dependent

    CDI CDI : javax.enterprise.context. NormalScoped () ApplicationScoped SessionScoped RequestScoped ConversationScoped

    JSF : javax.faces. view.ViewScoped ow.FlowScoped

    113

    Java EE

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 114

    15:10- 16:00

    CDI JSF

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 115

    javax.inject.Singleton ?

    javax.enterprise.context.ApplicaOonScoped ?

    Java EE

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 116

    @javax.inject.Singleton public class DukeCounter { private int counter; public int getCounter() { return counter++; } }

    @Singleton Managed Bean

    @javax.inject.Singleton

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 117

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 118

    @javax.enterprise.context.ApplicaOonScoped public class DukeCounter implements Serializable { private int counter; public int getCounter() { return counter++; } }

    ApplicationScoped !!

    Java EE

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 119

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 120

    javax.inject.Singlton

    CDI Container

    Contextual Reference

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 121

    @SessionScoped // @ConversaOonScoped public class CounterHoldInSession implements Serializable{ @Inject DukeCounter singleton; }

    Java EE 6 (Singleton & Serializable) Weld(CDI )

    @Singleton

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 122

    #11 :

    Contexts&Dependency Injection

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 123

    public interface Service { public void doSomething (); }

    public class DukeSvc implements Service { @Override public void doSomething () { // System.out.println(Duke Service); } }

    DukeAlpha DukeBeta DukeProd

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 124

    public interface DataAccessService { public List getData (); }

    class implements DataAccessService { @Override public List getData () { // DB } }

    class implements DataAccessService { @Override public List getData () { // DB } }

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 125

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 126

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 127

    @Dependend @AlternaOve public class DukeAlpha implements Service{ }

    @Dependend @AlternaOve public class DukeBeta implements Service{ }

    @Alternative()

    Alternative XML

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 128

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 129

    @Dependend @AlternaOve public class DukeAlpha implements Service{ }

    @Dependend @AlternaOve public class DukeBeta implements Service{ }

    annotated CDI @Dependent

    @Alternative()

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 130

    @Dependend @AlternaOve public class DukeAlpha implements Service{ }

    @Dependend @AlternaOve public class DukeBeta implements Service{ }

    DukeBeta

    beans.xml

    (CDI 1.0)

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 131

    @Dependend @AlternaOve @Priority(Interceptor. Priority.APPLICATION + 10) public class DukeAlpha implements Service{ }

    @Dependend @AlternaOve @Priority(Interceptor. Priority.APPLICATION + 20) public class DukeBeta implements Service{ }

    jar

    (CDI 1.1)

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 132

    @Inject Service service ; @Dependend @AlternaOve @Priority(Interceptor. Priority.APPLICATION + 20) public class DukeBeta implements Service{ }

    DukeBeta

    @Inject XML

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 133

    !!

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 134

    @Inject Service @DukeServiceQualier service ; @DukeServiceQualier public class DukeServiceWithQualier implements Service { }

    @AlternaOve !!

    (Qualier)

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 135

    @Inject Service @DukeServiceQualier service ; @DukeServiceQualier @Specializes public class SpecializedDuke extends DukeServiceWithQualier { @Override public void doSomething() { } }

    @Specialized (CDI 1.1)

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 136

    #12 CDI Managed Bean

    Contexts&Dependency Injection

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 137

    Oracle

    MySQL

    PostgreSQL

    DB

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 138

    @Stateless public class SomeLogic1 { PersitenceContext (unitName=ORACLE_PU) EnOtyManager em; @Override public void doSomething () { // System.out.println(Duke Service); } }

    @Stateless public class SomeLogic2 { PersitenceContext (unitName=MYSQL_PU) EnOtyManager em; @Override public void doSomething () { // System.out.println(Duke Service); } } EJB EJB

    : EJB + JPA

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 139

    JPA

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 140

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 141

    @Inject @DatabaseQualier(value= DatabaseList.Oracle) EnOtyManager em; @Inject @DatabaseQualier(value= DatabaseList.MySQL) EnOtyManager em;

    @Produces

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 142

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 143

    @Produces

    (enum)

    (Qualier)

    @Produces

    DB

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 144

    (enum)

    public enum DatabaseList { Oracle, MySQL, PostgreSQL

    }

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 145

    (Qualier)

    @Dependent @Qualier @Reten@on([email protected]) @Target({ElementType.FIELD, ElementType.TYPE, ElementType.METHOD, ElementType.PARAMETER}) public @interface DatabaseQualier { DatabaseList value() default DatabaseList.Oracle ; }

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 146

    @Produces !! @Dependent public class DatabaseProducer { @Produces @DatabaseQualier(value = DatabaseList.Oracle) @PersistenceContext(unitName = "ORACLE_PU") private En@tyManager emOracle ; @Produces @DatabaseQualier(value = DatabaseList.MySQL) @PersistenceContext(unitName = "MySQL_PU") private En@tyManager emMySQL; }

    Oracle

    MySQL

    !! !!

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 147

    DB @Dependent @TransacOonal public class SomeBusinessLogic { @Inject @DatabaseQualier(value= DatabaseList.MySQL) EnOtyManager em; public List getPersons(){ em.createQuery(..); } }

    value Oracle

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 148

    #14 :

    Contexts&Dependency Injection

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 149

    @Named @RequestScope @SecurityChekIntercepter @LoggerIntercepter @TransacOonal public class IndexPage { @Override public void doSomething () { // System.out.println(Duke Service); }}

    !! @Named @RequestScope @SecurityChekIntercepter @LoggerIntercepter

    @TransacOonal public class

    UserRegPage {

    }

    @Named @RequestScope @SecurityChekIntercepter @LoggerIntercepter

    @TransacOonal public class

    UserConrmPage {

    }

    @Named @RequestScope @SecurityChekIntercepter @LoggerIntercepter

    @TransacOonal public class

    UserComplPage {

    }

    !!

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 150

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 151

    @MyReqestedScopeStereotype public class IndexPage { @Override public void doSomething () { // System.out.println(Duke Service); }}

    @MyRequestedScopeStereotype

    public class UserRegPage {

    }

    @MyRequestedScopeStereotype

    public class UserConrmPage {

    }

    @MyRequestedScopeStereotype

    public class UserComplPage {

    }

    Proj

    @Stereotype

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 152

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 153

    @Stereotype @Named @RequestScope @SecurityChekIntercepter @LoggerIntercepter @TransacOonal @Stereotype @Target(TYPE) @Reten@on(RUNTIME) public @interface MyReqestedScopeStereotype {}

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 154

    @Named @RequestScope @SecurityChekIntercepter @LoggerIntercepter @TransacOonal public class IndexPage { @Override public void doSomething () { // System.out.println(Duke Service); }}

    @MyReqestedScopeStereotype public class IndexPage { @Override public void doSomething () { // System.out.println(Duke Service); }}

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 155

    @Stereotype : @Model @Named @ReauestScope public class IndexPage { @Override public void doSomething () { // System.out.println(Duke Service); }}

    @javax.enterprise.inject.Model public class IndexPage { @Override public void doSomething () { // System.out.println(Duke Service); }}

    Web @Named, @RequestedScope @Model

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 156

    Stereotype Stereotype /

    com.yoshio3.stereotypes.* @DukeStereotype, @DatabaseStereotype

    Stereotype

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 157

    #13 : Observer

    Contexts&Dependency Injection

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 158

    Observer

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 159

    @RequestScoped @Named(value = userReg") public class UserRegistra@onPage { @Inject Event mailEvent; // public void execUserRegistra@on() { // mailEvent.re(new Mail(mailaddredd, name, message)); }

    CDI

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 160

    @Applica@onScoped public class MailEventHandler { @Resource(name = "mail/MyMailSession") Session mailSession; public void receiveEvent(@Observes Mail mailEvent) { sendMessage(mailEvent); } }

    CDI

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 161

    !!

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 162

    @Applica@onScoped public class MailEventHandler { @Resource(name = "mail/MyMailSession") Session mailSession; public void receiveEvent(@Observes Mail mailEvent) { sendMessage(mailEvent); // } }

    NG

    CDI

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 163

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 164

    EJB JMS !! @Stateless public class MailEventDispatcherBean { @Inject Event mailEvent; // @Asynchronous public void produceEvent(nal Mail message) { // mailEvent.re(message); }

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 165

    EJB JMS !! @javax.ejb.Singleton // javax.inject.Singleton EJB public class EventConsumer { @Asynchronous @Lock(LockType.READ) public void consumeEvent(@Observes Mail message) throws InterruptedExcep@on { // }

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 166

    @RequestScoped @Named(value = userReg") public class UserRegistra@onPage { @EJB MailEventDispatcherBean dispather; public void execUserRegistra@on() { // dispather.produceEvent(new Mail(mailaddredd, name, message)); }

    EJB JMS !!

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 167

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 168

    CDI Event

    CDI 2.0 Asynchronous (https://issues.jboss.org/browse/CDI-499)

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 169

    @torazuka

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 170

    : Managed Bean CDI EJB

    DI/CDI, EJB

    Managed Bean

    Managed Bean

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. |

    171

  • Copyright 2015, Oracle and/or its aliates. All rights reserved. | 172