Java EE Platformは、ナンバー1のエンタープライズWebサーバーです。Adobe Flash Platformは、ナンバー1のリッチインターネットアプリケーション開発環境です。これら2つを使用することで、エンタープライズバックエンドソリューションと優れたユーザー体験を利用した、印象的なデータ中心アプリケーションを実現できます。
この記事では、FlexとJavaで開発するアプリケーションのアーキテクチャに関して、以下のような内容を説明します。
- クライアント/サーバーアーキテクチャの概要。
- クライアントとサーバーの間の通信の様々な方法。
- Flash Remotingとその利点および使用法の紹介。
- Flexアプリケーションをセキュリティフレームワークに統合する方法。
- イベント、ステート、MXMLコンポーネント、モジュールを使用してFlexアプリケーションを構築する方法の概要。
ビデオFlex 4およびJava統合の紹介*も参照してください。
これらのアプリケーションの作成に使用されたテクノロジーについて詳しくは、FlexおよびJavaアプリケーション構築のためのテクノロジーの記事を参照してください。
クライアント/サーバーアーキテクチャ
FlexおよびJavaアプリケーションは、マルチティアアーキテクチャを使用します。この場合、プレゼンテーションティアがFlexアプリケーションで、ビジネスまたはアプリケーションティアがJava EEサーバーおよびコード、データティアがデータベースです。バックエンドコードは通常のJavaアプリケーションと同様に作成します。すなわち、オブジェクトをモデリングし、HibernateやEJB 3などのオブジェクトリレーショナルフレームワークを使用してデータベースを定義し、これらのオブジェクトを検索して操作するビジネスロジックを作成します。ビジネスティアは、FlexアプリケーションからのHTTPアクセスが可能である必要があり、プレゼンテーションティアとデータティアの間でデータを移動するために用いられます。
典型的なHTMLアプリケーションは、複数のページから構成され、ユーザーがそれらのページの間を移動する際に、アプリケーション自体(アプリケーションを構成するページと機能の集合)がステートを維持するために、アプリケーションデータを受け渡す必要があります。これに対して、Flexアプリケーションは本質的にステートフルです。Flexアプリケーションは1つのHTMLページ内にあるのでユーザーがそこから離れることはなく、Flash Playerによってレンダリングされます。Flexアプリケーションは、動的にビューを変更し、バックグラウンドのサーバーとの間で非同期にデータを送受信します。この際、アプリケーションインターフェイスは更新されますが、別のアプリケーションインターフェイスに切り替わることはありません(図1を参照)(JavaScriptのXMLHttpRequest APIで提供される機能に似ています)。
クライアント/サーバー通信
Flexアプリケーションは、バックエンドのサーバーと、直接のソケット接続またはHTTP(こちらの方が一般的)で通信します。Flexフレームワークには、HTTP経由でサーバーと通信するための3つのリモートプロシージャーコールAPI(HTTPService、WebService、RemoteObject)があります。これら3つのAPIはFlash PlayerのHTTP接続をラッピングしています。一方、Flash PlayerのHTTP接続はブラウザーのHTTPライブラリを使用します。Flexアプリケーションは、リモートデータベースに直接接続することはできません。
HTTPServiceを使用して、JSPまたはXMLファイル、RESTful Webサービス、またはHTTP経由でテキストを返すその他のサーバーファイルに対して、HTTP要求を実行します。エンドポイントURL、リスナー関数(HTTPService要求が成功または失敗の応答を返したときに呼び出されるコールバック関数)、返されるデータのデータ型(Flexアプリケーションで受け取った後どのようなデータ構造に変換するか)を指定します。データをテキストのままで処理してString変数に代入するか、XML、E4X、または従来のActionScriptオブジェクトに変換するかを指定できます。JSONが返された場合、Adobe Flex corelib*クラスパッケージを使用することにより、JSONをデシリアライズしてActionScriptオブジェクトに変換できます。SOAPベースのWebサービスを呼び出すには、HTTPService APIを使用するか、より特殊化されたWebService APIを使用します。後者の場合、SOAPフォーマットのテキストとActionScriptデータ型との間のシリアライズとデシリアライズが自動的に実行されます。
リモートプロシージャーコールを実行する3番目の方法は、RemoteObject APIを使用することです。これは、HTTP経由でバイナリアクションメッセージフォーマットを返すサーバーサイドJavaクラスのメソッドに対して、Flash Remoting要求を実行します。Flash Remotingの場合、データ転送フォーマットがバイナリなので、XML、JSON、SOAPといったデータ量の多いテキストベースのフォーマットに比べて、アプリケーションによるデータのロードが最大10倍高速になります(図2を参照)。したがって、可能な場合はこれを使用することをお勧めします。AMFと他のテキストベースのシリアライズテクノロジーの性能比較については、筆者が開発したCensus RIA Benchmarkアプリケーション*を参照してください。
ページ1/4 | ≪ | ≫ |