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
Infrastructure as Prompt実装記 〜Bedrock AgentCoreで作る自然言語インフラエージェント〜
yusukeshimizu
1
140
AIに頼りすぎない新人育成術
cuebic9bic
3
320
Amazon Q と『音楽』-ゲーム音楽もAmazonQで作成してみた感想-
senseofunity129
0
160
事業特性から逆算したインフラ設計
upsider_tech
0
140
Eval-Centric AI: Agent 開発におけるベストプラクティスの探求
asei
0
130
テストを実行してSorbetのsigを書こう!
sansantech
PRO
1
120
AIに目を奪われすぎて、周りの困っている人間が見えなくなっていませんか?
cap120
1
670
Strands Agents & Bedrock AgentCoreを1分でおさらい
minorun365
PRO
8
360
[OCI Technical Deep Dive] OracleのAI戦略(2025年8月5日開催)
oracle4engineer
PRO
1
200
アカデミーキャンプ 2025 SuuuuuuMMeR「燃えろ!!ロボコン」 / Academy Camp 2025 SuuuuuuMMeR "Burn the Spirit, Robocon!!" DAY 1
ks91
PRO
0
150
【新卒研修資料】数理最適化 / Mathematical Optimization
brainpadpr
28
13k
ロールが細分化された組織でSREと協働するインフラエンジニアは何をするか? / SRE Lounge #18
kossykinto
0
220
Featured
See All Featured
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
251
21k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
18
1.1k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
283
13k
RailsConf 2023
tenderlove
30
1.2k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
126
53k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
29
1.8k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
161
15k
Visualization
eitanlees
146
16k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
53
2.9k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
How to Think Like a Performance Engineer
csswizardry
25
1.8k
Why Our Code Smells
bkeepers
PRO
338
57k
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(); }