BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ アーティクル FlexおよびJavaアプリケーションのアーキテクチャ(page2)

FlexおよびJavaアプリケーションのアーキテクチャ(page2)

Flash Remoting

Flash Remotingは、クライアントサイドとサーバーサイドの機能の組み合わせによって実現される呼び出し-応答モデルであり、Flash Platformからサーバーサイドのオブジェクトに、ローカルオブジェクトと同様にアクセスするための方法です。アクションメッセージフォーマット(AMF)へのシリアライズ、デシリアライズ、クライアントとサーバーの間のデータ変換を処理することで、ActionScriptとサーバーサイドのデータ型の間でのトランスペアレントなデータ転送を実現します。

Flash Remotingがクライアントサイドで使用する機能はFlash Playerに組み込まれており、サーバーサイドで使用する機能は、一部のサーバー(ColdFusion、Zendなど)には組み込まれていますが、他のサーバーではインストールの必要があります(Java EEサーバーのBlazeDS*またはLiveCycle Data Services、.NETサーバーのWebORBまたはFluorineFX、PHPサーバーのZend Frameworkまたはamfphpなど)。BlazeDSおよびLiveCycle Data Servicesについて詳しくは、FlexおよびJavaアプリケーション構築のためのテクノロジーの記事を参照してください。

BlazeDSおよびLiveCycle Data Servicesは、メッセージベースのフレームワークを使用して、クライアントとサーバーの間でデータをやりとりします。これらは、リモーティング、プロキシ、メッセージングのサービスを提供し、LiveCycleの場合はさらにデータ管理サービスも提供します。Flexアプリケーションがサーバーに要求を送信すると、要求はサーバー上のエンドポイントに転送されます。エンドポイントから、要求はMessageBrokerに渡されます。これはBlazeDSおよびLiveCycle Data Servicesのエンジンであり、すべての要求を処理して、Javaオブジェクトのチェーンを通じて、呼び出すメソッドを持つJavaクラスまで送り届けます(図3を参照)。

図3.Flash Remotingのアーキテクチャ。

AMF

AMFは、ActionScriptオブジェクトをシリアライズするためのバイナリフォーマットであり、Flash Platformアプリケーションとリモートサービスとの間で、インターネット経由でデータを交換するために使用されます。このプロトコルはアドビによって公開されています。最新版はActionScript 3用のAMF 3仕様*です。ActionScriptからJavaへ、およびJavaからActionScriptへの変換の際のデータ型マッピングの一覧表は、こちらにあります。

カスタムオブジェクトまたは強く型指定されたオブジェクトの場合、パブリックプロパティ(getおよびsetメソッドが定義されているものを含む)がシリアライズされ、Flexアプリケーションからサーバーへ、またはサーバーからFlexアプリケーションへ、一般オブジェクトのプロパティとして送信されます。クライアントサイドとサーバーサイドの対応するオブジェクトの間のマッピングを可能にするには、JavaとActionScriptのクラスで同じプロパティ名を使用し、ActionScriptクラスで、[RemoteClass]メタデータタグを使用して、Javaオブジェクトに直接マップされるActionScriptオブジェクトを作成します。

次に示す例のEmployeeというActionScriptクラスは、サーバー上のサービスパッケージ内に存在するサーバーサイドのEmployeeというJava DTOにマップされます。

package valueobjects.Employee{ 
    [Bindable] 
    [RemoteClass(alias="services.Employee")] 
    public class Employee { 
        public var id:int;
        public var firstName:String; 
        public var lastName:String; 
        (...)
    } 
}

BlazeDSまたはLiveCycle Data Servicesのインストール

Flash RemotingをBlazeDSまたはLiveCycle Data Servicesと組み合わせて使用するには、サーバーサイドの必要なファイルをインストールして設定する必要があります。BlazeDSは、WARファイルでダウンロードして、Webアプリケーションまたはターンキーソリューションとして展開します。ターンキー用のダウンロードには、Tomcatのすぐに使用できるバージョンが含まれています。この中では、BlazeDSのWARファイルが既に展開され、様々なサンプルアプリケーションとともに設定されています。同様に、LiveCycle Data Servicesに関しては、LiveCycleを統合されたTomcatサーバーとしてインストールするか、LiveCycle Data Services Webアプリケーションとしてインストールするかを、インストーラーで選択できます。

どちらの場合も、blazedsまたはlcds(通常は後ろにバージョン番号が付きます)という名前のWebアプリケーションが作成されます。このアプリケーションを自分のJavaコードで変更してビルドすることもできますが、もっと一般的な方法としては、blazedsまたはlcds Webアプリケーションに含まれるJARファイルをコピーして、サーバー上の既存のJava Webアプリケーションに追加します(図4を参照)。

 

図4.必要なBlazeDSまたはLiveCycle Data Servicesファイル。

web.xmlの変更

ファイルを別のWebアプリケーションにコピーする場合、web.xmlファイルを変更して、HttpFlexSessionに対するセッションリスナーと、MessageBrokerに対するサーブレットマッピングを定義する必要があります。MessageBrokerは、すべての要求を処理して、サーバーサイドの適切なJavaエンドポイントに渡す役割を果たします。これらは、元のblazedsまたはlcds Webアプリケーションのweb.xmlファイルからコピーして貼り付けることができます。

