ejb&cdi入門:はじめてのjava eeアプリケーション開発:第3回

46
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | EJB & CDI 入門 はじめてのJava EEアプリケーション開発シリーズ 3: 日本オラクル株式会社 オラクルユニバーシティ 岡田 大輔 20140827

Upload: oracle-fusion-middleware

Post on 15-Jan-2015

1.180 views

Category:

Technology


0 download

DESCRIPTION

EJB&CDI入門:はじめてのJava EEアプリケーション開発:第3回 第49回WebLogic Server勉強会@東京のセッション資料です。 EJB (Enterprise JavaBeans)はサーバサイドコンポーネントのビジネスロジックを記述するための仕様です。EJBの特長、種類、トランザクションとセキュリティ制 御、依存性の注入によるコンポーネント間の連携、Beanのライフサイクル管理などを解説します。 日本オラクル オラクルユニバーシティ 岡田 大輔

TRANSCRIPT

Page 1: EJB&CDI入門:はじめてのJava EEアプリケーション開発:第3回

Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |

EJB & CDI 入門 はじめてのJava EEアプリケーション開発シリーズ 第3回:

日本オラクル株式会社 オラクルユニバーシティ 岡田 大輔 2014年08月27日

Page 2: EJB&CDI入門:はじめてのJava EEアプリケーション開発:第3回

Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |

Safe Harbor Statement

The following is intended to outline our general product direction. It is intended for information purposes only, and may not be incorporated into any contract. It is not a commitment to deliver any material, code, or functionality, and should not be relied upon in making purchasing decisions. The development, release, and timing of any features or functionality described for Oracle’s products remains at the sole discretion of Oracle.

2

Page 3: EJB&CDI入門:はじめてのJava EEアプリケーション開発:第3回

Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |

Agenda

EJB (Enterprise JavaBeans) とは?

CDI (Contexts and Dependency Injection) とは?

3

Page 4: EJB&CDI入門:はじめてのJava EEアプリケーション開発:第3回

Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |

Java Platform, Enterprise Edition おさらい

• Java SE をベースにした企業システム向けのフレームワーク

–オープンなWebシステムの構築を支える機能群の標準仕様 • コミュニティ主導のエンタープライズ・ソフトウェア標準

• コンポーネント仕様とサービスアクセスのための各種APIを規定

–移植性(Write Once Run Anywhere を担保)

– Oracle などのベンダーは、Java EE に準拠した実装としてアプリケーション・サーバーを提供 • Oracle WebLogic Server

• GlassFish

4

Page 5: EJB&CDI入門:はじめてのJava EEアプリケーション開発:第3回

Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |

Java EE 6 の主な標準仕様 おさらい

標準仕様 開発領域 特徴

JSF 2.1

Webアプリケーション

• リッチなユーザインタフェースの効率的な開発を実現するWebアプリケーション・フレームワーク

Servlet 3.0 • 冗長な設定・コード記述の削減により開発生産性を向上 • 非同期ServletによるAjax対応

EJB 3.1 ビジネスロジック • 冗長な設定・コード記述の削減により開発生産性を向上 • より柔軟な制御機能の追加

JAX-RS Webサービス • 容易なサービス公開を実現するWebサービス標準仕様

CDI 全領域 • レイヤ間の疎結合化による柔軟性を向上するDIフレームワーク標準仕様

5

Page 6: EJB&CDI入門:はじめてのJava EEアプリケーション開発:第3回

Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |

WebLogic Server

Webアプリケーション

プレゼンテーション

ビジネス・ロジック

永続化ロジック

これから作成するアプリケーション

Product Integer id; String productName; Integer price; Integer units;

開発環境

開発・ デプロイ

ProductEJB List<Product> getAllProducts() { } void create(Product entity); void remove(Product entity); void edit(Product entity);

@Named ProductController List<Product> list; String search() { } String create() { } String delete() { } String update() { }

ProductBean List<Product> list; String search() { } String create() { } String delete() { } String update() { }

search.xhtml 検索

list.xhtml 一覧

index.xhtml メニュー

create.xhtml 作成

update.xhtml 更新

delete.xhtml 削除

第2回で説明しました 第3回(今回)で説明します

第4回で説明します

6

Page 7: EJB&CDI入門:はじめてのJava EEアプリケーション開発:第3回

Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |

今回作成するアプリケーション

index.xhtml (メニュー)

