Similar documents
Make the Future Java FY13 PPT Template

WEBシステムのセキュリティ技術

[4-C] CDI2.0アップデート&クックブック

PowerPoint Presentation

V8.1新規機能紹介記事

2

PowerPoint プレゼンテーション

[HO-2] NetBeansとGlassFishではじめるJava EE7ハンズオン

目次 はじめに... 2 無料トライアルのサインアップ方法... 3 トライアル環境へのアクセス 参考情報

PowerPoint Presentation

How to Use the PowerPoint Template

Slide 1

intra-mart im-JavaEE Framework

Microsoft PowerPoint - JavaFesta.ppt

Java演習(4) -- 変数と型 --


Javaセキュアコーディングセミナー東京 第3回 入出力(File, Stream)と例外時の動作 演習解説

Microsoft PowerPoint ppt

Make the Future Java FY13 PPT Template

1 Copyright 2013, Oracle Corporation Japan, all rights reserved.

PowerPoint Presentation

1 JBoss Seam と Embedded EJB3 で見る 次世代の Java EE アプリケーション開発 株式会社カサレアルプロフェッショナルサービスセンター阿島哲夫岡本充洋

intra-mart WebPlatform/AppFramework

intra-mart WebPlatform/AppFramework

intra-mart Accel Platform — IM-Repository拡張プログラミングガイド   初版  

Oracle Web CacheによるOracle WebCenter Spacesパフォーマンスの向上

新・明解Java入門

Slide 1

intra-mart Accel Platform

Java EE 7 アプリケーション設計ガイド - JSF(JavaServer Faces) 2.2 入門編


コンテナでテストをまわせ! Java EE への自動テストの導入 1 小西高之 JBoss Technical Support Engineer Red Hat K.K.

untitled

Seasar.NET入門

JBoss と Arquillian で実現する 究極のテスト環境 レッドハット株式会社 JBoss サービス事業部 コンサルタント 山 田義和

ORACLE FUSION MIDDLEWARE Tech Topic Meeting

untitled

Gartner Day

10/ / /30 3. ( ) 11/ 6 4. UNIX + C socket 11/13 5. ( ) C 11/20 6. http, CGI Perl 11/27 7. ( ) Perl 12/ 4 8. Windows Winsock 12/11 9. JAV

Make the Future Java FY13 PPT Template

Java プログラミング Ⅰ 3 回目変 数 今日の講義講義で学ぶ内容 変数とは 変数の使い方 キーボード入力の仕方 変 数 変 数 一時的に値を記憶させておく機能 変数は 型 ( データ型 ) と識別子をもちます 2 型 ( データ型 ) 変数に記憶する値の種類変数の型は 記憶できる値の種類と範囲

JavaもJava Scriptも! コンテナ型アプリケーション開発PaaS登場

Oracle9i JDeveloperによるWebサービスの構築

JAVA とテンプレート

Microsoft PowerPoint - グリッド協議会GT4演習資料_2007_配布用

intra-mart Accel Platform — イベントナビゲータ 開発ガイド   初版  

PowerPoint Presentation

Client Client public void sendobject(object message) String String Web Container String RemoteEndpoint String Endpoint throwsioexception, EncodeExcept

オブジェクト指向プログラミング・同演習 5月21日演習課題

サーブレット (Servlet) とは Web サーバ側で動作する Java プログラム 通常はapache 等のバックグラウンドで動作する Servletコンテナ上にアプリケーションを配置 代表的な Servlet コンテナ Apache Tomcat WebLogic WebSphere Gla

PowerPoint Presentation

intra-mart Accel Platform — アクセスコンテキスト 拡張プログラミングガイド   第2版  

PowerPoint Presentation

PowerPoint Presentation

JavaプログラミングⅠ

Exam : 1z1-809-JPN Title : Java SE 8 Programmer II Vendor : Oracle Version : DEMO Get Latest & Valid 1z1-809-JPN Exam's Question and Answers 1 from Ac

Exam : 1Z0-895 日本語 (JPN) Title : Java Platform, Enterprise Edition 6 Enterprise JavaBeans Developer Certified Expert Exam Vendor : Oracle Version : DE