<!-- Http Flex Session attribute and binding listener support -->
<listener>
   <listener-class>flex.messaging.HttpFlexSession</listener-class>
</listener>
<!-- MessageBroker Servlet -->
<servlet>
   <servlet-name>MessageBrokerServlet</servlet-name>
   <display-name>MessageBrokerServlet</display-name>
   <servlet-class>flex.messaging.MessageBrokerServlet</servlet-class>
   <init-param>
      <param-name>services.configuration.file</param-name>
        <param-value>/WEB-INF/flex/services-config.xml</param-value>
   </init-param>
   <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
   <servlet-name>MessageBrokerServlet</servlet-name>
   <url-pattern>/messagebroker/*</url-pattern>
</servlet-mapping>

オプションで、RDSDispatchServletに対するマッピングをコピーして貼り付ける(およびコメントを外す)こともできます。これは、サーバーサイドのクラスを分析して対応するクライアントサイドコードを生成する、Flash Builder 4のデータサービス作成機能を使ったRDSアクセスに用いられます。Adobeアプリケーションモデリングテクノロジーについて詳しくは、FlexおよびJavaアプリケーション構築のためのテクノロジーの記事と、チュートリアルBlazeDSリモーティングターゲットに接続するFlexアプリケーションのFlash Builder 4による開発*を参照してください。

<servlet>
   <servlet-name>RDSDispatchServlet</servlet-name>
   <display-name>RDSDispatchServlet</display-name>
   <servlet-class>flex.rds.server.servlet.FrontEndServlet</servlet-class>
   <init-param>
       <param-name>useAppserverSecurity</param-name>
       <param-value>false</param-value>
   </init-param>        
   <load-on-startup>10</load-on-startup>
</servlet>
 
<servlet-mapping id="RDS_DISPATCH_MAPPING">
   <servlet-name>RDSDispatchServlet</servlet-name>
   <url-pattern>/CFIDE/main/ide.cfm</url-pattern>
</servlet-mapping> 

services-config.xmlの確認

Flash Remotingでは、クライアントがサーバーに要求を送り、サーバーがそれを処理して、結果を含む応答をクライアントに返します。これらの要求を設定するには、Webアプリケーションの/WEB-INF/flex/フォルダーにあるservices-config.xmlおよびremoting-config.xmlファイルを変更します。

services-config.xmlファイルは、要求の実行に使用できる様々なチャネルを定義します。各チャネル定義は、要求に使用するネットワークプロトコルおよびメッセージフォーマットと、メッセージを届けるサーバー上のエンドポイントを指定します。Javaベースのエンドポイントは、メッセージをプロトコル固有の方法で変換し、Java形式でMessageBrokerに渡します。MessageBrokerは、メッセージを適切な宛先サービスに送ります(これらを定義する方法はこの後で説明します)。

<channels>
   <channel-definition id="my-amf" class="mx.messaging.channels.AMFChannel">
      <endpoint url="http://{server.name}:{server.port}/{context.root}/messagebroker/amf" class="flex.messaging.endpoints.AMFEndpoint"/>
   </channel-definition>
   <channel-definition id="my-secure-amf" class="mx.messaging.channels.SecureAMFChannel">
   <endpoint url="https://{server.name}:{server.port}/{context.root}/messagebroker/amfsecure"
      class="flex.messaging.endpoints.SecureAMFEndpoint"/>
   </channel-definition>
     (...)
</channels>

宛先の定義

remoting-config.xmlファイルで、MessageBrokerがメッセージを渡す宛先(Javaクラスへの名前付きマッピング)を定義します。sourceプロパティを、ソースパスに存在する引数なしのコンストラクターを持つJava POJOの完全修飾クラス名に設定します。このためには通常、これをWebアプリケーションの/WEB!NF/classes/ディレクトリに置くか、/WEB!NF/lib/ディレクトリにあるJARファイルに入れます。Java Naming and Directory Interface(JNDI)内に格納されているEJBやその他のオブジェクトにアクセスするには、JNDI内のオブジェクトを検索してそのメソッドを呼び出すサービスファサードクラスである宛先のメソッドを呼び出します。

ステートレスまたはステートフルJavaオブジェクトにアクセスするには、scopeプロパティをapplication、session、request(デフォルト)のいずれかに設定します。参照されるサーバーサイドオブジェクトのインスタンス化と管理は、BlazeDSまたはLiveCycle Data Servicesによって行われます。

<service id="remoting-service" class="flex.messaging.services.RemotingService">
    <adapters>
        <adapter-definition id="java-object" class="flex.messaging.services.remoting.adapters.JavaAdapter" default="true"/>
    </adapters>
    <default-channels>
        <channel ref="my-amf"/>
    </default-channels>
    <destination id="employeeService">
        <properties>
           <source>services.EmployeeService</source>
           <scope>application</scope>
        </properties>
    </destination>
</service>    

個々の宛先に対するチャネルを指定することもできます。

<destination id="employeeService " channels="my-secure-amf">

最後に、FlexアプリケーションでRemoteObjectインスタンスを定義する際に、これらの宛先を使用します。

<s:RemoteObject id="employeeSvc" destination="employeeService"/>

ページ2/4

 

 

この記事に星をつける

おすすめ度
スタイル

BT