重点用語解説

サーバサイドJavaテクノロジ 重点キーワード

米持幸寿
日本アイ・ビー・エム
2000/10/10

 

Enterprise JavaBeans(EJB)


EJBとは何か?

 JavaBeansはJavaクラスをコンポーネント化する技術だったが、EJB(Enterprise JavaBeans)とは何だろうか。EJB は、その名前からもわかるとおり、エンタープライズ・システム、すなわち基幹業務を意識したコンポーネント技術である。コンポーネント技術であるためJavaBeansという名前が付いているが、根本的にJavaBeansとは異なった技術であると認識したほうがよいだろう。

 JavaBeansは、クライアント(GUIを実装した)で実行することを意識したコンポーネント技術である。ゆえに、インスタンスは基本的にローカル参照でアクセスされるし、GUIの実装に便利な機能を豊富に備えている。シリアライズ化によって、インスタンスを保管、復元することや、プロパティエディタという設定用のGUIを提供するための仕様も含んでいる。

 これに対し、EJBはサーバでの実行を前提にしている。EJBのコンポーネントは普通のクラスやJavaBeansのようにプログラム内でインスタンス化することはできない。EJBコンテナと呼ばれるサーバが必要であり、その中でインスタンス化される。

 アクセスはネーミング機構を通してリモートアクセスすることになっている。基本的には、RMI/IIOP(RMIオーバーIIOPと読む)という分散オブジェクトの技術を使ってアクセスすることになっている。EJBではシリアライズ化でディスクに保存したり、GUIを提供することは基本的に許されていない(図1)

図1 JavaBeansとEnterprise JavaBeansは根本的に異なるものである点に注意してほしい

 EJBでは、その値や状態の同期や保存をサーバにまかせることができる(もちろん、アプリケーション側でも制御可能である)。どういうことかというと、処理の同期を取る機能として「トランザクション機能」、データをRDBにマッピングする機能として「パーシステンス機能」を提供するという仕様になっている。アプリケーション側で制御する場合も、このルールに従ってコーディングしなければならない。これらのEJBのトランザクション管理は、JTA(Java Transaction Architecture)によって実現される。

 EJBは、以上のような思想によって設計されており、次の内容を目標にしている。

  • パーシステンス処理実装の簡便化(特にCMPにおいて)
  • トランザクション処理実装の簡便化と確実性の追求
  • コンポーネントのポータビリティの確立
  • インターオペラビリティ(相互接続性)

 残念ながら、インターオペラビリティは、まだまだ課題が多いようであるが、パーシステンス、トランザクション、ポータビリティにおいては、かなり高いレベルで実現されており、今後の期待が膨らむ技術である。

 EJBの仕様の中で、サーバをEJBコンテナと呼ぶことは前に触れた。その中に入れるアプリケーションコードのことを「Enterprise Bean」という。Java Beansの仕様でプログラムコードのことを「Bean」と呼ぶのと同じと考えればよい。Enterprise Beanには、大きく分けて2つの種類があり、コンポーネントを開発する場合には、それぞれの部品をどの種類で作るかを決めてから作ることになる。2つの種類はさらにそれぞれ2つに分けられ、全部で4種類になる。それぞれの特徴は表1のようになる。

  SessionBean EntityBean
トランザクション処理の実装 データベースのマッピング
Stateful
SessionBean
Stateless
SessionBean
Bean
Managed
Persistence
Container
Managed
Persistence
目的 複数呼び出しにまたがるトランザクション 1回の呼び出しで終わるトランザクション 独自コードによる永続処理 コンテナにまかせた永続処理
利点 より複雑なトランザクション 軽い より細かな制御 ほとんどコーディング不要
欠点 重いリソース 複数呼び出しにまたがるトランザクションに対応できない RDB製品に依存する可能性がある RDB製品の性能が出ないことがある。コンテナごとの制約がある
 表1 EnterpriseBean の特徴

 

EJBはどこで使うべきか?

 EJBがはやりであるので、「とりあえず使ってみよう」というのはなかなかよい志であるが、なんでもかんでもEJBにしていこう、というのは少し考えた方がよいと思う。EJBを使うからには、EJBの利点をしっかり生かした作り方をしたい。

 EJBが目指しているのは、前にも述べたようにパーシステンス、トランザクション、ポータビリティ、インターオペラビリティなどである。これらがまったく関係ないようなシステムや、EJBを採用することによって著しく性能が落ちるような場合には、使用を控える勇気も必要である。

 たとえば、名簿などの検索システムを考えてみよう。検索システムで要求される機能に「速いレスポンス」が要求されていたとする。現状では、単純なプログラムからJDBCを使ったデータベースアクセスで得られたResultSetをHTMLへ書き出すシステムの場合、Java Servletを使ったシステムとEJBを使ったシステムとを比べると、明らかにJava Servletのほうが速い。検索結果にヒットする件数が多くなると、さらに差が顕著になる。それでもEJBであることによるメリットが優先するなら、使う意義はあるだろう。

 これに対して、トランザクション処理を含むような場合を考えてみよう。在庫管理システムから引当処理を行い、決済処理をしてから出荷指示を追加するようなアプリケーションを考えてみてほしい。最低でも3つのデータベース(またはレガシーシステム)に対して更新が行われる。もし、処理途中でシステムが異常終了したり、回線エラーになったり、アプリケーションが異常終了した場合などを想定して、安全なコードを記述する自信があなたにはあるだろうか。また、その記述コストを考えると、大変なことが想像できるだろう。EJBでこのような処理を記述する場合、EJBのルールに従って記述することによって、より安全に、より確実に、そして少ないコーディング量でこれらを実装することができる。これは、間違いなくEJBを使う意義のあるアプリケーションである。

 また、1つのビジネス・ロジックに対して複数の種類のクライアントからアクセスする可能性がある場合も有効である。例えば、クライアントがブラウザからHTML形式(Servlet経由)でアクセスする、Appletからもアクセスする、クライアント・サーバ型アプリケーションからもアクセスする、サーバ側の処理からもアクセスする、などが同時に行われるような場合である。こういったビジネス・ロジックをEJBとして実装することで、外部からのアクセスをRMI/IIOP経由でのアクセスに標準化できるので、メリットがあると言えるだろう。また、ユーザー・インターフェイスやプラットフォームから独立したビジネス・ロジックを実装する場面でも、将来性に期待できるであろう。このように、汎用性や将来性を見据えて、EJBをうまく活用していきたいものだ。

 

Keyword Index
[重点用語解説]
サーバサイドJavaテクノロジの重点キーワード
  ■Java Servlet
  ■JSP(JavaServer Pages)
■EJB(Enterprise Java Beans)
  



Java Agile フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Java Agile 記事ランキング

本日 月間