読者です 読者をやめる 読者になる 読者になる

理系学生日記

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

忍者TOOLS

EJB の勉強です

study java

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

開始

EJB 1.x の目的は、大きく 2 点あった。

  1. それまで独自の API を提供していた各種アプリケーションサーバに対して統一的な API を提供すること
  2. サーバサイドコンポーネントの確立

EJBJ2EE に含まれる仕様の 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 することが多い