SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

japan.internet.com翻訳記事

Enterprise Javaアプリケーションのアーキテクチャとデザイン
Java EEアプリケーション開発の基礎

Java EEコンテナアーキテクチャ

 Java EEプラットフォームはコンテナベースのアーキテクチャを通じて不可欠なシステムサービスを提供します。コンテナはJavaで書かれたオブジェクト指向アプリケーションコンポーネントにランタイム環境を提供します。コンテナはセキュリティ、トランザクション、ライフサイクル管理、オブジェクトのルックアップとキャッシング、持続性、ネットワーク通信といった低レベルのサービスを提供します。システムプログラマはこれらの低レベルサービスの開発を受け持ち、アプリケーションプログラマはビジネスロジックとプレゼンテーションロジックの開発に集中できます。

 図5に示すように、サーバサイドコンテナには2つの種類があります。

  • 「Webコンテナ」―JSP(Java Server Pages)やサーブレットなどのプレゼンテーションコンポーネントをホストします。これらのコンポーネントはリモーティングプロトコルを使ってEJBコンテナとの対話も行います。
  • 「EJBコンテナ」―Enterprise JavaBeans(EJB)コンポーネントの実行を管理します。
図5 Java EEプラットフォームアーキテクチャ
図5 Java EEプラットフォームアーキテクチャ

 クライアント側のアプリケーションクライアントは、ネットワークを通じてEJBコンテナに接続する中核的なJavaアプリケーションです。それに対してWebブラウザは、一般にHTTPプロトコルを使ってWebコンテナと対話します。このEJBコンテナとWebコンテナとからJava EEアプリケーションサーバが形成されます。そしてサーバはJVM(Java Virtual Machine)上にホストされます。

 各コンテナは、それぞれ異なる低レベルサービス群を提供します。Webコンテナはトランザクションサポートを提供しませんが、EJBコンテナはこのサービスを提供します。これらのサービスは、JTA(Java Transaction API)、JMS(Java Message Service)、JNDI(Java Naming and Directory Interface)、JPA(Java Persistence API)、JTA(Java Transaction API)といった標準のJava EE APIを通じて利用できます。しかし最大の利点は、いくつかの設定をするだけでこれらのサービスをアプリケーションコンポーネントに透過的に適用できることです。これらのサービスを挿入するには、アプリケーションコンポーネントをアーカイブファイルにパッケージングし、特定のXMLベースの配備記述子を使って定義します。これにより、開発時間の短縮と保守の簡易化が期待できます。

Java EEアプリケーションアーキテクチャ

 Java EEプラットフォームを使用すると、分散n層アプリケーションの開発が容易になります。アプリケーションコンポーネントを機能に基づいて分割し、異なる層にホストすることが簡単にできます。異なる層の置かれたコンポーネント同士は一般にMVCというアーキテクチャ原則を使って協働します。

MVC

 Trygve Reenskaugが初めてMVCについて記述したのは『Applications Programming in Smalltalk-80: How to use Model-View-Controller』(1979年)という論文でした。MVCは主にユーザーインターフェースロジックをビジネスロジックから分離するための方策として考え出されたものです。しかし、両者が孤立した状態のままでは何の役にも立ちません。MVCはプレゼンテーションロジックレイヤとビジネスロジックレイヤとの間を繋いで仲介するために間接化レイヤを追加することも示唆しています。この新しいレイヤは「コントローラレイヤ」と呼ばれます。簡単に言えば、MVCはアプリケーションを次の3つの(別個のものではあるが協働する)コンポーネントに分割します。

  • 「モデル」―ビジネスルールを適用することでアプリケーションのデータを管理します。
  • 「ビュー」―アプリケーションデータの表示を担当します。またユーザーによるシステムとのいっそうの対話を可能にするコントロールの提供も担当します。
  • 「コントローラ」―モデルとビューとの間の仲介を行います。

 図6はこの3つのコンポーネントの関係を示しています。ユーザーのアクションによってトリガされたイベントはコントローラによってインターセプトされます。アクションに応じて、コントローラはモデルを呼び出して、アプリケーションデータを修正する適切なビジネスルールを適用します。次にコントローラはビューコンポーネントを選択して、修正されたアプリケーションデータをエンドユーザーに提示します。このように、MVCはアプリケーション内での明確な役割分担のガイドラインを提供しています。この役割分担により、複数のビューとコントローラが同じモデルを扱えるのです。

