第1回 Webサイトの構成とJ2EEサーバ


樫山友一
2002/1/25


 J2EEアプリケーション・サーバは、商用Webサイトだけでなく、企業内のイントラネットなどにも広く用いられる時代になりました。また、クライアント/サーバで構築されていたいままでのシステムが、順次Webベースのシステムへと置き換えられています。そのために、Visual Basic(以下VB)などでクライアント/サーバシステムを構築していたエンジニアもJ2EEアプリケーション・サーバのシステム開発に携わることが多くなるでしょう。

 この連載では、これからJavaベースのWebサイト開発に携わる人に、J2EEアプリケーションサーバをベースにしたWebシステムを、素早く理解していただくための知識を提供していきます。

 第1回は、J2EEアプリケーション・サーバとは何か、その中で利用されている技術の概要とシステム構成について解説します。

 

 アプリケーション・サーバを利用したシステム構成

 JavaをベースとしてWebサイトを開発する場合は、J2EEアプリケーション・サーバを利用するのが一般的です。代表的なJ2EEアプリケーション・サーバを以下に紹介します。

会社名 アプリケーション・サーバ名
BEA Systems WebLogic Server 6.1
IBM WebSphere Application Server V4.0
iPlanet E-Commerce Solutions iPlanet
Oracle Oracle 9iAS
Macromedia JRun 3.0
HP HP Application Server 8.0
富士通 INTERSTAGE 4
日立製作所 Cosminexus 4
Silverstream SilverStream Application Server 3.7.3
Apacheコンソーシアム Tomcat

 J2EEアプリケーション・サーバは、Javaで実装されているケースが多く、1つのアプリケーション・サーバで多くのプラットフォームをサポートしています。よって、システム構成を決めるうえで、プラットフォームを柔軟に選択することが可能です。

 J2EEアプリケーション・サーバを用いたシステム構成例を図1に示します。VBなどで構築されるクライアント/サーバシステムでは、PCとデータベースサーバによる構成であるのに対して、アプリケーション・サーバがPCとデータベース・サーバの間に入る構成になります。

図1 アプリケーション・サーバを用いたシステム構成

 クライアント/サーバシステムとアプリケーション・サーバを用いた3階層のシステムでは、システム構成が異なるのと同時に、論理的な構造(役割)も異なります。

 

 アプリケーション・サーバでは論理構造はどう違う?

 では、具体的にどう違うのかを見ていきましょう。図2にクライアント/サーバシステムの論理構造を示します。クライアント/サーバシステムでは、クライアントが多くの機能を持つことになります。実際にユーザーが操作する画面はもとより、データを操作するロジック、また操作されたデータを画面に変換する表示層までがクライアントの機能として備わっています。また、サーバ側も一部ビジネスロジックを担当するケースもあります。

 クライアント/サーバシステムでは、サーバ側は、ご存じのとおりデータベースサーバです。よって、一部のビジネスロジックは、データベースの中で動作します。クライアント/サーバシステムは、システム構成が単純で、開発するプログラム自体が単純であれば開発しやすいというメリットがありますが、複雑なビジネスロジックを持ったアプリケーションを開発するような場合には、不利な点もあります。

図2 クライアント/サーバシステムの論理構造

 特に、クライアントで3つの処理(ユーザーインターフェイス/表示層/ビジネスロジック)を行うために、プログラムの構造を機能ごとに分けて設計することがとても難しくなります。それで、これを解決するために3層構造のシステムが利用されるようになったわけです。アプリケーション・サーバを用いた論理的な構造はどうでしょう。これを図3に示します。

図3 アプリケーション・サーバを用いた3層構造

 アプリケーション・サーバを用いる場合、一般的に、クライアントではユーザーインターフェイスとしてWebブラウザが用いられます。アプリケーション・サーバでは、クライアントからの要求によりデータベースへアクセスし、必要な処理をして、最終的にHTMLを作成してクライアントのWebブラウザに返します。一見するだけでは、アプリケーション・サーバがクライアント/サーバのクライアント部分と同じくらいの仕事をしていて、プログラムが複雑になってしまうと思われるかもしれません。実は、それをうまく解決しているのがJ2EEのアプリケーション・サーバなのです。

 では、J2EEアプリケーション・サーバでは、どのように複雑にならないようにプログラムを構成するのでしょうか。ここで、多くのWebアプリケーションに採用されているMVCモデルを図4に示します。MVCとは、それぞれModel、View、Controllerの略です。

図4 MVCモデル

 J2EEアプリケーション・サーバは、MVCモデルを構築するのに適する仕様を持っています。MVCモデルを説明するまえに、まず、それらの仕様がどのようなものであるかを説明しましょう。

<J2EEアプリケーション・サーバで利用されている技術>


