Java > JavaEE > EnterpriseBeans > EnterpriseBeans

「Java/JavaEE/EnterpriseBeans/EnterpriseBeans」の編集履歴(バックアップ)一覧はこちら

Java/JavaEE/EnterpriseBeans/EnterpriseBeans - (2012/09/15 (土) 14:49:17) の1つ前との変更点

追加された行は緑色になります。

削除された行は赤色になります。

-エンタープライズビーンはEJBを実装したコンポーネント -エンタープライズビーンはEJBコンテナ上で動作 -EJBコンテナはシステムレベルのサービスを提供 --トランザクション --セキュリティ ---- *What Is an Enterprise Bean? -ビジネスロジックをカプセル化するサーバサイドコンポーネント **Benefits of Enterprise Beans -エンタープライズビーンにより巨大な分散アプリの開発が楽になる --EJBコンテナがシステムレベルのサービスを提供してくれる ---トランザクション管理 ---セキュリティ -ビジネスロジックがエンタープライズビーンにカプセル化されることで、クライアントをthinにできる -JavaEEサーバであればどこでも動く **When to Use Enterprise Beans -スケーラビリティが求められる時 --複数台のサーバにわたって、コンポーネントを分散する --エンタープライズビーンは異なるマシンで動くだけでなく、それらの場所はクライアントにたいして透過的 **Types of Enterprise Beans -Session --クライアントに対するタスク実行 --Webサービスの実装も -Message-driven --特定の種類のメッセージングに対するリスナー --JMSとか ---- *What Is a Session Bean? -クライアントによって実行されるビジネスロジックをカプセル化 --ローカル --リモート --Webサービス -セッションビーンのデータはDBに保存されない **Types of Session Beans ***Stateful Session Beans ***Stateless Session Beans ***Singleton Session Beans **When toUse Session Beans -ステートフルセッションビーンが適している時 --ビーンがクライアントとのやり取りの情報をもつ --複数のメソッド実行にわたってクライアントの情報を保持 --クライアントとほかのコンポーネントとの仲介 --いろいろなエンタープライズビーンのワークフローを管理する -パフォーマンス改善のためにステートレスにできる時 --特定のクライアント向けの情報なし --1メソッドの実行で、すべてのクライアント向けの汎用的なタスクを実行 --Webサービスを実装するとき -シングルトンが適している時 --アプリケーションにわたって、状態を共有 --1つのエンタープライズビーンが複数スレッドからアクセスされるとき --アプリケーションの起動と終了のタスクを実装 --Webサービスを実装するとき ---- *What Is a Message-Driven Bean? -JavaEEアプリケーションで非同期にメッセージを処理するためのエンタープライズビーン --JMSメッセージやほかのメッセージに対するリスナ --メッセージいろんなところから送信される ---JavaEEコンポーネント(クライアント、Webコンポーネント、エンタープライズビーン) ---JMSアプリケーション ---JavaEE以外のアプリケーション **What Makes Message-Driven Beans Different from Session Beans? -クライアントはメッセージ駆動ビーンに対してインターフェースでアクセスはしない -ステートレスセッションビーンに似ている --特定のクライアント向けの情報を保持しない --どのビーンインスタンスも同じように振る舞う ---EJBコンテナはメッセージを同時に処理するためにビーンをプールできる --あるビーンはどのクライアントからのメッセージでも処理できる -メッセージ駆動ビーンのインスタンス変数は以下を含む --JMSのコネクション --DBコネクション --ほかエンタープライズビーンへの参照 -クライアントコンポーネントは、メッセージ駆動ビーンを直接呼び出すことはせずJMSなどメッセージを送信して連携する -メッセージ駆動ビーンの特徴 --1つのクライアントメッセージを処理する --非同期で実行される --生存期間は短い --共有されるDBなどのデータは表現せず、アクセスする --transaction-aware ---メッセージング処理全体でトランザクションをはれる --ステートレス **When toUse Message-Driven Beans -セッションビーンにJMSメッセージを送信すると同期的に結果を得られる -同期でブロッキングされたくないので、普通はメッセージ駆動ビーンを使ってJMSメッセージを非同期で処理する ---- *Accessing Enterprise Beans -クライアントに対するIFを持たないメッセージ駆動ビーンには適用されない -クライアントからエンタープライズビーンへのアクセスはビュー --no-interface view:インターフェースなしの場合のpublicメソッド --business interface:ビジネスメソッドインターフェース -クライアントはEJB層の複雑さを気にしなくていい -エンタープライズビーンのビューは、なるべく変更が発生しないように設計する -セッションビーンはbusiness interfaceを実装するべき **Using Enterprise Beans in Clients -クライアントがエンタープライズビーンへの参照を取得する方法 --DI ---JavaEEサーバ管理下にあるクライアント(JSF, JAX-RS, ...)向け --JNDI ---JavaEEサーバ管理下にないクライアント向け -Portable JNDI Syntax -java:global --リモートエンタープライズビーンを参照 java:global[/application name]/module name/enterprise bean name[/interface name] --application name:EARファイルの場合に必要。EARファイル名 --interface name:複数のビジネスインターフェースを実装している場合に必要 -java:module --同一モジュール内のローカルエンタープライズビーンを参照 java:module/enterprise bean name/[interface name] --interface name:複数のビジネスインターフェースを実装している場合に必要 -java:app --同一アプリケーション(同一EARファイル内)のローカルエンタープライズビーンを参照 java:app[/module name]/enterprise bean name[/interface name] --module name:オプション --interface name:複数のビジネスインターフェースを実装している場合に必要 **Deciding on Remote or Local Access -エンタープライズビーンのクライアントからのアクセス方法を決める --リモート --ローカル --Webサービス -ローカルかリモートかの判断ポイント --関連するビーン同士の連携(タイト or ルーズ) --クライアントの種類 ---アプリケーションクライアント ---Webコンポーネントや他のエンタープライズビーン --コンポーネントの分散 --パフォーマンス ---ネットワーク通信をへらすためにローカルに ---全体のパフォーマンスを上げるために分散に -エンタープライズビーンがどのアクセス種別かが判断できない場合は、とりあえずリモートアクセスにすると柔軟 -エンタープライズビーンがリモートとローカルアクセスを両方許せるようにできる **Local Clients -ローカルクライアントの特徴 --エンタープライズビーンと同一アプリケーション内 --Webコンポーネントまたは、他のエンタープライズビーン --エンタープライズビーンの位置は透過的ではない -no-interface viewにアクセス --ローカルのビュー --ローカルクライアントはpublicメソッドに対してアクセスする --ビジネスインターフェースなし -ローカルビジネスインターフェースにアクセス --ビジネス、ライフサイクルメソッド --ビジネスインターフェースとビーンのインターフェース参照に@Local、@Remoteをつけない場合 --ビジネスインターフェースまたはビーンのインターフェース参照に@Localを付与 ***Accessing Local Enterprise Beans Using the No-Interface View -@EJBをプロパティ(ビーン)に付与して、DIで解決 -ビーンをJNDIルックアップで解決 InitialContext.lookup("java:module/ExampleBean"); ***Accessing Local Enterprise Beans That Implement Business Interfaces -@EJBをプロパティ(ローカルインターフェース)に付与して、DIで解決 -ローカルインターフェースをJNDIルックアップで解決 InitialContext.lookup("java:module/Example"); **Remote Clients -リモートクライアントの特徴 --エンタープライズビーンとは異なるマシン、JVM --Webコンポーネント、アプリケーションクライアント、エンタープライズビーン --エンタープライズビーンへの参照は透過的 --ビジネスインターフェースを必ず経由 -ビジネスインターフェースまたは、ビーンのビジネスインターフェース参照に@EJBを付与 --エンタープライズビーンへのアクセス -@EJBをプロパティ(リモートインターフェース)に付与して、DIで解決 -リモートインターフェースをJNDIルックアップで解決 InitialContext.lookup("java:global/myApp/ExampleRemote"); **Web Service Clients -Webサービスクライアントのアクセス方法 --JAX-RS --ステートレスセッションビーンのビジネスメソッド呼び出し -エンタープライズビーン、WebコンポーネントもWebサービスクライアントになりえる -ステートレスセッションビーンでWebサービスする --すべてのpublicメソッドがWebサービスとしてアクセス可能 --@WebMethodでWebサービスメソッドのカスタマイズを行う --@WebMethodをつけた場合は、@WebMethodがついているメソッドのみWebサービスとしてアクセス可能 **Method Parameters and Access -ビーンメソッドのパラメータの振る舞いが、アクセス種類より変わる ***Isolation -リモート呼び出しでは、パラメータはコピー --クライアントのパラメータオブジェクトへの変更はサーバ側に影響しない -ローカル呼び出しでは、パラメータは同じ --クライアントとサーバで同じパラメータオブジェクトを参照 --この仕組みに頼った実装はさけるべき -Webサービスはリモート呼び出しと同様 ***Granularity of Accessed Data -リモート呼び出しでは、呼び出し回数を減らすためにパラメータオブジェクトをcoarse-grainedにする --- *The Contents of an Enterprise Bean -エンタープライズビーンを開発するときに作るファイル --エンタープライズビーンクラス --ビジネスインターフェース --ヘルパークラス -作成したファイルをEJB-JARファイルまたは、WARに含める **Packaging Enterprise Beans in EJB JAR Modules -JavaEEアプリケーションをまとめる --EJB JARファイルなどの複数のモジュールをEARファイルにまとめてデプロイ --EJB JAR単独でデプロイ **Packaging Enterprise Beans in WAR Modules -エンタープライズビーンは、WARの中にクラスファイルまたはJARファイルとして含められる --エンタープライズビーンがWebアプリケーションのビジネスロジックを実装する場合 --開発や管理がシンプルにできる -クラスはファイルはWEB-INF/classes -JARファイルはWEB-INF/lib -ejb-jar.xmlは必須でない --ejb-jar.xmlを作る場合は、WEB-INFに配置 -EJB JAR形式のJARをWEB-INF/libにおいても、EJB JARとしては扱われない --WEB-INF/classesのクラスと同じ扱い --スコープはWARモジュール --- *Naming Conventions for Enterprise Beans -エンタープライズビーンの命名規約 |エンタープライズビーン名|XxxBean| |エンタープライズビーンクラス|XxxBean| |ビジネスインターフェース|Xxx| ---- *The Lifecycles of Enterprise Beans -エンタープライズビーンの種類によってライフサイクルが違う --ステートフルセッション --ステートレスセッション --シングルトンセッション --メッセージ駆動 **The Lifecycle of a Stateful Session Bean -状態 --Not Exsist --Ready --Passive -Not Exsist -> Ready --クライアントがビーンを参照するとき +++インスタンス生成 +++DI +++@PostConstract -Ready <-> Passive --コンテナはLLUアルゴリズムで、メモリからファイルへビーンをパッシベート ---@PrePassivate実行 --Passiveでクライアントから要求が来たらファイルからメモリへビーンをアクティベート ---@PostActivate実行 - -> Not Exsist --ライフサイクルの終わりにクライアントは@Removeメソッドを呼び出す --@PostDestroy実行 **The Lifecycle of a Stateless Session Bean -状態 --Not Exsist --Ready -コンテナはライフサイクルの初めにプールの生成と維持を行う -Not Exsist -> Ready ++DI ++@PostConstract Ready -> Not Exsist -ライフサイクル終了時に@PreDestroyを実行 **The Lifecycle of a Singleton Session Bean -状態 --Not Exsist --Ready -コンテナはライフサイクルの初めにシングルトンの生成を行う --@Startupがついていたら、デプロイ時に実行される -Not Exsist -> Ready ++DI ++@PostConstract Ready -> Not Exsist -ライフサイクル終了時に@PreDestroyを実行 ***The Lifecycle of a Message-Driven Bean -状態 --Not Exsist --Ready -コンテナはメッセージ駆動ビーンのプールを作成 -Not Exsist -> Ready ++DI ++@PostConstract Ready -> Not Exsist -ライフサイクル終了時に@PreDestroyを実行
-エンタープライズビーンはEJBを実装したコンポーネント -エンタープライズビーンはEJBコンテナ上で動作 -EJBコンテナはシステムレベルのサービスを提供 --トランザクション --セキュリティ ---- *What Is an Enterprise Bean? -ビジネスロジックをカプセル化するサーバサイドコンポーネント **Benefits of Enterprise Beans -エンタープライズビーンにより巨大な分散アプリの開発が楽になる --EJBコンテナがシステムレベルのサービスを提供してくれる ---トランザクション管理 ---セキュリティ -ビジネスロジックがエンタープライズビーンにカプセル化されることで、クライアントをthinにできる -JavaEEサーバであればどこでも動く **When to Use Enterprise Beans -スケーラビリティが求められる時 --複数台のサーバにわたって、コンポーネントを分散する --エンタープライズビーンは異なるマシンで動くだけでなく、それらの場所はクライアントにたいして透過的 **Types of Enterprise Beans -Session --クライアントに対するタスク実行 --Webサービスの実装も -Message-driven --特定の種類のメッセージングに対するリスナー --JMSとか ---- *What Is a Session Bean? -クライアントによって実行されるビジネスロジックをカプセル化 --ローカル --リモート --Webサービス -セッションビーンのデータはDBに保存されない **Types of Session Beans ***Stateful Session Beans ***Stateless Session Beans ***Singleton Session Beans **When toUse Session Beans -ステートフルセッションビーンが適している時 --ビーンがクライアントとのやり取りの情報をもつ --複数のメソッド実行にわたってクライアントの情報を保持 --クライアントとほかのコンポーネントとの仲介 --いろいろなエンタープライズビーンのワークフローを管理する -パフォーマンス改善のためにステートレスにできる時 --特定のクライアント向けの情報なし --1メソッドの実行で、すべてのクライアント向けの汎用的なタスクを実行 --Webサービスを実装するとき -シングルトンが適している時 --アプリケーションにわたって、状態を共有 --1つのエンタープライズビーンが複数スレッドからアクセスされるとき --アプリケーションの起動と終了のタスクを実装 --Webサービスを実装するとき ---- *What Is a Message-Driven Bean? -JavaEEアプリケーションで非同期にメッセージを処理するためのエンタープライズビーン --JMSメッセージやほかのメッセージに対するリスナ --メッセージいろんなところから送信される ---JavaEEコンポーネント(クライアント、Webコンポーネント、エンタープライズビーン) ---JMSアプリケーション ---JavaEE以外のアプリケーション **What Makes Message-Driven Beans Different from Session Beans? -クライアントはメッセージ駆動ビーンに対してインターフェースでアクセスはしない -ステートレスセッションビーンに似ている --特定のクライアント向けの情報を保持しない --どのビーンインスタンスも同じように振る舞う ---EJBコンテナはメッセージを同時に処理するためにビーンをプールできる --あるビーンはどのクライアントからのメッセージでも処理できる -メッセージ駆動ビーンのインスタンス変数は以下を含む --JMSのコネクション --DBコネクション --ほかエンタープライズビーンへの参照 -クライアントコンポーネントは、メッセージ駆動ビーンを直接呼び出すことはせずJMSなどメッセージを送信して連携する -メッセージ駆動ビーンの特徴 --1つのクライアントメッセージを処理する --非同期で実行される --生存期間は短い --共有されるDBなどのデータは表現せず、アクセスする --transaction-aware ---メッセージング処理全体でトランザクションをはれる --ステートレス **When toUse Message-Driven Beans -セッションビーンにJMSメッセージを送信すると同期的に結果を得られる -同期でブロッキングされたくないので、普通はメッセージ駆動ビーンを使ってJMSメッセージを非同期で処理する ---- *Accessing Enterprise Beans -クライアントに対するIFを持たないメッセージ駆動ビーンには適用されない -クライアントからエンタープライズビーンへのアクセスはビュー --no-interface view:インターフェースなしの場合のpublicメソッド --business interface:ビジネスメソッドインターフェース -ビジネスメソッドのルール --メソッド名はejbで始まらない --public --リモートビジネスインターフェースでアクセスさせる場合は、パラメータと戻り値はJava RMI 的に正しい型 --Webサービスエンドポイントの場合は、@WebMethodつきメソッドのパラメータと戻り値はJAX RS 的に正しい型 --static, finalはだめ --システムエラーの場合は、javax.ejb.EJBExceptionをthrowするべき -クライアントはEJB層の複雑さを気にしなくていい -エンタープライズビーンのビューは、なるべく変更が発生しないように設計する -セッションビーンはbusiness interfaceを実装するべき -複数のインターフェースを実装するときは、どのインターフェースがビジネスインターフェースかを指定するために、インターフェースまたは、ビーンに@Localまたは@Remoteをつける --Serializable, Externalizable, javax.ejbパッケージのインターフェースは除外 **Using Enterprise Beans in Clients -クライアントがエンタープライズビーンへの参照を取得する方法 --DI ---JavaEEサーバ管理下にあるクライアント(JSF, JAX-RS, ...)向け --JNDI ---JavaEEサーバ管理下にないクライアント向け -Portable JNDI Syntax -java:global --リモートエンタープライズビーンを参照 java:global[/application name]/module name/enterprise bean name[/interface name] --application name:EARファイルの場合に必要。EARファイル名 --interface name:複数のビジネスインターフェースを実装している場合に必要 -java:module --同一モジュール内のローカルエンタープライズビーンを参照 java:module/enterprise bean name/[interface name] --interface name:複数のビジネスインターフェースを実装している場合に必要 -java:app --同一アプリケーション(同一EARファイル内)のローカルエンタープライズビーンを参照 java:app[/module name]/enterprise bean name[/interface name] --module name:オプション --interface name:複数のビジネスインターフェースを実装している場合に必要 **Deciding on Remote or Local Access -エンタープライズビーンのクライアントからのアクセス方法を決める --リモート --ローカル --Webサービス -ローカルかリモートかの判断ポイント --関連するビーン同士の連携(タイト or ルーズ) --クライアントの種類 ---アプリケーションクライアント ---Webコンポーネントや他のエンタープライズビーン --コンポーネントの分散 --パフォーマンス ---ネットワーク通信をへらすためにローカルに ---全体のパフォーマンスを上げるために分散に -エンタープライズビーンがどのアクセス種別かが判断できない場合は、とりあえずリモートアクセスにすると柔軟 -エンタープライズビーンがリモートとローカルアクセスを両方許せるようにできる **Local Clients -ローカルクライアントの特徴 --エンタープライズビーンと同一アプリケーション内 --Webコンポーネントまたは、他のエンタープライズビーン --エンタープライズビーンの位置は透過的ではない -no-interface viewにアクセス --ローカルのビュー --ローカルクライアントはpublicメソッドに対してアクセスする --ビジネスインターフェースなし -ローカルビジネスインターフェースにアクセス --ビジネス、ライフサイクルメソッド --ビジネスインターフェースとビーンのインターフェース参照に@Local、@Remoteをつけない場合 --ビジネスインターフェースまたはビーンのインターフェース参照に@Localを付与 ***Accessing Local Enterprise Beans Using the No-Interface View -@EJBをプロパティ(ビーン)に付与して、DIで解決 -ビーンをJNDIルックアップで解決 InitialContext.lookup("java:module/ExampleBean"); ***Accessing Local Enterprise Beans That Implement Business Interfaces -@EJBをプロパティ(ローカルインターフェース)に付与して、DIで解決 -ローカルインターフェースをJNDIルックアップで解決 InitialContext.lookup("java:module/Example"); **Remote Clients -リモートクライアントの特徴 --エンタープライズビーンとは異なるマシン、JVM --Webコンポーネント、アプリケーションクライアント、エンタープライズビーン --エンタープライズビーンへの参照は透過的 --ビジネスインターフェースを必ず経由 -ビジネスインターフェースまたは、ビーンのビジネスインターフェース参照に@EJBを付与 --エンタープライズビーンへのアクセス -@EJBをプロパティ(リモートインターフェース)に付与して、DIで解決 -リモートインターフェースをJNDIルックアップで解決 InitialContext.lookup("java:global/myApp/ExampleRemote"); **Web Service Clients -Webサービスクライアントのアクセス方法 --JAX-RS --ステートレスセッションビーンのビジネスメソッド呼び出し -エンタープライズビーン、WebコンポーネントもWebサービスクライアントになりえる -ステートレスセッションビーンでWebサービスする --すべてのpublicメソッドがWebサービスとしてアクセス可能 --@WebMethodでWebサービスメソッドのカスタマイズを行う --@WebMethodをつけた場合は、@WebMethodがついているメソッドのみWebサービスとしてアクセス可能 **Method Parameters and Access -ビーンメソッドのパラメータの振る舞いが、アクセス種類より変わる ***Isolation -リモート呼び出しでは、パラメータはコピー --クライアントのパラメータオブジェクトへの変更はサーバ側に影響しない -ローカル呼び出しでは、パラメータは同じ --クライアントとサーバで同じパラメータオブジェクトを参照 --この仕組みに頼った実装はさけるべき -Webサービスはリモート呼び出しと同様 ***Granularity of Accessed Data -リモート呼び出しでは、呼び出し回数を減らすためにパラメータオブジェクトをcoarse-grainedにする --- *The Contents of an Enterprise Bean -エンタープライズビーンを開発するときに作るファイル --エンタープライズビーンクラス --ビジネスインターフェース --ヘルパークラス -作成したファイルをEJB-JARファイルまたは、WARに含める **Packaging Enterprise Beans in EJB JAR Modules -JavaEEアプリケーションをまとめる --EJB JARファイルなどの複数のモジュールをEARファイルにまとめてデプロイ --EJB JAR単独でデプロイ **Packaging Enterprise Beans in WAR Modules -エンタープライズビーンは、WARの中にクラスファイルまたはJARファイルとして含められる --エンタープライズビーンがWebアプリケーションのビジネスロジックを実装する場合 --開発や管理がシンプルにできる -クラスはファイルはWEB-INF/classes -JARファイルはWEB-INF/lib -ejb-jar.xmlは必須でない --ejb-jar.xmlを作る場合は、WEB-INFに配置 -EJB JAR形式のJARをWEB-INF/libにおいても、EJB JARとしては扱われない --WEB-INF/classesのクラスと同じ扱い --スコープはWARモジュール --- *Naming Conventions for Enterprise Beans -エンタープライズビーンの命名規約 |エンタープライズビーン名|XxxBean| |エンタープライズビーンクラス|XxxBean| |ビジネスインターフェース|Xxx| ---- *The Lifecycles of Enterprise Beans -エンタープライズビーンの種類によってライフサイクルが違う --ステートフルセッション --ステートレスセッション --シングルトンセッション --メッセージ駆動 -ライフサイクルメソッドは public void xxx() **The Lifecycle of a Stateful Session Bean -状態 --Not Exsist --Ready --Passive -Not Exsist -> Ready --クライアントがビーンを参照するとき +++インスタンス生成 +++DI +++@PostConstract -Ready <-> Passive --コンテナはLLUアルゴリズムで、メモリからファイルへビーンをパッシベート ---@PrePassivate実行 --Passiveでクライアントから要求が来たらファイルからメモリへビーンをアクティベート ---@PostActivate実行 - -> Not Exsist --ライフサイクルの終わりにクライアントは@Removeメソッドを呼び出す --@Removeメソッド実行後に@PostDestroy実行 **The Lifecycle of a Stateless Session Bean -状態 --Not Exsist --Ready -コンテナはライフサイクルの初めにプールの生成と維持を行う -Not Exsist -> Ready ++DI ++@PostConstract Ready -> Not Exsist -ライフサイクル終了時に@PreDestroyを実行 **The Lifecycle of a Singleton Session Bean -状態 --Not Exsist --Ready -コンテナはライフサイクルの初めにシングルトンの生成を行う --@Startupがついていたら、デプロイ時に実行される -Not Exsist -> Ready ++DI ++@PostConstract Ready -> Not Exsist -ライフサイクル終了時に@PreDestroyを実行 ***The Lifecycle of a Message-Driven Bean -状態 --Not Exsist --Ready -コンテナはメッセージ駆動ビーンのプールを作成 -Not Exsist -> Ready ++DI ++@PostConstract Ready -> Not Exsist -ライフサイクル終了時に@PreDestroyを実行

表示オプション

横に並べて表示:
変化行の前後のみ表示:
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。