Saturday, July 22, 2006

J2EE アプリケーションを構成する層(レイヤ)

J2EE アプリケーションを構成する層(レイヤ)は以下のように分けられる。


  • Web 層
  • アプリケーション層
  • EIS(Enterprize Infomation System)層


Web 層はプレゼンテーション層といえる。HTTP 等のリクエストを受け付け、アプリケーション層が提供するビジネスロジックを呼び出し、レスポンスを返す。

Web 層を実現するのが、サーブレットコンテナなどだ。Tomcat などがそうだ。

前述したように、ビジネスロジックを実装しているのがアプリケーション層だ。EJB コンテナなどが、これに該当する。アプリケーションサーバとよばれ、IBM の Websphere とか BEA の WebLogic などの製品がある。これらはサーブレットコンテナも含んでおり、Web 層を兼ねることもできる。

EIS 層にあるのが、リレーショナルデータベースや CRM(Customer Relationship Management)などであり、エンタープライズリソースへのアクセスを提供する。

これらの層は、物理的に分かれている場合もあれば、1台のサーバの中で論理的にのみ分かれている場合もある。

Web 層とアプリケーション層との通信には、通常 RMI over IIOP(RMI/IIOP)が使われる。RMI は Java に特化したリモートメソッド呼び出しの規約であり、IIOP は言語やプラットフォームに依存しない分散コンポーネントどうしの TCP/IP を使った通信プロトコルである。IIOP 上で RMI を使用することにより、Java 以外のコンポーネントともやり取りができるようになる。

EIS 層とアプリケーション層は、EIS 層のリソース固有のプロトコルを使って通信する。EIS 層の RDB と通信するなら、JDBC ドライバが使用されるだろう。

小規模なアプリケーションだと、アプリケーション層が存在しないことがある。つまり、EJB コンテナなどが使用されないことがある。この場合、Web 層でビジネスロジックを実装することになるのだが、プレゼンテーションとビジネスロジックをきちんと分けた方がよい。適切なデザインパターンを使えば実現できる。

たとえば、DTO パターンは、アプリケーション層と Web 層との通信に、ビジネス層の疎粒度のビューとなる DTO(Data Transfer Object)を使うというものだ。これにより、通信量を減らすことができた。この DTO に相当するものを Web 層でビジネスロジックを実装するときにも使うことができる。

DTO は、POJO である Java Bean だ。

フレームワークとは?


  • フレームワークとは、特定のソフトウェア問題を解決するクラスやインターフェースの集まり であり

  • それらのクラスやインターフェースは、何らかの抽象概念を表す。

  • フレームワークは、ハイレベルのパターン、つまりアーキテクチャを構成しており、これにより、上の抽象概念を表現するクラスやインターフェースの相互作用を定義している。


フレームワークをアプリケーション開発に使用する場合、そのアプリケーションはフレームワークが解決する『特定のソフトウェア問題』に合致していなくてはならない。つまり、アプリケーションはフレームワークが提供するアーキテクチャに相応しいものでなければならない。その場合に、フレームワークが構成しているアーキテクチャを再利用できるということだ(アーキテクチャの再利用)。

アプリケーション開発者は、アプリケーションの特定の機能を実現するために、フレームワークを構成している抽象概念を拡張・実装することができる。したがって、これらの抽象概念を表現しているクラスやインターフェースは、フレームワークを拡張する拡張点とよぶことができる。

いうなれば、フレームワークとは、不完全なアプリケーション であって、アプリケーション開発者は、その不完全な部分を補うことでアプリケーションを開発する。フレームワークが提供する部分は再利用することができるので、その分、負担が軽減するというわけだ。

ライブラリとの違いは何か?ライブラリにはアーキテクチャは含まれない。これが大きな違いだ。

フレームワークはアーキテクチャを含んでおり、アプリケーションはそのアーキテクチャを再利用する。アーキテクチャは抽象概念の相互作用を定義しており、アプリケーションが拡張した抽象概念は、そのアーキテクチャにしたがって制御されることになる。

ライブラリの場合はアプリケーションのコードからライブラリが呼ばれるのに対して、フレームワークでは、フレームワークからアプリケーションのコードが呼ばれる。このことを 制御の反転 とよぶ。