第1回:Javaの基礎はキーワードを知ることから始まる -1-2-3-4
J2EEによるWebアプリケーションの仕組み

前述したように、J2EEには多くの機能が含まれるが、Webアプリケーションを構築するためには「JSP」「サーブレット」「EJB」の3つさえ理解しておけば問題はない。これらの関係を図示すると、fig.1のようになる。fig.1

■J2EEによるWebアプリケーション

fig.1を見ると分かるように、J2EEでは「JSPコンテナ」「サーブレットコンテナ」「EJBコンテナ」といった「コンテナ」と呼ばれるものが登場する。コンテナとは、「開発者が開発したJavaのプログラムを配置すると、適切に実行してくれる実行および管理環境」のことを指す。

J2EE上でWebアプリケーションを構築するには、JSPかサーブレットとしてプログラムを記述する必要がある。これを各コンテナに配置すると、クライアントがWebブラウザなどで接続要求した際、適切に実行されて実行結果がクライアントに返される。

EJBは、JSPやサーブレットから呼び出されるプログラムを指し、プログラムをコンポーネント化して(部品化)、再利用したい場合に用いる。EJBはビジネスロジック層と呼ばれるものであり、例えばデータベースにアクセスする処理をEJBを利用して開発し、JSPやサーブレットから呼び出してデータベース処理する場合などに用いる。もちろんEJBを使わずに、JSPやサーブレットから直接データベースにアクセスしても構わない。

EJBにはトランザクション機能やデータベースへの接続のプーリング機能などが搭載されており、また設定によっては、実行が終わってもプログラムをメモリ上に残しておくことができる。次に接続する際にクライアントに対して再利用することもできる。そのため、EJBを使うとより多くのクライアントからの処理をまかなえるようになり、大規模なWebアプリケーションの開発時にメリットが高い。しかし、EJBはJavaでのWebアプリケーションの開発に必須というわけではないため本稿での解説はしない。

マルチスレッド動作

JSPやサーブレットで記述されたプログラムは、1つのプログラムで複数のクライアントの処理を同時に処理するマルチスレッドの動作となる。詳しくは、後述のコラム「Webアプリケーションを構築するその他の方法」で説明しよう。アクセスしてきたクライアントの数だけプログラムを読み込むのではなく、1つのプログラムがマルチスレッドで動作し、複数のクライアントの処理をすることを覚えておいてほしい。

このため、クライアント数だけプログラムが読み込まれてサーバのリソースが低下してしまうといった事態は避けられる。またクライアントの処理が終了してもプログラムはメモリから解放されず(終了せず)、次のクライアントの待ち受け状態に入る。このため、プログラムを読み込む時間が省け高速に動作させることが可能なのだ。

One Point:

JSPやサーブレットとして記述されたプログラムは、1つのクライアントの処理が終わっても終了しないことから、メモリリークを起こさないようにプログラムしなければならない。例えば、データベースを利用するアプリケーションにおいてデータベースとの切断を忘れたとすると、ずっと接続状態になってしまう。数百回、数千回と呼び出された場合には、データベースとの接続状態が残ったままとなってしまい、リソース不足におちいる可能性が高い。