図6 MVC(Model-View-Controller)アーキテクチャ
図6 MVC(Model-View-Controller)アーキテクチャ

MVCを使用したJava EEアーキテクチャ

 MVCの概念はJava EEアプリケーションアーキテクチャの基礎に簡単に取り入れることができます。Java EEサーブレットテクノロジはコントローラコンポーネントとして最適です。ブラウザ要求はHTTPを通じてサーブレットに転送できます。その後、サーブレットコントローラはEJBモデルコンポーネントを呼び出すことができます。EJBモデルコンポーネントはビジネスルールをカプセル化し、アプリケーションデータの取得と修正も行います。取得したり修正したりしたエンタープライズデータはJSPを使って表示できます。これは現実のエンタープライズJava アーキテクチャを極端に単純化したものですが、小規模アプリケーションにはうまく当てはまります。しかし、これはアプリケーション開発について非常に重要な事柄を示唆しています。それぞれのテクノロジの専門技術者が協力して働けば、リスクを減らし、生産性を高めることができます。さらに、1つのレイヤを透過的に置き換えることができ、他の機能に悪影響を与えずに新しい機能を簡単に追加できます(図7を参照)。

図7 MVCベースのレイヤ化多層Java EEアプリケーションアーキテクチャ
図7 MVCベースのレイヤ化多層Java EEアプリケーションアーキテクチャ

Java EEアプリケーションのレイヤ

 図7から分かるように、レイヤ化アーキテクチャはMVCアーキテクチャの拡張です。データアクセスレイヤや統合レイヤは、従来型のMVCアーキテクチャではビジネスレイヤの一部と考えられていましたが、Java EEでは独立したレイヤとして扱われるようになっています。なぜなら、エンタープライズJavaアプリケーションはビジネスデータに関連して種々の外部情報システム(リレーショナルデータベース管理システム(RDBMS)、メインフレーム、SAP ERP、Oracle E-Business Suiteなど)との統合や通信を行うからです。そのため、統合サービスを独立したレイヤとして位置付けることで、ビジネスレイヤはビジネスルールを実行するという本来の機能に集中しやすくなるのです。

 結合の緩いレイヤによるJava EEアーキテクチャの利点は、MVCの利点と類似しています。実装の詳細は個々のレイヤにカプセル化されているので、隣接するレイヤに大きな影響を与えずに修正することが容易です。そのため、アプリケーションが柔軟なものとなり、保守しやすくなります。各レイヤは定義された各自の役割を持つので、重要なサービスを提供しながらも管理は単純になります。

次のページ
Java EEアプリケーションデザイン

この記事は参考になりましたか?

japan.internet.com翻訳記事連載記事一覧

もっと読む

この記事の著者

japan.internet.com(ジャパンインターネットコム)

japan.internet.com は、1999年9月にオープンした、日本初のネットビジネス専門ニュースサイト。月間2億以上のページビューを誇る米国 Jupitermedia Corporation (Nasdaq: JUPM) のニュースサイト internet.comEarthWeb.com からの最新記事を日本語に翻訳して掲載するとともに、日本独自のネットビジネス関連記事やレポートを配信。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

Dhrubojyoti Kayal(Dhrubojyoti Kayal)

Capgemini Consultingに勤務する上級コンサルタント。Enterprise Javaテクノロジを利用したアプリケーションや製品の開発およびデザインにおいて5年以上のキャリアを持つ。Spring Framework、ORM、SOA、リファクタリング、プレファクタリング、パフォーマンスエ...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/3839 2009/04/30 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー