理系学生日記

おまえはいつまで学生気分なのか

EJB の勉強です

EJB の勉強にはこれを使う。J2EE 時代の本ですが、評判が良いのと、今ぼくが一番使うのが J2EE であることに起因してる。

**開始

EJB 1.x の目的は、大きく 2 点あった。 +それまで独自の API を提供していた各種アプリケーションサーバに対して統一的な API を提供すること +サーバサイドコンポーネントの確立

EJB は J2EE に含まれる仕様の 1 つ。J2EE は、その他に JNDI や JMS など多くの仕様を含む。

***JNDI

JNDI (Java Naming and Directory Interface)はディレクトリサービスを Java から扱うための API。名前づけられたリソースへの統一的なアクセス方法を提供する。 JNDI が定義するインタフェースは大きく 2 種類。 -JNDI API -JNDI SPI JNDI API は一般プログラマが JNDI へアクセスするために使用し、JNDI SPI はサービスプロバイダと JNDI を結合するための API。

EJB では、エンタープライズ Bean が必要とするリソースを JNDI の名前空間に配置する*1。Bean が JNDI 経由でそれらのリソースにアクセスする。

**EJB

エンタープライズ Bean が動作するためには、アプリケーションサーバ内にエンタープライズ Bean が置かれる必要がある。エンタープライズ Bean は、アプリケーションサーバ内の「コンテナ」の中に配置される。コンテナはトランザクション・セキュリティなどの機能を提供する。 アプリケーションサーバとコンテナは、EJB の仕様としては別個のものだが、アプリケーションサーバ・コンテナ間のインタフェースは定義されておらず、両者の間に明確な差はない。

J2EE アプリケーションは、JAR アーカイブにまとめられる。EJB が格納される JAR アーカイブが EJB JAR、Web アプリケーションが格納される JAR アーカイブが WAR (Web Archive)。各モジュールには、デプロイメント記述子が付属する。 各モジュールをさらに JAR アーカイブにまとめたものが EAR (Enterprise Archive)。この EAR が最終的な J2EE アプリケーションとなるが、多くのアプリケーションサーバは EJB JAR や WAR をそのままデプロイ可能である。

** EJB における役割

***エンタープライズ Bean プロバイダ

エンタープライズ Bean を開発し、EJB JAR ファイルを提供する。 エンタープライズ Bean プロバイダは、特定アプリケーションを前提とした開発を行ってはならない。特定 OS を前提とした開発を行ってはならない。なぜなら、エンタープライズ Bean は、様々なアプリケーションで再利用可能でなければならないため。

***アプリケーションアセンブラ

複数のエンタープライズ Bean を組み上わせて、大きなアプリケーションにする

***デプロイヤ

アプリケーションから EAR を作成し、アプリケーションサーバにデプロイする。 デプロイヤは、アプリケーション及びアプリケーションが実行される環境を熟知する必要がある。これは、トランザクションやセキュリティを、その環境に合わせたものに設定する必要があるため。

***EJB サーバプロバイダ

アプリケーションサーバを提供する

***EJB コンテナプロバイダ

EJB コンテナを提供する。先の議論から、EJB サーバプロバイダ = EJB コンテナプロバイダ という認識で良い。

***システム管理者

サーバ、ネットワークの設定を実施する。

*1:JavaEE5 の時代 (EJB 3.x) になると、アノテーションで DI することが多い