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
10k
CDIポータブルエクステンションを作ってみよう
JJUG CCC 2019 Spring登壇資料 (ccc_m6b)
Fusayuki Minamoto
May 18, 2019
Tweet
Share
Other Decks in Technology
See All in Technology
強化されたAmazon Location Serviceによる新機能と開発者体験
dayjournal
2
130
Claude Code Actionを使ったコード品質改善の取り組み
potix2
PRO
2
760
AIにどこまで任せる?実務で使える(かもしれない)AIエージェント設計の考え方
har1101
3
1.2k
AIの最新技術&テーマをつまんで紹介&フリートークするシリーズ #1 量子機械学習の入門
tkhresk
0
110
Agentic Workflowという選択肢を考える
tkikuchi1002
1
290
データプラットフォーム技術におけるメダリオンアーキテクチャという考え方/DataPlatformWithMedallionArchitecture
smdmts
5
530
Amplifyとゼロからはじめた AIコーディング 成果と展望
mkdev10
1
350
生成AIでwebアプリケーションを作ってみた
tajimon
2
120
原則から考える保守しやすいComposable関数設計
moriatsushi
3
500
Oracle Cloud Infrastructure:2025年6月度サービス・アップデート
oracle4engineer
PRO
1
110
VISITS_AIIoTビジネス共創ラボ登壇資料.pdf
iotcomjpadmin
0
140
LinkX_GitHubを基点にした_AI時代のプロジェクトマネジメント.pdf
iotcomjpadmin
0
160
Featured
See All Featured
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
2.8k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
43
2.4k
For a Future-Friendly Web
brad_frost
179
9.8k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
48
5.4k
Documentation Writing (for coders)
carmenintech
71
4.9k
GraphQLの誤解/rethinking-graphql
sonatard
71
11k
Practical Orchestrator
shlominoach
188
11k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
357
30k
Rebuilding a faster, lazier Slack
samanthasiow
81
9k
Designing for humans not robots
tammielis
253
25k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
53k
Docker and Python
trallard
44
3.4k
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(); }