JSP(JavaServer Page)

 HTMLの中にJavaのコードを埋め込み、このコードによってHTMLを生成することができます。静的なHTMLと、Webブラウザからのリクエストに応じて変化する動的なHTMLを合わせて記述することができます。これは、マイクロソフトの仕様であるASP(Active Server Page)に当たるものであると考えればよいでしょう。

Servlet
 Webブラウザからの要求を受けて動作します。JSPのようにHTMLを生成することが可能です。また、ロジックだけを実装したServletを開発することもできます。

EJB( Enterprise Java Beans)
 ソフトウェアのコンポーネント化を目的に作成された仕様です。利用のされ方により、以下の3つの種類があります。

Session EJB(Session Bean)
 ビジネスロジックをコンポーネント化します。関数の呼び出し単位やWebサイトの接続を保持するセッション単位での利用ができます。

Entity EJB(Entity Bean)
 データベースのテーブルごとに作成されます。実際のデータとデータに依存するロジックを実装します。

Message Driven EJB(Message Driven Bean)
 メッセージを受け取って動作を行うことが目的のコンポーネントです。主にJMS(Java Messaging Service)からのメッセージを受け取って動作します。

 これらの要素技術について、さらに詳しい説明は、以下の記事を参照してください。
 「Javaを紐解くための重点キーワード
 「Webアプリケーションにおけるサーバ・サイドJavaの有効的な利用(前編)
 「Java Solution FAQ


 

 MVCの役割はどうなっているか?

 では、実際にJ2EEアプリケーション・サーバの中ではどのような動作をするのでしょうか。図5にデータの書き込みを行う場合の一般的な動作を示します。

 Viewは、2つの部分に分けて構成されています。これは、画面からの入力チェックを行う部分と結果を表示する部分の役割を分担させ、変更に強くするためです。最初に受け取ったWebブラウザからのリクエストをControllerに渡すまでを最初のView部が担当して、結果を受け取って結果の画面を表示する部分を2つ目のView部が行います。Controllerは、リクエストを受け取るとどのモデルを用いて処理をするのか、どういった順番で処理をするのかというロジックを持っています。よって、いくつかのModelを用いて作業を行います。

図5 MVCの一般的な動作

 このように、VBなどを用いてクライアント/サーバでシステムを開発するのに比べて、どの機能をどの部分に持たせるかが明確であり、分担作業にも適しています。また、EJBはコンポーネントであるために再利用も可能となります。実際、汎用的にソフトウェア部品として使えるEJBコンポーネントを流通させる試みも始まっています(コンポーネントスクエアcBankなど)。

 

 データベースへのアクセスはJDBCで行う

 VBでは、ODBCを用いてデータベースへのアクセスを行いますが、Javaの仕様ではJDBC(Java DataBase Connectivity)を用いてデータベースへのアクセスを行います。

 クライアント/サーバシステムでは、クライアントとデータベース・サーバで1対1の接続を行いますが、アプリケーション・サーバではアプリケーション・サーバからデータベース・サーバへ複数の接続を行います。

図6 クライアント/サーバシステムでのデータベース接続

図7 アプリケーション・サーバとデータベースの接続

 J2EEアプリケーション・サーバを用いる場合は、まずデータベースへの接続をコネクションプールとして、アプリケーション・サーバに登録することになります。このコネクションプールは、アプリケーション・サーバの起動時にデータベースへの接続を行い、必要と思われる接続数を確保しておくものです。プログラムからは、必要に応じてコネクションプールを取り出して、データベースへのアクセスを行います。

 コネクションプールを用いない場合は、データベースの利用時にデータベースへの接続を行うことになります。データベースの接続は非常にコストが高い(時間がかかる)ために、コネクションプールは、パフォーマンスの面からも効率がいい手段といえるのです。コネクションプールの設定は、アプリケーション・サーバごとに異なるので、それぞれのマニュアルを参照して設定することになります。

 また、コネクションプールの取り出しは、JSP、Servlet、EJBそれぞれの部分から行うことが可能です。

 今回は、J2EEアプリケーション・サーバとは何か、その中で利用されている技術の概要とシステム構成について紹介しました。次回は、JavaベースのWebサイトの開発プロジェクトの始めの段階で決めておくべき項目について解説します。

プロフィール
樫山友一(かしやま ゆういち)

大手電機メーカー研究所でオブジェクト指向によるシステム開発に従事する。1996年よりJavaへの取り組みをはじめ、J2EEアプリケーションサーバを活用したWebシステム構築のコンサルタントとして多数のプロジェクトを手掛ける。
2001年3月にイーズ・コミュニケーションズ株式会社の設立に参加し、最高技術責任者に就任。
著書に「わかりやすいUML入門」、「Webサイトがわかる本」(いずれもオーム社)がある。


Java Solution全記事一覧



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

注目のテーマ

Java Agile 記事ランキング

本日 月間