<p>商品管理</p>

<h:form> 商品の表示 <h:commandButton value="表示"

action="#{productBean.toList}" /> </h:form> ProductBean

@Inject ProductEJB productEJB; public List<Product> getList() { return productEJB.findAll(); } public String toList() { return "list"; } public String toIndex() { return "index"; }

list.xhtml (一覧)

<p><h:outputText value="商品一覧: " /></p>

<h:dataTable value="#{productBean.list}" var="c” border="1"> <h:column> <f:facet name="header"> <h:outputText value="商品番号" />

</f:facet> <h:outputText value="#{c.id}" /> </h:column> </h:dataTable> <h:form> <h:commandButton value="戻る”

action="#{productBean.toIndex}" /> </h:form>

Product

private Integer id; private Date creationDate; private String description; private Date modificationDate; private Integer price; private String productCode; private String productName; private String status; private Integer units;

ProductEJB Private List<Product> list; private List<Product> findAll() { return list; }

Stateless Session Bean

7

Page 8: EJB&CDI入門:はじめてのJava EEアプリケーション開発:第3回

Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |

EJB(Enterprise JavaBeans)とは?

8

Page 9: EJB&CDI入門:はじめてのJava EEアプリケーション開発:第3回

Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |

Enterprise JavaBeans (EJB)

• EJBは再利用可能なビジネスロジックを提供するためのコンポーネント仕様

– Session Bean • クライアントからのリクエスト受信時に実行するビジネスロジックを記述

– Message Driven Bean • JMSメッセージ受信時に実行するビジネスロジックを記述

– Entity Bean • ORマッピングとビジネスロジック(データの操作)を記述する

• Java EE 6 ではORマッピングは JPA を使用

今回の範囲

9

Page 10: EJB&CDI入門:はじめてのJava EEアプリケーション開発:第3回

Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |

•アプリケーションの固有機能と共通機能を分離する

• Java EE のコンポーネント

– Webアプリケーション: JSF, Serlvets, JSP

– EJB: Session Bean, Message Driven Bean

–クライアント: アプレット

コンポーネント・アーキテクチャ

コンテナ

コンポーネント

コンテナ: • クライアントに「サービス」を提

供する実行環境 • コンポーネントのライフサイクル

を管理

コンポーネント: • アプリケーション固有の機能

が実装されている • コンテナが提供するサービス

を利用 • コンテナによって管理される

10

Page 11: EJB&CDI入門:はじめてのJava EEアプリケーション開発:第3回

Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |

コンテナが提供するサービス

• デプロイ時に宣言可能なサービス

– 永続化

– トランザクション

– セキュリティ

– インジェクション

• コンポーネント制御のためのサービス

– ライフサイクル管理

– スレッド管理

– クライアントとの通信

• コンテナ・プロバイダ固有のサービス

– クラスタリング

– 負荷分散

– フェイル・オーバー

サービスの振る舞いはデプロイメント記述子や注釈で指定

可能

アプリケーション・サーバー ごとに提供する機能が異なる

コンポーネント制御に必要なサービスは暗黙で提供される

11

Page 12: EJB&CDI入門:はじめてのJava EEアプリケーション開発:第3回

Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |

サービスアクセスAPI コンポーネントがサービスにアクセスするには?

Java SE

Webコンテナ

JAF

JAXP JAX-RS JAX-WS JAX-RC JPA Connectors Java Mail

JMS JTA/ JTS JDBC

アプレット コンテナ

Java SE

アプリケーション クライアント コンテナ

Java SE

JMS JNDI JDBC

HTTP/HTTPS

Java SE

EJB コンテナ

JAF

JAXP JAX-RS JAX-WS JAX-RPC JPA Connectors Java Mail

JMS JTA/ JTS JDBC

HTTP/HTTPS

データベース RMI/IIOP

RMI/IIOP

12

Page 13: EJB&CDI入門:はじめてのJava EEアプリケーション開発:第3回

Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |

EJB Lite

機能 EJB Lite EJB 3.1

No Interface view (ローカルクライアント) ◯ ◯

宣言的セキュリティ ◯ ◯

トランザクション(CMT / BMT) ◯ ◯

インターセプタ ◯ ◯

Message Driven Bean ◯

リモートクライアント ビュー ◯

EJB2.x ◯

タイマーサービス ◯

非同期メソッド呼び出し ◯