untitled

Oracle Database 12c

Oracle JDeveloper 10g ADF Creation Date: Jul 07, 2004 Last Update: Jul 08, 2004 Version 1.0

アプリケーションサーバ リファレンス API編

Microsoft PowerPoint - prog09.ppt

Microsoft PowerPoint - prog09.ppt

A B 1: Ex. MPICH-G2 C.f. NXProxy [Tanaka] 2:

Java知識テスト問題

WAS V9 アナウンスメント・セミナー資料

ハピタス のコピー.pages

Copyright 2008 All Rights Reserved 2

相続支払い対策ポイント

150423HC相続資産圧縮対策のポイント

解きながら学ぶJava入門編

Oracle Business Rules

2

やさしいJavaプログラミング -Great Ideas for Java Programming サンプルPDF

intra-mart im-JavaEE Framework

Exam : 1z0-809 日本語 (JPN) Title : Java SE 8 Programmer II Vendor : Oracle Version : DEMO 1 / 8 Get Latest & Valid 1z0-809-JPN Exam's Question and Answe

Java (9) 1 Lesson Java System.out.println() 1 Java API 1 Java Java 1

アプリケーションサーバ リファレンス API編

(Microsoft PowerPoint - \223\306\217KJAVA\221\346\202R\224\ ppt)

オブジェクト脳のつくり方

JavaプログラミングⅠ

Oracle Cloud Adapter for Oracle RightNow Cloud Service

WebOTXマニュアル

Javaセキュアコーディングセミナー2013東京第1回 演習の解説

PowerPoint Presentation

java_servlet2_見本

Android Layout SDK プログラミング マニュアル

intra-mart im-J2EE Framework

Programming-C-9.key


Java 16x9 PPT Interim Template

Condition DAQ condition condition 2 3 XML key value

IBM の Java 活用ガイド_rev2

Spring Frameworkに対するオラクルのサポート

エンドポイント WebSocket API ではクライアント サーバともに javax.websocket.endpoint クラスから派生してエンドポイントのクラスを定義します そして onopen() onclose() および onerror() をオーバーライドし それぞれ接続時 切断時およ

JavaFest04.PDF

B2-Servlet-0112.PDF

intra-mart Accel Platform — イベントナビゲータ 開発ガイド   初版   None

1 Dependency Injection glue glue glue glue glue GluonJ GluonJ glue Dependency Injection Aspect-Oriented Programming Meets Dependency Injection Rei Ish

機能紹介 : Java ゲートウェイとインターシステムズ製品

Transcription:

日本オラクル株式会社 Fusion Middleware 事業統轄本部 Java エバンジェリスト 寺 田佳央 Java Day Tokyo 2015 2015 年年 4 月 8 日

以下の事項は 弊社の 一般的な製品の 方向性に関する概要を説明するものです また 情報提供を唯 一の 目的とするものであり いかなる契約にも組み込むことはできません 以下の事項は マテリアルやコード 機能を提供することをコミットメント ( 確約 ) するものではないため 購買決定を 行行う際の判断材料料になさらないで下さい オラクル製品に関して記載されている機能の開発 リリースおよび時期については 弊社の裁量量により決定されます Oracle と Java は Oracle Corpora@on 及びその 子会社 関連会社の 米国及びその他の国における登録商標です 文中の社名 商品名等は各社の商標または登録商標である場合があります Oracle Confiden@al 4

5

6

JPE 1.0 J2EE 1.2 J2EE 1.3 J2EE 1.4 Java EE 5 Java EE 6 Java EE 7 2006 年 5 月 2009 年 12 月 2013 年 5 月

