Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
CDIポータブルエクステンションを作ってみよう
Search
Fusayuki Minamoto
May 18, 2019
Technology
0
11k
CDIポータブルエクステンションを作ってみよう
JJUG CCC 2019 Spring登壇資料 (ccc_m6b)
Fusayuki Minamoto
May 18, 2019
Tweet
Share
Other Decks in Technology
See All in Technology
RALGO : AIを組織に組み込む方法 -アルゴリズム中心組織設計- #RSGT2026 / RALGO: How to Integrate AI into an Organization – Algorithm-Centric Organizational Design
kyonmm
PRO
3
650
小さく、早く、可能性を多産する。生成AIプロジェクト / prAIrie-dog
visional_engineering_and_design
0
320
20251225_たのしい出張報告&IgniteRecap!
ponponmikankan
0
110
ECS_EKS以外の選択肢_ROSA入門_.pdf
masakiokuda
1
120
善意の活動は、なぜ続かなくなるのか ーふりかえりが"構造を変える判断"になった半年間ー
matsukurou
0
230
スクラムマスターが スクラムチームに入って取り組む5つのこと - スクラムガイドには書いてないけど入った当初から取り組んでおきたい大切なこと -
scrummasudar
1
1.3k
AI時代のアジャイルチームを目指して ー スクラムというコンフォートゾーンからの脱却 ー / Toward Agile Teams in the Age of AI
takaking22
9
3.7k
Bedrock AgentCore Evaluationsで学ぶLLM as a judge入門
shichijoyuhi
2
320
AWS re:Inventre:cap ~AmazonNova 2 Omniのワークショップを体験してきた~
nrinetcom
PRO
0
130
CQRS/ESになぜアクターモデルが必要なのか
j5ik2o
0
470
Master Dataグループ紹介資料
sansan33
PRO
1
4.2k
Oracle Database@AWS:サービス概要のご紹介
oracle4engineer
PRO
2
670
Featured
See All Featured
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
2.8k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
720
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
0
130
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
115
100k
Documentation Writing (for coders)
carmenintech
77
5.2k
Writing Fast Ruby
sferik
630
62k
Building Adaptive Systems
keathley
44
2.9k
Paper Plane (Part 1)
katiecoart
PRO
0
2.7k
Between Models and Reality
mayunak
1
150
[RailsConf 2023] Rails as a piece of cake
palkan
58
6.2k
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
58
41k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.3k
Transcript
C D G 9 6 02 1# 5 8 0/
/ 2 5 8 0/ / 2 .2 /1 2
( ) • Japan JBoss User Group • Red Hat
Consultant • Twitter: @neverbird 2
• 4 ◦ J ◦ E ◦ a ◦ ◦
◦ J ◦ ◦
5 Application CDI Container CDI API
CDI SPI Extension Extension Extension •
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
• 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
8 @Inject Foo foo; @Scoped public class
FooImpl implements Foo @ApplicationScoped public class MyApp !
• B . • . 10 Application CDI Container CDI
API Bean Metadata Bean Archives Bean .
• •
I> • CA I> • T B • D < @ • 11
D C • • / / / B • •
B • • 12
C 13 CDI Container Bean Archives 1. 2.
ProcessAnnotatedType<MyBean> 3. event.add (…) Extension
•
14
15 P M M B
I O B I DA
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
R E / / /
17 @ApplicationScoped public class MyBean { @Retry(maxRetries=3) public void sendMessage(String message) { / } }
• 3 H S R @I 3 18 / (
. . . ( . ) ( . 3 ) . . ( ; ; 1 1 1 1 =
• D ◦
B • D ◦ I ▪ C 1 19
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())); } } } }
21
• SmallRye config ◦ " # $' • SmallRye fault
tolerant ◦ CircuitBreaker, Retry, Timeout% $' • SmallRye metrics ◦ (!& $' / / /. . 22
• 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
Red Hat 24
• E D C
25 ./
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
. 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
. 28 < B A > javax.enterprise.inject.spi. >A • <
. . / . -
29 / . -
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); }
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(); }