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