データサービスへのアクセスの概要Flex のデータアクセスと他のテクノロジとの比較Flex におけるデータソースやデータの操作は、ユーザーインターフェイスに HTML を使用しているアプリケーションとは異なります。 クライアント側の処理とサーバー側の処理JSP とサーブレット、ASP、PHP、CFML などを使用して作成される HTML テンプレートとは異なり、Flex ではクライアントコードをサーバーコードから分離します。アプリケーションのユーザーインターフェイスは、バイナリの SWF ファイルにコンパイルされて、クライアントに送信されます。 アプリケーションがデータサービスに対して要求を行うとき、SWF ファイルは再コンパイルされず、ページ更新も不要です。リモートサービスはデータのみを返します。Flex は、返されたデータをクライアントアプリケーションのユーザーインターフェイスコンポーネントにバインドします。 例えば、Flex では、ユーザーがアプリケーションの Button コントロールをクリックすると、クライアント側のコードが Web サービスを呼び出します。Web サービスからの結果データは、ページを更新しなくてもバイナリ SWF ファイルに返されます。そのため、結果データはアプリケーションの動的コンテンツとして使用できます。 <?xm l version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/halo" minWidth="1024" minHeight="768" xmlns:employeesservice="services.employeesservice.*" xmlns:valueObjects="valueObjects.*">
<fx:Declarations>
<s:WebService
id="RestaurantSvc"
wsdl="http://examples.adobe.com/flex3app/restaurant_ws/RestaurantWS.xml?wsdl" />
<s:CallResponder id="getRestaurantsResult"
result="restaurants = getRestaurantsResult.lastResult as Restaurant"/>
</fx:Declarations>
<fx:Script>
<![CDATA[
import mx.controls.Alert;
protected function b1_clickHandler(event:MouseEvent):void {
getRestaurantsResult.token = RestaurantWS.getRestaurantss();
}
]]>
</fx:Script>
. . .
<s:Button id="b1" label="GetRestaurants" click="button_clickHandler(event)"/>
この Flex の例を、次に示す例と比較してください。次の例では、JSP カスタムタグを使用して Web サービスを呼び出す JSP コードを示します。ユーザーが JSP を要求すると、クライアントではなくサーバー上で Web サービスの要求が行われます。その結果を使用して HTML ページのコンテンツが生成されます。アプリケーションサーバーでは、HTML ページ全体を再生成してからユーザーの Web ブラウザーに返送します。 <%@ taglib prefix="web" uri="webservicetag" %>
<% String str1="BRL";
String str2="USD";%>
<!-- Call the web service. -->
<web:invoke
url="http://www.itfinity.net:8008/soap/exrates/default.asp"
namespace="http://www.itfinity.net/soap/exrates/exrates.xsd"
operation="GetRate"
resulttype="double"
result="myresult">
<web:param name="fromCurr" value="<%=str1%>"/>
<web:param name="ToCurr" value="<%=str2%>"/>
</web:invoke>
<!-- Display the web service result. -->
<%= pageContext.getAttribute("myresult") %>
データソースへのアクセスFlex と他の Web アプリケーションテクノロジとのもう 1 つの違いは、Flex ではデータソースと直接通信しないことです。リモートサービスに接続して、サーバー側のデータソースとやり取りするには、データアクセスコンポーネントを使用します。 次の例は、データソースに直接アクセスする ColdFusion ページを示しています。 ...
<CFQUERY DATASOURCE="Dsn"
NAME="myQuery">
SELECT * FROM table
</CFQUERY>
...
Flex で同様の機能を実現するには、HTTPService、Web サービスまたは RemoteObject コンポーネントを使用して、データソースから結果を返すサーバー側のオブジェクトを呼び出します。 イベント、サービスの呼び出しおよびデータバインディングFlex はイベント駆動型のテクノロジです。ユーザーのアクションまたはプログラムのイベントによって、サービスへのアクセスをトリガーできます。例えば、ユーザーによるボタンのクリックは、サービスの呼び出しをトリガーするために使用できるユーザーアクションイベントです。プログラムのイベントの例としては、アプリケーションによる DataGrid などのユーザーインターフェイスコンポーネントの作成の完了などがあります。DataGrid の creationComplete イベントを使用すると、リモートサービスを呼び出して、DataGrid に値を設定できます。 Flex では、サービスの呼び出しは非同期に行われます。クライアントアプリケーションは、データが返されるのを待つ必要はありません。非同期でのサービスの呼び出しは、大きいデータセットを取得または更新するときに役立ちます。データが取得または更新されるまでクライアントアプリケーションがブロックされることはありません。 サービスの呼び出しから返されたデータは、サービスの呼び出しと関連付けられた CallResponder に格納されます。その後、ユーザーインターフェイスコンポーネントは、データバインディングを使用して、返されたデータを CallResponder から取得します。 Flex のデータバインディングを使用すると、ユーザーインターフェイスコンポーネントをデータソースで動的に更新できます。例えば、Flex コンポーネントは、text 属性を CallResponder の lastResult 属性と関連付けることができます。CallResponder のデータが変化すると、Flex コンポーネントは自動的に更新されます。 また、Flex では双方向のデータバインディングも実装されています。双方向のデータバインディングでは、Flex コンポーネントまたはデータソースでデータが変更されると、対応するデータソースまたは Flex コンポーネントが自動的に更新されます。双方向のデータバインディングは、フォームコンポーネントまたは Flex データコンポーネントに対するユーザー入力でリモートデータを更新するときに便利です。 Flash Builder でのデータサービスへのアクセスFlex Builder 3 では、Flex データアクセスコンポーネントを使用して、データサービスへのリモートプロシージャコールを実装します。Flash Builder を使用すると、このプロセスが簡略化されます。 Flash Builder には、次のような機能を持つウィザードやその他のツールが用意されています。
サービスにアクセスするための Flash Builder のワークフローFlash Builder を使用して、データサービスにアクセスするアプリケーションを作成するときは、次のワークフローを使用します。
Flash Builder でサポートされるサービスの拡張Flash Builder のウィザードとツールは、次の種類のサービス実装へのアクセスをサポートします。
Ruby on Rails などの他の種類のサービスをツールでサポートする必要がある場合は、Flash Builder の実装を拡張できます。Flash Builder Extensibility Referenceを参照してください。 データアクセスコンポーネントデータアクセスコンポーネントを使用すると、クライアントアプリケーションからネットワーク上の操作およびサービスを呼び出すことができます。データアクセスコンポーネントでは、リモートプロシージャコールを使用してサーバー環境とやり取りをします。データアクセスコンポーネントには、RemoteObject コンポーネント、HTTPService コンポーネント、WebService コンポーネントの 3 つがあります。 データアクセスコンポーネントは、外部データへのアクセス手段として呼び出しと応答モデルが適切な選択肢となるクライアントアプリケーション向けに設計されています。これらのコンポーネントを使用して、クライアントはリモートサービスに非同期要求を発行できます。リモートサービスでは要求を処理した後、データをアプリケーションに返します。 データアクセスコンポーネントはリモートサービスを呼び出します。その後、サービスからの応答データを、ActionScript オブジェクトまたはサービスから返されたその他のフォーマットに格納します。クライアントアプリケーションではデータアクセスコンポーネントを使用して次の 3 種類のサービスを操作できます。
Adobe® Flash® Builder™ には、データアクセスコンポーネントの実装をサービスラッパーにラップするためのウィザードとツールが用意されています。サービスラッパーはデータアクセスコンポーネントの機能をカプセル化します。そのため、低レベルの実装の大部分はユーザーからは見えません。これにより、サービスの実装とサービスにアクセスするクライアントアプリケーションの構築に集中することができます。Flash Builder を使用してデータサービスにアクセスする方法について詳しくは、Flash Builder によるデータ中心型アプリケーションの構築を参照してください。 サービスへのアクセスの提供Adobe Flash Player のデフォルトでは、アプリケーションの読み込みに使用されたものと完全には一致しないホストへのアクセスがブロックされます。要求をプロキシする際に Adobe LiveCycle® Data Services を使用しない場合は、アプリケーションをホストするサーバー上で HTTP サービスまたは Web サービスを実行するか、HTTP サービスまたは Web サービスをホストするリモートサーバーで crossdomain.xml ファイルを定義する必要があります。crossdomain.xml ファイルは、サーバーのデータとドキュメントをどのドメインの SWF ファイルが利用できるかを示す XML ファイルで、特定のドメインのみを指定することも、すべてのドメインを指定することもできます。crossdomain.xml ファイルは、アプリケーションの接続先になるサーバーの Web ルートに存在している必要があります。 HTTPService コンポーネントHTTPService コンポーネントを使用すると、HTTP の GET 要求または POST 要求を送信でき、HTTP 応答のデータをクライアントアプリケーションに含めることもできます。Flex を使用してデスクトップアプリケーションを構築している場合(Adobe AIR® で実行している場合)は、HTTP PUT と DELETE がサポートされます。 Adobe LiveCycle Data Services または BlazeDS を使用している場合は、HTTPProxyService を使用して、追加の HTTP メソッドを使用できます。HTTPProxyService を使用すると、GET、POST、HEAD、OPTIONS、PUT、TRACE、DELETE 要求を送信できます。 HTTP 要求を受け入れて応答を送信する任意の HTTP URI を HTTP サービスとして使用できます。一般に、この種のサービスは REST 形式の Web サービスとも呼ばれます。REST は Representational State Transfer の略で、分散されたハイパーメディアシステムのためのアーキテクチャによる形式です。 HTTPService コンポーネントは、同じ機能を SOAP Web サービスやリモートオブジェクトサービスとしては公開できない場合に役立ちます。例えば、HTTPService コンポーネントを使用すると、Web サービスまたは Remoting Service の宛先として使用できない JavaServer Pages(JSP)、サーブレットおよび ASP ページとやり取りすることができます。 HTTPService オブジェクトの send() メソッドを呼び出すと、指定した URI に対して HTTP 要求が実行され、HTTP 応答が返されます。オプションで、指定した URI に引数を渡すこともできます。 Flash Builder には、HTTP サービスにインタラクティブに接続できるようにするワークフローが用意されています。詳しくは、HTTP サービスへのアクセスを参照してください。 WebService コンポーネントWebService コンポーネントを使用すると、SOAP Web サービスにアクセスできます。SOAP Web サービスはメソッドを備えたソフトウェアモジュールです。Web サービスのメソッドは、一般に操作と呼ばれます。Web サービスのインターフェイスは、Web Services Description Language(WSDL)を使用して定義されます。Web サービスは、様々なプラットフォーム上で実行されているソフトウェアモジュールが相互に通信するための標準規格に準拠しています。Web サービスについて詳しくは、World Wide Web Consortium の Web サイト(www.w3.org/2002/ws/)の、Web サービスのセクションを参照してください。 クライアントアプリケーションは、URL として使用可能な Web Services Description Language(WSDL)ドキュメントでインターフェイスを定義する Web サービスとやり取りできます。WSDL は、Web サービスで認識できるメッセージ、それらのメッセージへの応答の形式、Web サービスがサポートするプロトコル、およびメッセージの送信先を記述するための標準形式です。 Flex では、www.w3.org/TR/wsdlに記載されている WSDL 1.1 がサポートされています。Flex では、RPC エンコードとドキュメントリテラルの両方の Web サービスがサポートされています。 Flex では、SOAP メッセージ形式で HTTP 経由でトランスポートされる Web サービスの要求と結果がサポートされています。SOAP で提供されている XML ベース形式の定義を使用すると、Flex で構築されたアプリケーションなどの Web サービスクライアントと Web サービスの間で構造化および型指定された情報を交換できます。 Web サービスが標準として確立されている環境では、WebService コンポーネントを使用して SOAP 準拠の Web サービスに接続できます。WebService コンポーネントは、エンタープライズ環境内にあるものの、Web アプリケーションのソースパスで使用できるとは限らないオブジェクトにも役立ちます。 Flash Builder には、Web サービスにインタラクティブに接続できるようにするワークフローが用意されています。詳しくは、Web サービスへのアクセスを参照してください。 RemoteObject コンポーネントリモートオブジェクトサービスを使用すると、REST 形式のサービスまたは Web サービスの場合とは異なり、XML としてフォーマットすることなく、ネイティブフォーマットでビジネスロジックに直接アクセスできます。これにより、既存のロジックを XML として公開するために必要な時間を節約できます。リモートオブジェクトサービスのもう 1 つの利点は、回線での通信の速度です。データの交換はやはり HTTP または https を介して行われますが、データ自体はバイナリ表現にシリアライズされます。RemoteObject コンポーネントを使用すると、回線を通過するデータが少なくなり、クライアント側でのメモリの使用量が減り、処理時間が短くなります。 サーバー上のデータにアクセスするときは、ColdFusion、PHP、BlazeDS、Adobe LiveCycle Data Services でサーバー側の型指定を使用できます。クライアントアプリケーションは、指定されたオブジェクトのメソッドのリモート呼び出しにより、Java オブジェクト、ColdFusion コンポーネント(内部的には Java オブジェクト)または PHP クラスに直接アクセスします。サーバー上のオブジェクトは、それぞれのネイティブデータ型を引数として使用し、その引数でデータベースをクエリし、ネイティブデータ型の値を返します。 サーバー側の型指定が使用できない場合、Flash Builder にはクライアント側の型指定を実装するためのツールがあります。サービスから返されるデータの型を設定および定義すには、Flash Builder を使用します。クライアント側の型指定を使用すると、クライアントアプリケーションからデータベースにクエリを送信して、適切な型のデータを取得できます。サービスによって返されるデータの型が定義されていないすべてのサービスに対し、クライアント側での型指定が必要です。 Flash Builder には、リモートオブジェクトサービスにインタラクティブに接続できるようにするワークフローが用意されています。詳しくは、データサービスへの接続を参照してください。 |
|