PR

Web連携のServletを基本にエンタープライズ向けのEJB

 Javaアプリケーション・サーバーの階層は,ServletとEJBに大きく分かれる(図2)。

図2●Javaアプリケーション・サーバーの主な仕組み
図2●Javaアプリケーション・サーバーの主な仕組み
Javaアプリケーション・サーバーは大きく,Webサーバーと連携するJavaソフトウエア部品であるServletを動作させるためのServletコンテナと,分散処理に適したJavaソフトウエア部品であるEJBを動作させるためのEJBコンテナで構成する。Servletの上位に,JSPと呼ぶHTML画面作成用言語もある。JSPによってHTMLとJavaコードの分離が可能になる。

 大雑把に言うとServletはWeb連携部分であり,Java言語を用いた簡単なロジックの開発が可能である。言い換えれば,Servletとは,Javaで開発した業務アプリケーションのロジックをWebサーバー経由で使えるようにするための仕掛けである。Servletの実装は,オブジェクト指向のJava言語で業務ロジックなどを記述してコンパイルしたクラス・ファイルであり,Webサーバーが備えるServlet API経由でWeb連携する。小規模な業務開発においては,ServletだけでWebアプリケーションに求められる大抵のことはできてしまう。

 一方でEJBは,Servletと同じくJava言語で開発するものの,より企業情報システムの開発に適している。例えば,EJBを特徴付けている機能の1つである分散オブジェクト機能は,RMIやIIOPといった分散オブジェクト向けのプロトコルを用いて,複数サーバーに分散したJavaプログラム同士が通信し合い,あたかも同一サーバー機上にあるかのように利用できるというものだ。EJBはまた,リソース管理機能やO/Rマッピング機能なども持っている。

 Web連携アプリケーションにおいては,EJBを動作させる必要があるのならEJBのエンジン(EJBコンテナ)が必要になり,EJBを必要としないのであればServletのエンジン(Servletコンテナ)だけで済む,という図式が成り立つ。具体的なソフトウエア製品で言えば,Apache Jakarta ProjectのTomcatはServletコンテナの代表格であり,一方で,Javaアプリケーション・サーバー・ベンダーが出荷している商用アプリケーション・サーバーは,Servletコンテナに加えてEJBコンテナを製品化している。最近では,JBossなどオープン・ソースのEJBコンテナも登場している。

HTML画面をServletから独立させるJSP

 では,ここで,WebブラウザのユーザーがURLで指定することで動作させることが可能な,ServletとJSPの動作を見てみよう。まず,Servletは先述した通り,Webサーバーと連携して動作するソフト部品であり,Java言語で記述されてコンパイルされたクラス・ファイルである。一方で,JSPはServletの仕組みの上に成り立つ前処理(プリプロセス)であり,HTML画面を作成するために用いられる,HTML文を含んだテキスト・ファイルである。JSPを実行すると,まずはJava言語に変換されてServletとしてコンパイルされ,Servletのクラスとなり,メモリー上でキャッシュされる。つまり,JSPはServletである。

 Servletをそのまま使わずにJSPを用意した理由は,JSPを使うことによって,ServletのJavaソース・コードにHTML文を記述しなくて済むからである。HTML文による画面表示機能をHTMLテンプレートであるJSPに任せてしまえば,Servletは純粋にJava言語による業務ロジックの実装に当てられる。しかも,JSPはServletそのものであるとはいえ,管理上はHTMLベースのテキスト・ファイルとして保持しておけば良いため,運用が楽である。さて,ここでServletからHTMLを排除するのがJSPだが,一方で,JSPからJava言語を排除する役割を持つのが,タグ・ライブラリである。従来はJava言語で記述しなければならなかった処理をHTMLタグとしてJSP内に記述できるようになる。

画面遷移のための汎用ソフト部品もそろう

 画面とロジックの分離のほかに,Webアプリケーションでは画面の推移も汎用的な話題である。EC(電子商取引)サイトのカタログ・ショッピングと決済処理の画面の推移など,ある程度汎用化できる処理はソフトウエア部品化して再利用することにより,開発生産性を上げられるようになる。こうした画面管理のために生まれたのが,MVC(Model-View-Controller)と呼ぶ設計手法であり,MVCをソフトウエア部品として実装したMVCフレークワークである。Apache Jakarta ProjectのStrutsがMVCフレークワークの代表格である。

 StrutsはServletコンテナの利用を前提としており,そのソフトウエア構成は,Servlet,Servlet以外のJavaクラス,JSPから利用するタグ・ライブラリ,などである。管理用に用意されたServletがWebブラウザからのHTTPリクエストを受け,JSPにフォワードし,JSPがWebブラウザにHTTP応答を返す,という一連の流れである。フロー制御を司るクラスやアプリケーションの状態を保持してJSPに値を渡すモジュールが存在する。管理用Servletの振る舞いはXMLファイルで設定できるため,開発が容易になる。

 最近では,DI(Dependency Injection)コンテナと呼ぶ,インタフェースと実装を分離するためにコンポーネント間の依存関係の管理をコンテナに任せる製品も人気を呼んでいる。こうしたソフトには,Seasar2などがある。

Web Serviceで汎用通信ミドルウエアに

 アプリケーション・サーバー・ベンダー各社は,アプリケーション・サーバー上で稼働するJavaアプリケーションとして,様々なミドルウエアを開発してきている。こうした例の代表が,SOAの代表的な実装例であるWeb Service(SOAP/WDSL/UDDI)のための基盤ソフトである。従来のEDI(電子データ交換)やEAI(エンタープライズ・アプリケーション統合)にとどまらない,より汎用性の高い業務利用を可能にする。

 ミドルウエア製品の構成としては,SOAで結合するサービス同士をつないでルーティング処理などを実施する基盤ソフトのESB(Enterprise Service Bus)を基本に,サービス間の連携ワークフローなどを記述/実行するBPM(業務プロセス管理)エンジンやCEP(複合型イベント処理)機構などがある。最近では,業績(パフォーマンス)の管理や可視化をダッシュボードなどで実現するためのソフトも登場している。