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
Claude Codeを使った情報整理術
knishioka
20
12k
ハッカソンから社内プロダクトへ AIエージェント ko☆shi 開発で学んだ4つの重要要素
leveragestech
0
610
2025年のデザインシステムとAI 活用を振り返る
leveragestech
0
750
Scrum Guide Expansion Pack が示す現代プロダクト開発への補完的視点
sonjin
0
520
【Agentforce Hackathon Tokyo 2025 発表資料】みらいシフト:あなた働き方を、みらいへシフト。
kuratani
0
110
20251225_たのしい出張報告&IgniteRecap!
ponponmikankan
0
110
コールドスタンバイ構成でCDは可能か
hiramax
0
130
_第4回__AIxIoTビジネス共創ラボ紹介資料_20251203.pdf
iotcomjpadmin
0
180
会社紹介資料 / Sansan Company Profile
sansan33
PRO
11
390k
Oracle Database@AWS:サービス概要のご紹介
oracle4engineer
PRO
2
770
戰略轉變:從建構 AI 代理人到發展可擴展的技能生態系統
appleboy
0
190
歴史から学ぶ、Goのメモリ管理基礎
logica0419
12
2.5k
Featured
See All Featured
Leo the Paperboy
mayatellez
1
1.3k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
48
9.8k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
231
22k
We Have a Design System, Now What?
morganepeng
54
8k
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
0
220
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
58
41k
Abbi's Birthday
coloredviolet
0
4.2k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.2k
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
1
590
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
1
1.3k
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
61
48k
Building Applications with DynamoDB
mza
96
6.9k
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(); }