Upgrade to Pro — share decks privately, control downloads, hide ads and more …

CDIポータブルエクステンションを作ってみよう

 CDIポータブルエクステンションを作ってみよう

JJUG CCC 2019 Spring登壇資料 (ccc_m6b)

Fusayuki Minamoto

May 18, 2019
Tweet

Other Decks in Technology

Transcript

  1. C D G 9 6
    02 1#
    5 8 0/ / 2
    5 8 0/ / 2 .2 /1 2

    View Slide


  2. ( )
    ● Japan JBoss User Group
    ● Red Hat Consultant
    ● Twitter: @neverbird

    2

    View Slide


  3. 4
    ○ J
    ○ E
    ○ a


    ○ J


    View Slide



  4. 5
    Application
    CDI Container
    CDI API
    CDI SPI
    Extension Extension Extension


    View Slide

  5. fminamot-OSX:base fminamot$ grep -r javax.enterprise.inject.spi.Extension .
    Binary file ./org/wildfly/microprofile/opentracing-smallrye/main/wildfly-microprofile-opentracing-smallrye-
    7.2.0.GA-redhat-00005.jar matches
    Binary file ./org/jboss/jts/main/narayana-jts-idlj-5.9.0.Final-redhat-00001.jar matches
    Binary file ./org/jboss/resteasy/resteasy-jaxrs/main/resteasy-client-microprofile-3.6.1.SP2-redhat-00001.jar
    matches
    Binary file ./org/jboss/resteasy/resteasy-cdi/main/resteasy-cdi-3.6.1.SP2-redhat-00001.jar matches
    Binary file ./org/jboss/narayana/txframework/main/txframework-5.9.0.Final-redhat-00001.jar matches
    Binary file ./org/jboss/narayana/compensations/main/compensations-5.9.0.Final-redhat-00001.jar matches
    Binary file ./org/jberet/jberet-core/main/jberet-core-1.3.1.Final-redhat-00001.jar matches
    Binary file ./org/picketlink/core/main/picketlink-impl-2.5.5.SP12-redhat-2.jar matches
    Binary file ./org/hibernate/validator/cdi/main/hibernate-validator-cdi-6.0.14.Final-redhat-00001.jar matches
    Binary file ./org/glassfish/soteria/main/javax.security.enterprise-1.0.0.redhat-1.jar matches
    Binary file ./io/smallrye/config/main/smallrye-config-1.3.4.redhat-00001.jar matches
    Binary file ./javax/enterprise/api/main/cdi-api-2.0.0.SP1-redhat-00001.jar matches
    Binary file ./com/sun/jsf-impl/main/jsf-impl-2.3.5.SP2-redhat-00001.jar matches
    6

    View Slide


  6. 65 .50 ( 50 5 5 365 26 . . ))
    ○ a S
    ○ aP e
    ○ J B

    S D (
    ○ . . )E I R B
    ○ Ce f d
    F JE E / A
    ( Cic
    7
    8 8

    View Slide



  7. 8
    @Inject
    Foo foo;
    @Scoped
    public class FooImpl implements Foo




    @ApplicationScoped
    public class MyApp

    !

    View Slide

  8. ● B .
    ● .
    10
    Application
    CDI Container
    CDI API
    Bean
    Metadata Bean
    Archives
    Bean


    .

    View Slide





  9. ● I>
    ● CA I>
    ● T B
    ● D < @




    11

    View Slide

  10. D
    C

    ● / / / B

    ● B


    12

    View Slide

  11. C
    13
    CDI Container
    Bean
    Archives
    1.

    2. ProcessAnnotatedType

    3. event.add (…)


    Extension

    View Slide





  12. 14









    View Slide



  13. 15
    P M
    M
    B I O
    B I
    DA




    View Slide

  14. B CIA
    16
    >B ; C A ( C E C A
    C A
    AE> E E ;
    > >>; A . > ;
    -B ; ( B;A A ; . )
    > B A D E E
    @Observes

    CDI 2.0
    A D @
    O
    D LI

    View Slide

  15. R E /
    /
    /


    17
    @ApplicationScoped
    public class MyBean {
    @Retry(maxRetries=3)
    public void sendMessage(String message) {
    /
    }
    }

    View Slide

  16. ● 3
    H S R @I
    3
    18
    /
    ( . .
    . (
    . ) ( .
    3 )
    . . (
    ;
    ;
    1
    1
    1
    1
    =

    View Slide



  17. D

    B


    D
    ○ I
    ■ C
    1

    19

    View Slide

  18. RetyExtension
    20
    public class RetryExtension implements Extension {
    /
    public void beforeBeanDiscovery(@Observes BeforeBeanDiscovery event, BeanManager bm) {
    event.addAnnotatedType(RetryInterceptor.class, RetryInterceptor.class.getName());
    }
    1
    public void processManagedBean(@Observes ProcessManagedBean event) {
    AnnotatedType> annotatedType = event.getAnnotatedBeanClass();
    for (AnnotatedMethod> annotatedMethod : annotatedType.getMethods()) {
    Retry anno= annotatedMethod.getAnnotation(Retry.class);
    if (anno != null && anno.maxRetries() < 1) {
    event.addDefinitionError(new Exception("illegal maxRetry:" + anno.maxRetries()));
    }
    }
    }
    }

    View Slide


  19. 21

    View Slide

  20. ● SmallRye config

    " #$'
    ● SmallRye fault tolerant

    CircuitBreaker, Retry, Timeout%
    $'
    ● SmallRye metrics

    (!&
    $'
    / /
    /. .
    22

    View Slide

  21. ● CDI
    http://cdi-spec.org/
    ● Next Presso
    http://www.next-presso.com/

    Weld
    https://tanoseam.wordpress.com/
    ● SmallRye (Eclipse MicroProfile implementation)
    https://smallrye.io/
    https://github.com/smallrye

    23

    View Slide

  22. Red Hat
    24

    View Slide

  23. ● E D
    C


    25
    ./

    View Slide

  24. IBD A IC
    26

    J J J
    J J J
    J J
    J
    J
    n J
    n J
    J J
    e J
    BJ a J J

    View Slide

  25. .
    27
    / b I D
    / i c d E I
    S E I
    0 / : > ErnJ D -/ / . mtJ D
    -/ / / / 2
    o 0 / : > /
    0 / : > B >:2C /
    0 / : > B >:2C / 2 :1 2
    / / 2 / s
    0 / : > B >:2C :1/ >1 <2 a e li

    View Slide

  26. .
    28
    < B A >
    javax.enterprise.inject.spi. >A
    ● < . .
    / . -

    View Slide



  27. 29 / . -

    View Slide

  28. CDI 2.0AnnotatedTypeConfigurator
    CDI 1.x
    CDI 2.0 AnnotatedTypeConfigurator
    30
    public interface BeforeBeanDiscovery {
    void addQualifier(Class extends Annotation> qualifier);
    void addQualifier(AnnotatedType extends Annotation> qualifier);
    void addScope(Class extends Annotation> scopeType, boolean normal, boolean passivating);
    void addStereotype(Class extends Annotation> stereotype, Annotation... stereotypeDef);
    void addInterceptorBinding(AnnotatedType extends Annotation> bindingType);
    void addInterceptorBinding(Class extends Annotation> bindingType, Annotation... bindingTypeDef);
    void addAnnotatedType(AnnotatedType extends Annotation> type, String id);
    AnnotatedTypeConfigurator addAnnotatedType(Class type, String id);
    AnnotatedTypeConfigurator configureQualifier(Class qualifier);
    AnnotatedTypeConfigurator configureInterceptorBinding(Class bt);
    }

    View Slide

  29. CDI 2.0AnnotatedTypeConfigurator CDI 1.x


    CDI 2.0 AnnotatedTypeConfigurator
    31
    public interface ProcessAnnotatedType {
    AnnotatedType getAnnotatedType();
    void setAnnotatedType(AnnotatedType type);
    void veto();
    AnnotatedTypeConfigurator configureAnnotatedType();
    }

    View Slide