Pro Yearly is on sale from $80 to $50! »

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

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

JJUG CCC 2019 Spring登壇資料 (ccc_m6b)

3d19b7ca93738057aa01a306d4564b37?s=128

Fusayuki Minamoto

May 18, 2019
Tweet

Transcript

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

    / 2 5 8 0/ / 2 .2 /1 2
  2. ( ) • Japan JBoss User Group • Red Hat

    Consultant • Twitter: @neverbird  2
  3. • 4 ◦ J ◦ E ◦ a ◦ ◦

    ◦ J ◦ ◦
  4.     5 Application CDI Container CDI API

    CDI SPI Extension Extension Extension •      
  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
  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
  7.    8 @Inject Foo foo; @Scoped public class

    FooImpl implements Foo     @ApplicationScoped public class MyApp     !      
  8. • B . • . 10 Application CDI Container CDI

    API Bean Metadata Bean Archives Bean      .
  9.         • •

    I> • CA I> • T B • D < @ •      11
  10. D C • • / / / B • •

    B • • 12
  11. C 13 CDI Container Bean Archives 1.   2.

    ProcessAnnotatedType<MyBean>   3. event.add (…)   Extension
  12. •         

    14          
  13.      15 P M M B

    I O B I DA     
  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
  15.   R E /  / /  

      17 @ApplicationScoped public class MyBean { @Retry(maxRetries=3) public void sendMessage(String message) { / } }
  16. • 3 H S R @I 3 18 / (

    . . . ( . ) ( . 3 ) . . ( ; ; 1 1 1 1 =
  17. •       D ◦ 

       B •       D ◦ I   ▪     C 1    19
  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 <T> void processManagedBean(@Observes ProcessManagedBean<T> 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())); } } } }
  19.  21     

  20. • SmallRye config ◦ " # $' • SmallRye fault

    tolerant ◦ CircuitBreaker, Retry, Timeout% $' • SmallRye metrics ◦  (!&  $' / / /. . 22
  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
  22. Red Hat 24

  23. • E D C      

    25 ./
  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
  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
  26. . 28 < B A > javax.enterprise.inject.spi. >A • <

    . . / . -
  27.  29 / . -

  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); <T> AnnotatedTypeConfigurator<T> addAnnotatedType(Class<T> type, String id); <T extends Annotation> AnnotatedTypeConfigurator<T> configureQualifier(Class<T> qualifier); <T extends Annotation> AnnotatedTypeConfigurator<T> configureInterceptorBinding(Class<T> bt); }
  29. CDI 2.0AnnotatedTypeConfigurator   CDI 1.x   CDI 2.0

    AnnotatedTypeConfigurator 31 public interface ProcessAnnotatedType<X> { AnnotatedType<X> getAnnotatedType(); void setAnnotatedType(AnnotatedType<X> type); void veto(); AnnotatedTypeConfigurator configureAnnotatedType(); }