稚内北星学園大学 情報メディア学部 安藤 友晴 2006年度サマースクール EJB 3.0 コース 稚内北星学園大学 情報メディア学部 安藤 友晴
本講座の目標 Enterprise JavaBeans (EJB) 3.0 の基本事項を理解する。 Java EE の「コンテナ/コンポーネントモデル」を理解する。 Java Persistence API について理解する
講義予定 (1) 8月3日 (木) 8月4日 (金) Java EE と EJB 実習環境の構築 Annotation Stateless Session Beans Stateful Session Beans
講義予定 (2) 8月5日(土) 8月6日(日) 8月7日(月) O/R Mapping Entity Bean EntityManagerとEJB QL 8月6日(日) Relation Mapping 8月7日(月) まとめ
本講座のWebページ www.wakhok.ac.jp/~tomoharu/ejb3-summer-2006/
Java EE と Enterprise JavaBeans (EJB) 第1回 2006年8月3日
ここでの内容 Enterprise JavaBeans (EJB) とはなにか EJB批判 EJB 3.0 の登場
Enterprise JavaBeans (EJB) とはなにか
Java EEの基本モデル Java EEは「データベース」を使った「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 Stateful Session Beans インスタンスに固有のフィールドがないため内部状態を持たず、ユーティリティクラスのように振る舞う Stateful Session Beans 内部状態を持っている
Entity Beans 「永続化」されているデータとの対応に用いるもの O/Rマッピング EJB 3.0 では “Java Persistence API” が用いられる
Message-driven Beans Java Message Service (JMS)でのメッセージを非同期に処理するためのもの
EJB批判
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の替わりとして 多くのソフトウェアが利用されている 軽量コンテナ O/Rマッピング Spring Framework HiveMind Seaser2 O/Rマッピング Hibernate TopLink Cayenne
EJB 3.0 の登場
EJB 3.0 2006年5月に正式リリース これまでの EJB 批判を受け止め、大幅に仕様を追加
“EoD” という考え方 Ease of Development = 開発の容易性 「いかにラクにソフトウェアを開発するか」 数年前から多用されているコトバ 最近のJava技術はEoDの考え方を基本としているものが多い。 J2SE 5.0, 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) POJO = Plain Old Java Object POJI = Plain Old Java Interface 「純粋で古い」Javaインタフェース 「純粋で古い」= 特定のソフトウェアへの依存性がない
POJO と POJI (3) EJB 3.0 では EJB 3.0 でのオブジェクトは、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 = 依存性注入) Annotation を利用する コンポーネント間の依存性を減らすことができる
Dependency Injection (2) もともとは Inverse of Control (= IoC = 制御の反転) と呼ばれていた。 Martin Fowler が “Dependency Injection” と呼ぶことを提唱
EJBの現在 JSR 220 で仕様策定 2006年5月に Java EE 5 とともに正式リリース http://www.jcp.org/en/jsr/detail?id=220 2006年5月に Java EE 5 とともに正式リリース 参照実装は Project GlassFish
EJB 3.0 の仕様 EJB 3.0 Simplified API Java Persistence API EJB 3.0 のAPI (永続化APIをのぞく) Java Persistence API 永続化API 将来的には、Java SEでも利用される予定。 EJB Core Contracts and Requirements EJBのアーキテクチャについて