J2EE と EJB

EJB 3.0 コース
サマースクール in 稚内
2005/08/06
稚内北星学園大学
助教授
安藤 友晴
1
本講座の目標

EJB 3.0 の基本事項を理解する
2
講義予定 (1)

8/6


J2EE と EJB
8/7
Annotation
 Stateless Session Beans
 Statefull Session Beans

3
講義予定 (2)

8/8
O/R Mapping
 Entity Bean


8/9


Relation Mapping
8/10

まとめ
4
本講座のWebページ

www.wakhok.ac.jp/~tomoharu/ejb3summer-2005/
5
J2EE と EJB
6
Webアプリケーション

Webアプリケーションとは、「ユーザがWebブ
ラウザを使って何かを入力し、必要な結果を
得る」Webページ。
サーチエンジン
 本の検索
 商品の購入
 掲示板など

7
なぜWebアプリケーションか
アプリケーションを使う側の理由
 特定のソフトをインストールしなくても、
Webブラウザがあれば良い。
 操作は簡単。
 アプリケーションを提供する側の理由
 集中管理できるので楽。

8
データベースの利用



Webアプリケーションは「データ」を処理する。
 図書データ
 在庫リスト
 掲示板の記事
「データ」は保存されている。
データベースを使うと面倒がなくて良い
 データをただのファイルで保存しておくと、遅
いし面倒
9
J2EEの基本モデル

J2EEは「データベース」を使った「Webアプリ
ケーション」の作成を念頭に置いている技術
10
EJB とは何か?
EJB = Enterprise JavaBeans
 「ビジネスロジック」や「データの永続化」をコ
ンポーネント化したもの

ビジネスロジック = アプリケーションの本質的な
処理
 データの永続化 = メモリ上のデータをファイルシ
ステム上に保存して、プログラムが終了しても
データは残るようにする


EJB は「EJBコンテナ」上で動作する
11
3種類のEJB
Session Beans
 Entity Beans
 Message-driven Beans

12
Session Beans (1)
クライアントが必要に応じて呼び出す処理を
まとめたもの
 クライアントの特定のセッションに対応
 セッション開始と同時に生成され、セッション
終了時に消滅

13
Session Beans (2)

Stateless Session Beans


インスタンスに固有のフィールドがないため内
部状態を持たず、ユーティリティクラスのように
振る舞う
Statefull Session Beans

内部状態を持っている
14
Entity Beans
「永続化」されているデータとの対応に用い
るもの
 O/Rマッピング
 リレーショナルデータベースの1行と、Entity
Bean の一つのインスタンスが対応する
 リレーショナルデータベースと Entity Bean
の間で同期が行われる

15
Message-driven Beans

Java Message Service (JMS)でのメッセージ
を非同期に処理するためのもの
16
EJB批判
17
EJBに対する批判
EJBは、普及しつつも、常にさまざまな批判
にさらされてきた。
 例:「従来のEJBは存在自体が間違いだった」

http://itpro.nikkeibp.co.jp/free/NSW/NEWS/20
050621/163065/
 By Rod Johnson (Spring Framework の作者) /
2005.06.21

18
EJB批判のポイント
複雑すぎる
 制約が多すぎ

19
複雑すぎる

作成するプログラムがたくさん
Home インタフェース
 Remote インタフェース
 実装クラス

設定すべき項目もたくさん
 それぞれの関係性がわかりにくい

20
制約が多すぎ

EJBのプログラムは、コンテナに依存しきった
ものになりがち
コンテナから必要な情報を取得する
 「Remoteインタフェースは EJBObject を継承す
る」といったような多数の制約


そのため、単体テストが困難

「テストファースト」の時代なのに
21
そんなEJBの替わりとして


多くのソフトウェアが利用されている
軽量コンテナ




Spring Framework
HiveMind
Seaser2
O/Rマッピング



Hibernate
TopLink
Cayenne
22
EJB 3.0 の登場
23
EJB 3.0

これまでの EJB 批判を受け止め?、大幅に
仕様を変更
EoD (Ease of Development) を実現できそう
 EJBコンテナは DI (Dependency Injection) コンテ
ナに

24
“EoD” という考え方
Ease of Development = 開発の容易性
 「いかにラクにソフトウェアを開発するか」
 一昨年くらいから多用されているコトバ
 最近のJava技術はEoDの考え方を基本とし
ているものが多い。


J2SE 5.0 (Tiger), JSF, EJB 3.0, …
25
POJO と POJI (1)
従来のEntity Bean

Remoteインタフェースを継承したインタフェース
public interface SavingsAccount
extends EJBObject {}

EntityBean インタフェースを実装したクラス
public class SavingsAccountBean
implements EntityBean {}

EJB独自の規則に従ったオブジェクトになる
26
POJO と POJI (2)
EJB 3.0 では

POJO = Plain Old Java Object


「普通の」Javaオブジェクト
POJI = Plain Old Java Interface

「普通の」Javaインタフェース
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 = 依存性注入)
コンポーネント間の依存性を減らすことができる
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
現在、Public Review
 2006年初頭には Java EE 5 とともに正式リ
リース予定

32
EJB 3.0 の仕様

EJB 3.0 Simplified API


EJB 3.0 のAPI (永続化APIをのぞく)
Java Persistence API
永続化API
 将来的には、J2SEでも利用される予定。


EJB Core Contracts and Requirements

EJBコンテナの実装について
33