Webサービス エンドポイント (JAX-WS / JAX-RPC) ◯

13

One Point: • EJB Lite は EJB 3.1 のサブセットとして提供される • Web Profileまたは Java EE 6 フルプラットフォームのアプリケーション・サーバーにデプロイできる

Page 14: EJB&CDI入門:はじめてのJava EEアプリケーション開発:第3回

Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |

EJBのパッケージング

• EJB 3.1 では、EJB を war ファイルに含めることができる

–デプロイメント記述子もオプションに • 使用する場合はWEB-INF配下に配置 (ejb-jar.xml / weblogic-ejb-jar.xml)

– ejb-jar ファイルとしてもデプロイ可能

14

Webアプリケーション(war)

EJB EJB

エンタープライズアプリケーション(ear)

Webアプリケーション(war)

EJB(jar)

EJB EJB

EJB (jar)

EJB EJB

Java EE 6 ではEJBを war にデプロイ可能

従来どおりejb-jar または ear としてもデプロイ可能

Page 15: EJB&CDI入門:はじめてのJava EEアプリケーション開発:第3回

Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |

Session Beanとは

•ビジネスロジックを記述するコンポーネント

–クライアントからのリクエスト受信時に実行するビジネスロジックを記述

–注釈付きのPOJO(Plain Old Java Object)として実装できる

–同期呼び出しおよび非同期呼び出しとして実装可能

–コンテナによってライフサイクルが管理される • クライアントの呼び出しを受けたコンテナによって呼び出される

• トランザクションやセキュティはデプロイ時に宣言可能なサービスとしてコンテナが提供

15

Page 16: EJB&CDI入門:はじめてのJava EEアプリケーション開発:第3回

Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |

Session Bean の種類

Session Bean 説明 注釈

Statelss Session Bean クライアントごとにインスタンスが割当てられるが、クライアントの状態を保持しない

@Stateless

Stateful Session Bean クライアントごとにインスタンスが割当てられ、クライアントごとの状態を保持する

@Stateful

Singleton Session Bean

アプリケーションで1回だけインスタンス化され、複数のクライアントがインスタンスに並行アクセスできる (JVMごとに1つだけインスタンスが存在する)

@Singleton

16

Page 17: EJB&CDI入門:はじめてのJava EEアプリケーション開発:第3回

Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |

Session Beanの振る舞い

• Stateless Session Bean • Stateful Session Bean • Singleton Session Bean

Stateless SessionBean

Stateless SessionBean

Session Object

クライアント クライアント

Stateful Session Bean

Stateful Session Bean

Session Object

クライアント クライアント

Session Object

Singleton Session Bean

Session Object

クライアント クライアント

Session Object

17

オブジェクト プーリング

オブジェクトキャッシュ

シングル インスタンス

Page 18: EJB&CDI入門:はじめてのJava EEアプリケーション開発:第3回

Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |

Session Bean の作成 (1)

One Point:

• [Enterprise JavaBeans] -> [セッションBean]を選択します

• WebアプリケーションでEJBを作成した場合はEJB用のデプロイメント記述子は生成されません (追加する場合は WEB-INF に配置)

18

Page 19: EJB&CDI入門:はじめてのJava EEアプリケーション開発:第3回

Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |

Session Bean の作成 (2)

One Point:

• セッションのタイプ: で作成するSession Beanの種類を選択します

• インタフェースを作成: にチェックを入れるとEJB クライアント用にローカル・インタフェースが生成されます

• (EJBモジュール内で作成する場合はリモート・インタフェースも選択可能)

19

Page 20: EJB&CDI入門:はじめてのJava EEアプリケーション開発:第3回

Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |

ProductEJB.java

import javax.ejb.Stateless;