エッセンシャル レシピ 問題 問題 (何がしたいか 解決 (解決方法) 解説 (具体的な説明) Copyright 2015, Oracle and/or its affiliates. All rights reserved. 8

9

WebSocket 1.0 JAX- RS 2.0 JSF 2.2 JSP 2.3 /JSTL JSON- P 1.0 EL 3.0 Servlet 3.1 DI 1.0 / CDI 1.1 / EJB 3.2 JTA 1.2 JCA 1.7 JPA 2.1 JMS 2.0 Batch 1.0 JavaMail 1.5 Bean ValidaOon 1.1 Managed Bean 1.0 Common AnnotaOon 1.2 Interceptors 1.2 Concurrency UOl for EE 1.0 10

11

今日お話をする所 ロジック実装部 ビュー関連処理 ビジネス ロジック データ アクセス DB ロジック Queue 疎結合での実装が重要 Copyright 2015, Oracle and/or its affiliates. All rights reserved. 12

13

14

15

Resource Resources PostConstruct PreDestroy RunAs DeclareRoles RolesAllowed PermitAll DenyAll ManagedBean DataSourceDefiniOon DataSourceDefiniOons Priority 16

JSF Managed Bean CDI EJB JSR- 316 Managed Bean 17

18

Managed Bean 問題 #1 : リソース参照 リソースを参照したい データ ベース JMS (Queue, Topic) トランザクション ORB メール セッション コンテキスト Copyright 2015, Oracle and/or its affiliates. All rights reserved. 19

Ini@alContext ic = new Ini@alContext(); ManagedExecutorService managedexecsvc = (ManagedExecutorService ) ic.lookup (" java:comp/defaultmanagedexecutorservice"); mangedexecsvc.submit(() - > System.out.println( New Thread )); 20

21

@Resource(name = concurrent/defaultmanagedexecutorservice") ManagedExecutorService mangedexecsvc; public void foo(){ mangedexecsvc.submit(() - > System.out.println( New Thread )); 22

23

javax.annota@on @Resource 24

Managed Bean 問題 #2 ライフサイクル管理 インスタンス生成後 インスタンス破棄前 Copyright 2015, Oracle and/or its affiliates. All rights reserved. 25

public class Foo() { @Resource(name = concurrent/defaultmanagedexecutorservice") ManagedExecutorService mangedexecsvc; public Foo(){ mangedexecsvc.submit(() - > System.out.println( Init something )); java.lang.nullpointerexcepoon 26

27

public class Foo() { @Resource(name = concurrent/defaultmanagedexecutorservice") ManagedExecutorService mangedexecsvc; @PostConstruct public void init (){ mangedexecsvc.submit(() - > System.out.println( Init something )); 28

29

javax.annota@on @PostConstruct @PreDestroy 30

: @Resource : @PostConstruct : @PreDestroy 31

32

33

34

Java EE 5 (EJB 3.0) @AroundInvoke @Intercerptors @ExcludeDefaultInterceptors @ExcludeClassInterceptors Java EE 6 (EJB 3.1) ß @InterceptorBinding @Interceptor @AroundTimeout Java EE 7 (EJB 3.1 : Maintenance Release) Interceptor.Priority @AroundConstruct 35

Interceptor 問題 #3 横断的関心事分離 横断的な関心事を分離したい ログ出力 プロファイル 監査 セキュリティ チェック Copyright 2015, Oracle and/or its affiliates. All rights reserved. 36

public void executesomemethod1 () { long start = System.currentTimeMillis(); // ビジネス ロジックの実装 long end = System.currentTimeMillis(); long Ome = end - start; logger.log(level.debug, + Ome); 37

38

public class SomeLogic { @MySimpleProfilerInterceptor public void executesomemethod1 () { 39

40

41

@Inherited @InterceptorBinding @Target({ElementType.TYPE, ElementType.METHOD) @Reten@on(Reten@onPolicy.RUNTIME) public @interface MySimpleProfilerInterceptor { 42

@Priority(Interceptor.Priority.APPLICATION + 10) @MySimpleProfilerInterceptor @Interceptor public class MyInterceptor { @AroundInvoke public Object calcexectime (InvocaOonContext ic) throws Excep@on { // この部分に実装コードを記述 43

@AroundInvoke public Object calcexectime (InvocaOonContext ic) throws ExcepOon { long start = System.currentTimeMillis(); try { return ic.proceed(); // オリジナルの呼び出し catch (Excep@on e) { throw e; finally { long end = System.currentTimeMillis(); long Ome = end - start ; String classname = ic.gettarget().getclass().getsuperclass().getname(); String methodname = ic.getmethod().getname() ; logger.log(level.info, "{0#{1 took {2 (ms)", new Object[]{ classname, methodname, Ome ); 44

@MySimpleProfilerInterceptor public void executesomemethod() { // do Something 情報 : jp.co.oracle.cdis.homepage#executesomemethod took 300 (ms) 45

@MyInteceptor @MyInteceptor @MyInteceptor @MyInteceptor @MyIntecepto 46

47

48

実装レイヤー毎にデータ検証の実装が必要 ビュー関連処理 ビジネス ロジック データ アクセス DB 検証 ロジック Queue 検証 検証 Copyright 2015, Oracle and/or its affiliates. All rights reserved. 49

Bean Validation 問題 #4: 値の検証 宣言的な値の検証 Copyright 2015, Oracle and/or its affiliates. All rights reserved. 50

public class Person { private String name; private String jpzipcode; public String dosomething() { if (name == null name.equals("")) { validaoonfailed();; if (jpzipcode == null jpzipcode.equals("")) { validaoonfailed();; Pajern pajern = Pajern.compile("^\\d{3- \\d{4$"); Matcher matcher = pajern.matcher(jpzipcode); if (!matcher.find()){validaoonfailed(); 51

public class Person { private String name; private String jpzipcode; public String dosomething() { if (name == null name.equals("")) { validaoonfailed();; if (jpzipcode == null jpzipcode.equals("")) { validaoonfailed();; Pajern pajern = Pajern.compile("^\\d{3- \\d{4$"); Matcher matcher = pajern.matcher(jpzipcode); if (!matcher.find()){validaoonfailed(); 52

53

public class Person { @NotNull @Size(min=1) private String name; @NotNull @Size(min=8,max=8) @Pajern("^\\d{3- \\d{4$") private String jpzipcode; public String dosomething() { 54

55

56

依存するクラスのインスタンス生成は? ビジネス ロジック ビュー関連処理 データ アクセス DB ロジック new? Queue Factory? Copyright 2015, Oracle and/or its affiliates. All rights reserved. 57

javax.inject @Inject @Qualifier @Named @Scope @Singleton 58

Dependency Injection 問題 #5 依存性注入 実装を疎結合で実装 型安全 Copyright 2015, Oracle and/or its affiliates. All rights reserved. 59

public class PersonDAOFromCSV implements PersonDAO { public List<Person> getpersons() throws IOExcepOon{ FileSystem fs = FileSystems.getDefault(); Path file = fs.getpath("/tmp/listperson.csv"); return Files.newBufferedReader(file).lines().map(str - > { String[] array = str.split(","); Person person = new Person(); person.setname(array[0]); person.setage(integer.parseint(array[1])); return person; ).collect(collectors.tolist()); 60

public class PersonController { public void listpersonname() throws IOExcep@on { // ある Person の DAO からデータ取得 PersonDAO persondao = new PersonDAOFromCSV(); List<Person> persons = persondao.getpersons(); persons.foreach(person - > System.out.println(person.getName())); new Factory Abstract Factory Service Locator 61

62

public class PersonController { @Inject PersonDAO persondao ; public void listpersonname() throws IOExcep@on { List<Person> persons = persondao.getpersons(); persons.foreach(person - > System.out.println(person.getName())); new - > Factory - > Abstract Factory - > Service Locator 63

64

PersonController new PersonDAO() PersonDAO PersonController @Inject PersonDAO PersonDAO dao.getpersons() dao.getpersons() 65

Dependency Injection 問題 #6 対象の限定 複数の実装から特定の実装 を選択したい Copyright 2015, Oracle and/or its affiliates. All rights reserved. 66

public interface Service { public void dosomething (); public class DukeService implements Service { @Override public void dosomething () { // 何らかの処理理 System.out.println( Duke Service ); public class DuchessService implements Service { @Override public void dosomething () { // 何らかの処理理 System.out.println( Duchess Service ); 67

public class Foo { @Inject private Service service; OR??? public void execservice(){ service.dosomething(); 68

69

@Inject @DukeQualifier Service service1; public void execmul@pleservice(){ service1.dosomething(); @Inject @DuchessQualifier Service service2; public void execmul@pleservice(){ service2.dosomething(); 70

71

72

@Dependent @Qualifier @Reten@on(Reten@onPolicy.RUNTIME) @Target({ElementType.FIELD, ElementType.TYPE, ElementType.METHOD, ElementType.PARAMETER) public @interface DukeQualifier { 73

@DukeQualifier public class DukeServiceImpl implements Service { @Override public void dosomething() { System.out.println("Duke Service"); 74

@Inject @DukeQualifier Service service1; public void execmul@pleservice(){ service1.dosomething(); 75

76

Dependency Injection 問題 #7 不変オブジェクト イミュータブル(不変な) オブジェクトとしてインス タンスを生成したい Copyright 2015, Oracle and/or its affiliates. All rights reserved. 77

public interface Service { public void dosomething (); @DukeQualifier public class DukeService implements Service{ @Override public void dosomething () { // 何らかの処理理 System.out.println( Duke Service ); @Dependent @Qualifier @Reten@on(Reten@onPolicy.RUNTIME) @Target({ElementType.FIELD, ElementType.TYPE, ElementType.METHOD, ElementType.PARAMETER) public @interface DukeQualifier { 78

79

public class Foo { @Inject @DukeQualifier private final Service service; public void execservice(){ service.dosomething(); 80

81

@Dependent public class Foo { private final Service service; @Inject public Foo(@DukeQualifier Service service) { this.service = service; public void execservice(){ service.dosomething(); 82

83

84

Dependency Injection 問題 #8 文字で対象選択 文字列を指定しインジェク ト先を限定したい Copyright 2015, Oracle and/or its affiliates. All rights reserved. 85

public interface Service { public void dosomething (); @Duke @Printer @Foo @Duchess @IoT @Bar @MyEnterprise @GlassFish @Oracle @Hoge @MySQL 86

87

public interface Service { public void dosomething (); @Named(value= duke ) public class DukeService implements Service{ @Override public void dosomething () { // 何らかの処理理 System.out.println( Duke Service ); 88

public interface Service { public void dosomething (); @Named(value= duke ) public class DukeService implements Service{ @Override public void dosomething () { // 何らかの処理理 System.out.println( Duke Service ); @Inject @Named(value= duke ) Service service1; public void execmul@pleservice(){ service1.dosomething(); 89

90

91

public interface Service { public void dosomething (); @Named(value= duke ) public class DukeService implements Service{ @Override public void dosomething () { // 何らかの処理理 System.out.println( Duke Service ); @Inject @Named(value= duke ) Service service1; public void execmul@pleservice(){ service1.dosomething(); 92

DI ではなく CDI 側の仕様確認 Copyright 2015, Oracle and/or its affiliates. All rights reserved. 93

94

95

96

@Resource @Inject DI/CDI Managed Bean @EJB EJB 97

CDI EJB 16:15-17:05 98

javax.decorator javax.enterprise.context javax.enterprise.event javax.enterprise.inject javax.enterprise.uol 99

100

Contexts&Dependency Injection 問題 #9 CDI の有効化 CDI を利用可能にしたい Copyright 2015, Oracle and/or its affiliates. All rights reserved. 101

102

<?xml version="1.0" encoding="utf- 8"?> <beans xmlns="hup://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="hup://www.w3.org/2001/xmlschema- instance" xsi:schemaloca@on="hup://xmlns.jcp.org/xml/ns/javaee hup://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd" bean- discovery- mode="all"> </beans> It is strongly recommended you use "annotated 103

Java Class Java Class Java Class Java Class Java Class Java Class Java Class Java Class Java Class Java Class Java Class CDI Container 104

105

@NormalScope @ApplicaOonScoped @SessionScoped @ConversaOonScoped @RequestScoped @Dependent @Interceptor @Decorator @Stereotype UnsaOsfied dependencies for type NGClass with qualifiers @Default 106

107

Contextual Reference Proxy CDI Container 108

@Inject SomeManagedBean bean; CDI Container Contextual Reference Proxy 109

javax.enterprise.inject.spi.bean Qualifiers Scope Stereotypes Type AlternaOve 110

Contextual Reference CDI Managed Bean Bean Proxy UserTransacOon Principal Validator ValidatorFactory HjpServletRequest HjpSession ServletContext CDI Container 111

Contexts&Dependency Injection 問題 #10 有効範囲の設定 スコープについて Copyright 2015, Oracle and/or its affiliates. All rights reserved. 112

113

15:10-16:00 114

javax.inject.singleton? javax.enterprise.context.applicaoonscoped? 115

@javax.inject.singleton public class DukeCounter { private int counter; public int getcounter() { return counter++; @Singleton Managed Bean 116

117

@javax.enterprise.context.applicaoonscoped public class DukeCounter implements Serializable { private int counter; public int getcounter() { return counter++; 118

119

Contextual Reference CDI Container 120

@SessionScoped // @ConversaOonScoped public class CounterHoldInSession implements Serializable{ @Inject DukeCounter singleton; 121

Contexts&Dependency Injection 問題 #11 : 唯一の選択 ロジックのバージョニング 実装の切替えを行いたい 配備時に切替え プログラミング時に切替え Copyright 2015, Oracle and/or its affiliates. All rights reserved. 122

public interface Service { public void dosomething (); public class DukeSvc implements Service { @Override public void dosomething () { // 何らかの処理理 System.out.println( Duke Service ); DukeAlpha DukeBeta DukeProd 123

public interface DataAccessService { public List<Persion> getdata (); class implements DataAccessService { @Override public List<Person> getdata () { // テスト DB からデータ取得 class implements DataAccessService { @Override public List<Person> getdata () { // 本番 DB からの実データ取得 124

125

126

@Dependend @AlternaOve public class DukeAlpha implements Service{ @Dependend @AlternaOve public class DukeBeta implements Service{ 127

128

@Dependend @AlternaOve public class DukeAlpha implements Service{ @Dependend @AlternaOve public class DukeBeta implements Service{ 129

@Dependend @AlternaOve public class DukeAlpha implements Service{ <beans> <alterna@ves> <class>dukebeta</class> </alterna@ves> </beans> @Dependend @AlternaOve public class DukeBeta implements Service{ 130

@Dependend @AlternaOve @Priority(Interceptor. Priority.APPLICATION + 10) public class DukeAlpha implements Service{ @Dependend @AlternaOve @Priority(Interceptor. Priority.APPLICATION + 20) public class DukeBeta implements Service{ 131

@Inject Service service ; @Dependend @AlternaOve @Priority(Interceptor. Priority.APPLICATION + 20) public class DukeBeta implements Service{ 132

133

@Inject Service @DukeServiceQualifier service ; @DukeServiceQualifier public class DukeServiceWithQualifier implements Service { @AlternaOve 134

@Inject Service @DukeServiceQualifier service ; @DukeServiceQualifier @Specializes public class SpecializedDuke extends DukeServiceWithQualifier { @Override public void dosomething() { 135

Contexts&Dependency Injection 問題 #12 柔軟な生産 CDI Managed Bean でない クラスもインジェクトした い 実行時に対象オブジェクト を変更したい Copyright 2015, Oracle and/or its affiliates. All rights reserved. 136

137

@Stateless public class SomeLogic1 { PersitenceContext (unitname= ORACLE_PU ) EnOtyManager em; @Override public void dosomething () { // 何らかの処理理 System.out.println( Duke Service ); EJB @Stateless public class SomeLogic2 { PersitenceContext (unitname= MYSQL_PU ) EnOtyManager em; @Override public void dosomething () { // 何らかの処理理 System.out.println( Duke Service ); EJB 138

139

140

@Inject @DatabaseQualifier(value= DatabaseList.Oracle) EnOtyManager em; @Inject @DatabaseQualifier(value= DatabaseList.MySQL) EnOtyManager em; 141

142

143

public enum DatabaseList { Oracle, MySQL, PostgreSQL 144

@Dependent @Qualifier @Reten@on(Reten@onPolicy.RUNTIME) @Target({ElementType.FIELD, ElementType.TYPE, ElementType.METHOD, ElementType.PARAMETER) public @interface DatabaseQualifier { DatabaseList value() default DatabaseList.Oracle ; 145

@Dependent public class DatabaseProducer { @Produces @DatabaseQualifier(value = DatabaseList.Oracle) @PersistenceContext(unitName = "ORACLE_PU") private En@tyManager emoracle ; @Produces @DatabaseQualifier(value = DatabaseList.MySQL) @PersistenceContext(unitName = "MySQL_PU") private En@tyManager emmysql; 146

@Dependent @TransacOonal public class SomeBusinessLogic { @Inject @DatabaseQualifier(value= DatabaseList.MySQL) EnOtyManager em; value public List<Person> getpersons(){ em.createquery(..); Oracle 147

Contexts&Dependency Injection 問題 #14 : アノテーションの整理 大規模開発むけ 毎回大量のアノテーション を付加するのは面倒 複数のアノテーションをま とめたい Copyright 2015, Oracle and/or its affiliates. All rights reserved. 148

@Named @RequestScope @SecurityChekIntercepter @LoggerIntercepter @TransacOonal public class IndexPage { @Override public void dosomething () { // 何らかの処理理 System.out.println( Duke Service ); @Named @RequestScope @SecurityChekInterce pter @LoggerIntercepter @TransacOonal public class UserRegPage { @Named @RequestScope @SecurityChekInter cepter @LoggerIntercepter @TransacOonal public class UserConfirmPage { @Named @RequestScope @SecurityChekInter cepter @LoggerIntercepter @TransacOonal public class UserComplPage { 149

150

@MyReqestedScopeStereotype public class IndexPage { @Override public void dosomething () { // 何らかの処理理 System.out.println( Duke Service ); @MyRequestedScope Stereotype public class UserRegPage { @MyRequestedScop estereotype public class UserConfirmPage { @MyRequestedScop estereotype public class UserComplPage { 151

152

@Named @RequestScope @SecurityChekIntercepter @LoggerIntercepter @TransacOonal @Stereotype @Target(TYPE) @Reten@on(RUNTIME) public @interface MyReqestedScopeStereotype { 153

@Named @RequestScope @SecurityChekIntercepter @LoggerIntercepter @TransacOonal public class IndexPage { @Override public void dosomething () { // 何らかの処理理 System.out.println( Duke Service ); @MyReqestedScopeStereotype public class IndexPage { @Override public void dosomething () { // 何らかの処理理 System.out.println( Duke Service ); 154

@Named @ReauestScope public class IndexPage { @Override public void dosomething () { // 何らかの処理理 System.out.println( Duke Service ); @javax.enterprise.inject.model public class IndexPage { @Override public void dosomething () { // 何らかの処理理 System.out.println( Duke Service ); 155

156

Contexts&Dependency Injection 問題 #13 : イベント処理 Observer パターンの適用 イベント処理を行いたい Copyright 2015, Oracle and/or its affiliates. All rights reserved. 157

158

@RequestScoped @Named(value = userreg") public class UserRegistra@onPage { @Inject Event<Mail> mailevent; public void execuserregistra@on() { // ユーザ登録処理理が完了了 mailevent.fire(new Mail(mailaddredd, name, message)); 159

@Applica@onScoped public class MailEventHandler { @Resource(name = "mail/mymailsession") Session mailsession; public void receiveevent(@observes Mail mailevent) { sendmessage(mailevent); 160

161

@Applica@onScoped public class MailEventHandler { @Resource(name = "mail/mymailsession") Session mailsession; public void receiveevent(@observes Mail mailevent) { sendmessage(mailevent); 162

163

@Stateless public class MailEventDispatcherBean { @Inject Event<Mail> mailevent; @Asynchronous public void produceevent(final Mail message) { // ユーザ登録処理理が完了了 mailevent.fire(message); 164

@javax.ejb.singleton public class EventConsumer { @Asynchronous @Lock(LockType.READ) public void consumeevent(@observes Mail message) throws InterruptedExcep@on { // 何か重い処理理 165

@RequestScoped @Named(value = userreg") public class UserRegistra@onPage { @EJB MailEventDispatcherBean dispather; public void execuserregistra@on() { // ユーザ登録処理理が完了了 dispather.produceevent(new Mail(mailaddredd, name, message)); 166

167

168

169

170

171

172