J2EE と EJB

2006年度サマースクール
EJB 3.0 コース
稚内北星学園大学
情報メディア学部
安藤 友晴
1
本講座の目標



Enterprise JavaBeans (EJB) 3.0 の基本事
項を理解する。
Java EE の「コンテナ/コンポーネントモデ
ル」を理解する。
Java Persistence API について理解する
2
講義予定 (1)

8月3日 (木)



Java EE と EJB
実習環境の構築
8月4日 (金)



Annotation
Stateless Session Beans
Stateful Session Beans
3
講義予定 (2)

8月5日(土)




8月6日(日)


O/R Mapping
Entity Bean
EntityManagerとEJB QL
Relation Mapping
8月7日(月)

まとめ
4
本講座のWebページ

www.wakhok.ac.jp/~tomoharu/ejb3summer-2006/
5
Java EE と
Enterprise JavaBeans (EJB)
EJB 3.0 コース
第1回
2006年8月3日
6
ここでの内容



Enterprise JavaBeans (EJB) とはなにか
EJB批判
EJB 3.0 の登場
7
Enterprise JavaBeans (EJB)
とはなにか
8
Java EEの基本モデル

Java EEは「データベース」を使った「Webア
プリケーション」の作成を念頭に置いてい
る技術
9
EJBとは何か?


EJB = Enterprise JavaBeans
「ビジネスロジック」や「データの永続化」をコン
ポーネント化したもの



ビジネスロジック = アプリケーションの本質的な処理
データの永続化 = メモリ上のデータをファイルシステ
ム上に保存して、プログラムが終了してもデータは残
るようにする
EJB は「EJBコンテナ」上で動作する
10
3種類のEJB



Session Beans
Entity Beans
Message-driven Beans
11
Session Beans (1)



クライアントが必要に応じて呼び出す処理
をまとめたもの
クライアントの特定のセッションに対応
セッション開始と同時に生成され、セッショ
ン終了時に消滅
12
Session Beans (2)

Stateless Session Beans


インスタンスに固有のフィールドがないため内
部状態を持たず、ユーティリティクラスのよう
に振る舞う
Stateful Session Beans

内部状態を持っている
13
Entity Beans


「永続化」されているデータとの対応に用いるも
の
O/Rマッピング



リレーショナルデータベースの1行と、Entity Bean の
一つのインスタンスが対応する
リレーショナルデータベースと Entity Bean の間で同
期が行われる
EJB 3.0 では “Java Persistence API” が用いら
れる
14
Message-driven Beans

Java Message Service (JMS)でのメッセー
ジを非同期に処理するためのもの
15
EJB批判
16
EJBに対する批判


EJBは、普及しつつも、常にさまざまな批判
にさらされてきた。
例:「従来のEJBは存在自体が間違いだっ
た」


http://itpro.nikkeibp.co.jp/free/NSW/NEWS/
20050621/163065/
By Rod Johnson (Spring Framework の作者)
/ 2005.06.21
17
EJB批判のポイント


複雑すぎる
制約が多すぎ
18
複雑すぎる

作成するプログラムがたくさん





Home インタフェース
Remote インタフェース
実装クラス
設定すべき項目もたくさん
それぞれの関係性がわかりにくい
19
制約が多すぎ

EJBのプログラムは、コンテナに依存しきっ
たものになりがち



コンテナから必要な情報を取得する
「Remoteインタフェースは EJBObject を継承
する」といったような多数の制約
そのため、単体テストが困難

「テストファースト」の時代なのに
20
そんなEJBの替わりとして


多くのソフトウェアが利用されている
軽量コンテナ




Spring Framework
HiveMind
Seaser2
O/Rマッピング



Hibernate
TopLink
Cayenne
21
EJB 3.0 の登場
22
EJB 3.0


2006年5月に正式リリース
これまでの EJB 批判を受け止め、大幅に
仕様を追加

EJBの「標準的な」書き方は大幅に変更された
23
“EoD” という考え方




Ease of Development = 開発の容易性
「いかにラクにソフトウェアを開発するか」
数年前から多用されているコトバ
最近のJava技術はEoDの考え方を基本と
しているものが多い。

J2SE 5.0, JSF, EJB 3.0, …
24
POJO と POJI (1)
従来のEntity Bean

Remoteインタフェースを継承したインタフェース
public interface SavingsAccount
extends EJBObject {}

EntityBean インタフェースを実装したクラス
public class SavingsAccountBean
implements EntityBean {}

EJB独自の規則に従ったオブジェクトになる
25
POJO と POJI (2)

POJO = Plain Old Java Object


POJI = Plain Old Java Interface


「純粋で古い」Javaオブジェクト
「純粋で古い」Javaインタフェース
「純粋で古い」= 特定のソフトウェアへの
依存性がない
26
POJO と POJI (3)
EJB 3.0 では


EJB 3.0 でのオブジェクトは、POJO /
POJI になる
POJO / POJI は単体テストも簡単
27
Annotation の利用




Annotation = 注釈
J2SE 5.0 (Tiger) から登場した新しい技術
ソースコード中にメタデータを加える。
EJB 3.0 では、POJO / POJI に Annotation を加
えて、開発すべきプログラムや設定ファイルを減
らすことができる。
28
軽量コンテナ



軽量コンテナ = POJO を対象としたコン
テナ
EJB 3.0 用のコンテナは軽量コンテナとな
る
Spring Framework, Seaser2 などで既に
使われている技術
29
Dependency Injection (1)



従来のEJB
 EJBがコンテナから必要な情報を取得する
EJB 3.0 では
 コンテナがEJBに必要な情報を与える (=
Dependency Injection = DI = 依存性注入)
 Annotation を利用する
コンポーネント間の依存性を減らすことができる
30
Dependency Injection (2)


もともとは Inverse of Control (= IoC = 制
御の反転) と呼ばれていた。
Martin Fowler が “Dependency Injection”
と呼ぶことを提唱
31
EJBの現在

JSR 220 で仕様策定



http://www.jcp.org/en/jsr/detail?id=220
2006年5月に Java EE 5 とともに正式リ
リース
参照実装は Project GlassFish
32
EJB 3.0 の仕様

EJB 3.0 Simplified API


Java Persistence API



EJB 3.0 のAPI (永続化APIをのぞく)
永続化API
将来的には、Java SEでも利用される予定。
EJB Core Contracts and Requirements

EJBのアーキテクチャについて
33