@Stateless public class ProductEJB { private List<Product> list; // Add business logic below. (Right-click in editor and choose // "Insert Code > Add Business Method") public List<Product> findAll() { return list; } }

Session Bean を書いてみよう

20

NetBeansでは右クリック メニューでビジネスメソッドを定義できる

セッションのタイプ: で選択した Session Beanの注釈 (ここではStateless Session Bean)

ビジネス メソッド

Page 21: EJB&CDI入門:はじめてのJava EEアプリケーション開発:第3回

Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |

ビジネス・メソッドの追加

One Point:

• [コードを挿入 …] -> [ビジネスメソッド・の追加…] を選択するとSession Bean にビジネスメソッドを追加できます

• インタフェースを使用している場合は、 インタフェースで使用: をチェックすることでインタフェースにメソッド宣言が追加されます

21

Page 22: EJB&CDI入門:はじめてのJava EEアプリケーション開発:第3回

Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |

Session Beanのライフサイクル

• Stateless Session Bean • Stateful Session Bean • Singleton Session Bean

22

存在しない

Ready状態 (呼び出し可能)

1. DI 2.PostConstructコールバック

PreDestroy コールバック

メソッド実行

存在しない

Ready状態 (呼び出し可能)

1.DI 2.PostConstructコールバック

1.Removeメソッド またはタイムアウト 2.PreDestroy コールバック

Passive状態

存在しない

Ready状態 (呼び出し可能)

1.DI 2.PostConstruct コールバック

PreDestroy コールバック

メソッド実行

PrePassivate コールバック

PostActivate コールバック

メソッド実行

タイムアウト

Page 23: EJB&CDI入門:はじめてのJava EEアプリケーション開発:第3回

Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |

ライフサイクル コールバックメソッド

• Beanクラスではライフサイクルコールバックを処理するメソッドを実装できる

–コールバック注釈をつけたメソッドを定義する • @PostConstruct … 依存性注入完了後に、初期化処理として呼び出される

• @PreDestroy … インスタンス破棄する直前に呼び出される

• @PrePassivate … パッシベーション前に呼び出される (Stateful Session Beanのみ)

• @PostActivate … アクティベーション後に呼び出される (Stateful Session Beanのみ)

• @Remove … Stateful Session Beanの削除用メソッド

23

One Point: 上記4つの注釈をつけるメソッドは次の要件を満たす必要があります • メソッド戻り値は void • static または final ではない • チェック例外をスローしない

Page 24: EJB&CDI入門:はじめてのJava EEアプリケーション開発:第3回

Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |

weblogic-ejb-jar.xml

One Point: SLSBのプールサイズを調整するには?

•デプロイメント記述子(weblogic-ejb-jar.xml)で指定

<?xml version="1.0" encoding="UTF-8"?> <weblogic-ejb-jar xmlns="http://xmlns.oracle.com/weblogic/weblogic-ejb-jar" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd http://xmlns.oracle.com/weblogic/weblogic-ejb-jar http://xmlns.oracle.com/weblogic/weblogic-ejb-jar/1.0/weblogic-ejb-jar.xsd">

<weblogic-enterprise-bean> <ejb-name>ProductEJB</ejb-name> <stateless-session-descriptor> <pool> <initial-beans-in-free-pool>3</initial-beans-in-free-pool> <max-beans-in-free-pool>3</max-beans-in-free-pool> </pool> </stateless-session-descriptor> </weblogic-enterprise-bean> </weblogic-ejb-jar>

<ejb-name>はSession Beanクラスのクラス名を指定

設定は initial = max を推奨 maxの値は、 そのEJBへの最大同時 アクセス数が目安 ( < 実行スレッド数)

24

Page 25: EJB&CDI入門:はじめてのJava EEアプリケーション開発:第3回

Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |

ビジネスインタフェースとは

• Beanクラスのメソッドはビジネスインタフェースを通して公開可能

– EJBクライアントとコンポーネントの結合度を疎に保つ

–クライアントのアクセスモデルを注釈で指定 • リモートアクセス (@Remote)

• ローカルアクセス (@Local)

25

One Point: EJB 3.1 からはローカルアクセスでビジネスインタフェースを必要としないNo Interface view も使用できます (@LocalBean注釈をBeanクラスに指定するとNo Interface viewであることを明示できます )

Page 26: EJB&CDI入門:はじめてのJava EEアプリケーション開発:第3回

Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |

ビジネスインタフェースの実装

26

@Local public interface ProductEJBLocal { void method1(); }

ProductEJBLocal.java

@Stateless

public class ProductEJB implements ProductEJBLocal { @Override public void method1() { // メソッドの実装

} }

ProductEJB.java

クライアントアクセスモデルに応じた注釈を指定 (@Remote/@Local)

No Interface viewの場合は @LocalBean注釈を指定 (オプション)

ビジネスインタフェースのメソッドを オーバーライド

Page 27: EJB&CDI入門:はじめてのJava EEアプリケーション開発:第3回

Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |

EJBの呼び出し (EJBクライアント)

• Java EE ではコンテナによるDI(依存性注入)をサポート

– Java EE 5 からサポートされているDI • @EJB … EJBのルックアップ (EJBクライアント)

• @Resource … 指定されたリソース接続ファクトリのルックアップ

@ManagedBean public class ProductBean { @EJB private ProductEJB productEJB; public List<Product> getList() { return productEJB.findAll(); } }

@Stateless public class ProductEJB { @Resource(name="jdbc/test") private DataSource ds; public List<Product> findAll() { return list; } }

JNDI

DataSource

EJBクライアント EJB

27

Page 28: EJB&CDI入門:はじめてのJava EEアプリケーション開発:第3回

Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |

トランザクションの管理

• EJBのトランザクション管理はコンテナが提供するサービスのひとつ

–デプロイ時に宣言可能なサービス

– CMT(コンテナ管理)とBMT(Bean管理)を選択可能(@TransactionManagement) • CMT … コンテナがトランザクションを管理 (@TransactionAttributeで振る舞いを指定)

• BMT … Beanがトランザクション処理 (begin/commit を記述)

28

Page 29: EJB&CDI入門:はじめてのJava EEアプリケーション開発:第3回

Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |

CMTのトランザクション属性

TransactionAttribute クライアント(TXなし) クライアント(TXあり)

NEVER △ × 例外発生

NOT_SUPPORTED △ △ クライアントTXはSuspend

SUPPORTS △ ○

MANDATORY × 例外発生 ○

REQUIRED ○ ○

REQUIRES_NEW ○ ○ クライアントTXはSuspend

29

×: 呼び出し不可 △:トランザクションなし ○:トランザクションあり

One Point: Message Driven Beanで指定できるTransactionAttributeはNOT_SUPPORTED と REQUIRED の2つです。

Page 30: EJB&CDI入門:はじめてのJava EEアプリケーション開発:第3回

Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |

CDI (Contexts and Dependency Injection)とは?

30

Page 31: EJB&CDI入門:はじめてのJava EEアプリケーション開発:第3回

Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |

Context and Dependency Injection (CDI)

• Java EE 6 標準の DI 仕様

–アプリケーション・サーバー上の実行中の処理状態(Context)に関連付けて依存性を注入(Dependency Injection) • インスタンスの生成や削除(ライフサイクル)がコンテキスト上で管理される

• 利用者はCDI Beanのライフサイクルを意識しないでよい(Beanの型を知っていれば使用可能)

• 同じ注釈(@Inject)を使用して依存性を注入できる

31

@Named @Dependent public class ProductBean { @Inject private ProductEJB productEJB; }

@Stateless public class ProductEJB { @Inject @TestDS private DataSource ds; }

JNDI

DataSource

EJBクライアント EJB

Page 32: EJB&CDI入門:はじめてのJava EEアプリケーション開発:第3回

Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |

CDI のスコープ

スコープ スコープをあらわす注釈 有効期間

request @RequestScoped HTTP リクエストを受けてからレスポンスを返すまでの間

conversation @ConversationScoped Conversation.begin()からConversation.end()を実行するまでの間

session @SessionScoped HTTP セッションが有効な間

application @ApplicationScoped Web アプリケーションが起動してから終了するまでの間

dependent @Dependent インジェクション先のライフサイクルと同じ ( デフォルト)

CDI Beanは注釈で指定された 期間で、コンテナによって インスタンス化・破棄されます

32

Page 33: EJB&CDI入門:はじめてのJava EEアプリケーション開発:第3回

Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |

CDIを有効化するには

One Point: CDI を有効化するには、beans.xml ファイルをアプリケーションに含めます

• Webアプリケーションの場合は WEB-INF ディレクトリ配下

• その他のアプリケーションの場合は META-INF ディレクトリ配下

NetBeansでは、アプリケーション作成時に[コンテキストと依存性の注入を有効化する]をチェックします

33

Page 34: EJB&CDI入門:はじめてのJava EEアプリケーション開発:第3回

Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |

CDI Bean の作成

One Point:

• NetBeansでJSF管理対象 Bean を作成すると、CDI Beanとして作成されます。

• 名前: CDI Beanの名前と スコープ: CDI Beanのスコープを指定します。

34

Page 35: EJB&CDI入門:はじめてのJava EEアプリケーション開発:第3回

Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |

ProducBean.java

CDI Bean の実装

import javax.enterprise.context.RequestScoped; import javax.inject.Named; @Named @RequestScoped public class ProductBean { private List<Product> list; public List<Product> getList() { // …

@Named注釈とスコープの注釈を指定 (省略すると @Dependent と同じだがなるべく省略しない)

スコープを@SessionScopedや@ConversationScopedで指定する場合は java.io.Serializable インタフェースを 実装しましょう

35

Page 36: EJB&CDI入門:はじめてのJava EEアプリケーション開発:第3回

Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |

CDI Bean にアクセスする

<?xml version='1.0' encoding='UTF-8' ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core"> <h:head> <title>prodMgmt</title> </h:head> <h:body> <h2> <h:outputText value="list.xhtml" /> </h2> <hr /> <p> <h:outputText value="商品一覧: " /> </p>

<h:form> <h:commandButton action="#{productBean.toIndex}" value="戻る" />

</h:form>

<h:dataTable value="#{productBean.list}" var="c" border="1"> … 途中略 …

JSFでは EL式を使って CDI Beanにアクセスできます

36

list.xhtml

Page 37: EJB&CDI入門:はじめてのJava EEアプリケーション開発:第3回

Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |

EL 式を使ったCDI Beanのアクセス

<h:dataTable border="1" value="#{productBean.list}" var="c" >

@Named @RequestScoped public class ProductBean { private List<Product> list; public List<Product> getList() { return list; }

CDI Bean名はクラス名(先頭小文字) (@Name注釈のvalue属性で指定可能)

CDI Beanのプロパティの getterメソッドを呼び出します

ProductBean.java

37

list.xhtml JSFのEL式の構文は #{ CDI Beanの名前.プロパティ名 }

Page 38: EJB&CDI入門:はじめてのJava EEアプリケーション開発:第3回

Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |

ProductEJB.java

EJB クライアントでの CDI の使用

38

@Named @RequestScoped public class ProductBean { @Inject private ProductEJB productEJB; public List<Product> getList() { list = productEJB.findAll(); return list; } }

ProductBean.java

@Stateless @LocalBean public class ProductEJB { private List<Product> list; public List<Product> findAll() { return list; } @PostConstruct private void populateList() { // listの初期化処理

} }

@InjectでEJB への参照をDI

EJBクライアント

EJB

Page 39: EJB&CDI入門:はじめてのJava EEアプリケーション開発:第3回

Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |

まとめ

• EJBは、ビジネスロジックを提供するコンポーネントです

– Java EE 6 の EJB は注釈ベースのかんたん開発

–コンポーネントのライフサイクル管理はコンテナによって行なわれます • コンテナが提供するサービスの振る舞いは注釈(やデプロイメント記述子)で指定¥

–トランザクションも宣言的トランザクション管理(CMT)を利用可能

• CDIは、Java EE 6 標準で提供される依存性注入機能です

– Java EE コンテキスト(スコープ)に関連づけた依存性注入が可能です • スコープに基づいてコンテナがインスタンスのライフサイクルを管理

• 同じ注釈を用いて様々な依存性を注入できる

39

Page 40: EJB&CDI入門:はじめてのJava EEアプリケーション開発:第3回

Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |

オラクルユニバーシティからのお知らせ

40

Page 41: EJB&CDI入門:はじめてのJava EEアプリケーション開発:第3回

Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |

オラクルユニバーシティからのお知らせ

• WebLogic Serverの管理方法やJava EE 6を使ったアプリケーション開発方法を体系的に学習したい方に最適な研修コースをご提供しています。

– Classroomトレーニングだけでなく、Live Virtual Classや『Oracle トレーニング・オンデマンド』など多様な受講形態から選択いただけます。

41

Page 42: EJB&CDI入門:はじめてのJava EEアプリケーション開発:第3回

Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |

コース内容

■トラブルシューティング: 概要

■WebLogic Server 診断フレームワーク: 概要

■診断インストゥルメンテーション

■JVM のトラブルシューティング

■サーバーのトラブルシューティング

■アプリケーションのトラブルシューティング

■JDBC のトラブルシューティング

■ノード・マネージャのトラブルシューティング

■クラスタのトラブルシューティング

■セキュリティのトラブルシューティング

受講前提条件 ・Oracle WebLogic Server 管理 I 受講相当の知識 ・Linux の基本的な操作方法の理解

対象者 ・Oracle WebLogic Server 管理者

・サポートエンジニア

・アーキテクト

コース日程 2日間 日程の詳細は Oracle University Webサイト にてご確認ください。

受講料 定価¥152,224(税込) ※Oracle PartnerNetwork会員様は、パートナー割引価格で受講いただけます。

アプリケーション・サーバー運用時に発生する トラブルのパターンと対処方法を知る

このコースでは、JVM、WebLogic Server、Java EE アプリケーションのデプロイメント、データソース、ノード・マネージャ、クラスタ

およびセキュリティなどWebLogic Serverの運用に不可欠な各機能について、よく発生する問題のトラブルシューティング手法について

説明します。WebLogic Server管理コンソール、モニタリング・ダッシュボード、WebLogic診断フレームワーク、およびJava Flight

Recorderなど、トラブルシューティングを支援する各種ツールを活用した問題の切り分けやデバッグ方法、およびその対処方法について

実践的な演習を通して学習することができます。

Oracle WebLogic Server 12c: トラブルシューティング ミドルウェア

開催日程 ■ 2014年 8月 28日 (木) 〜 29日 (金)

42

Page 43: EJB&CDI入門:はじめてのJava EEアプリケーション開発:第3回

Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |

コース内容

■Java EE 6 概要

■開発環境の整備

■Webコンポーネントモデル

■JSFを使用した開発 ■CDIによる依存性注入

■JSF モバイルアプリケーションの作成

■Bean Validationの使用

■EJBコンポーネントモデル

■Java Persistence API

■トランザクションポリシーの実装 ■セキュリティポリシーの実装

■WebサービスおよびJava EE 統合技術

受講前提条件 ・SQLおよびHTML, CSSの基礎知識 ・統合開発環境(IDE)を使用したJavaプログラミング経験

対象者 ・Javaアプリケーション開発者

・システム・エンジニア

・アーキテクト

コース日程 5日間 日程の詳細は Oracle University Webサイト にてご確認ください。

受講料 定価¥374,850(税込) ※Oracle PartnerNetwork会員様は、パートナー割引価格で受講いただけます。

開発生産性がさらに向上したJava EE 6 標準技術で作る Webアプリケーションの開発ポイントが分かる。開発者にオススメのコース

このコースでは、Java EE 6 に準拠したWebアプリケーションを開発、およびデプロイするための知識を習得することができます。

JavaServer Faces、Enterprise Java Beans、Java Persistence API をはじめとしたJava EE 6の主要な標準仕様について理解し、主にJSFテクノ

ロジーを使用した、デスクトップやモバイルWebブラウザからアクセス可能なエンドツーエンドのWebアプリケーションの開発方法

を豊富な演習を通して学習することができます。

Java EE 6 アプリケーション開発

開催日程 ■ 2014年 9月 1日 (月) 〜 5日 (金)

Java

43

Page 44: EJB&CDI入門:はじめてのJava EEアプリケーション開発:第3回

Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |

無償セミナーのご案内 9月は WebLogic Server & Java EE を学習しよう!

• 『WLSTの使い方』 @Live Webinar (オンラインのみの開催)

WebLogic Serverのコマンドライン管理ツールであるWLST(WebLogic Server Scripting Tool)の活用方法をご紹介します。本セッションでは、WLSTを使用してWebLogic ServerのMBeanにアクセスしてドメインの設定やサーバーの起動・停止などの制御、およびモニタリングを行う方法などを紹介します。 日時: 2014年 9月 18日 (木) 18:30 〜 19:30

• 『これからはじめるJava EE』 @オラクル青山センター これから Java EE をはじめる方を対象に、Java EE とは何か? から JavaServer Faces (JSF) や 依存性の注入を行う Contexts and Dependency Injection (CDI) など Java EE 6 の標準技術を使ってWeb アプリケーションを作成するためのポイントをご紹介します。Java EE に触れたことは無いけれど興味はある、という方も大歓迎。ふるってご参加ください。 日時: 2014年 9月 24日 (水) 18:30 〜 20:00

44

お問い合せは オラクルユニバーシティ まで

http://www.oracle.com/jp/education/ Tel: 0120-155-092

お申し込みはセミナータイトル のリンクから!!

Page 45: EJB&CDI入門:はじめてのJava EEアプリケーション開発:第3回

Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | 45

Page 46: EJB&CDI入門:はじめてのJava EEアプリケーション開発:第3回