|
Integration_Flex
en , ja FlexからT2を使うときの詳細ドキュメントです. FlexとT2を使うT2でFlexを使う場合にはAMF通信をするのがベストです.AMFでの通信はJSONの4倍程度の速度向上が見込めます.
T2ではこのAMF通信を簡単に行うための機能(T2AMF)が提供されており、ほぼ設定レス で通信することができます. AMF通信を使うためにはT2ではライブラリとしてはBlazeDSかT2独自の実装を使います. どちらにするかは原則クラスパスで判断できます.例えばBlazeDSのjarを追加しておけば、BlazeDSで動きます. お知らせT2のAMF通信では現在のところリモーティング機能のみサポートしています.サーバプッシュはサポートしていません. T2AMFの概要図
サンプルFlex側での設定Flex側では、RemoteObjectで通信します. RemoteObjectで、destinationはPageクラスのurl名を入れます.下記のmxmlだとamdtestというURLを指定します. RemoteObjectのendpoint属性はは特に指定はありませんが必須なので何か値を入れておきます.慣習的にここでは"t2.amf"とします. mxml <mx:RemoteObject id="remote" destination="amftest" endpoint="t2.amf"/> ActionScriptでは普通にRemoteObjectを使って通信します. 下記のコードは非常にシンプルにした通信コードです. ActionScript public function creationCompleteHandler(e:FlexEvent):void
{
document.button.addEventListener(MouseEvent.CLICK, function(e:MouseEvent):void {
var token:AsyncToken = document.remote.findAll();
token.addResponder(new AsyncResponder(resultHandler, faultHandler));
});
}
public function resultHandler(e:ResultEvent, o:Object=null):void
{
var people:ArrayCollection = e.result as ArrayCollection;
document.peopleGrid.dataProvider = people;
}
public function faultHandler(e:FaultEvent, o:Object=null):void
{
Alert.show("error : " + e.message);
}
Java側での設定Java側でも特に設定等は必要なく、T2のPageクラスを作れば良いだけです. Flexからのリクエストを受け取るメソッドにはアノテーションとしては@Amfをつけておきます. @Page("amftest")
public class AmfTestPage {
@Amf
public Navigation findAll() {
List<Person> ret = new ArrayList<Person>();
//some logic here
return AmfResponse.to(ret);
}
}これだけでFlex<=>Java間の通信が可能になります.非常に簡単だということがわかってもらえたのではないでしょうか. T2AMF仕様T2は独自でAMF解釈することが出来る機能T2AMFをもっており、BlazeDSを使わなくてもAMFを解釈して、Pageクラスのメソッドを呼び出せます. ここではT2AMFの仕様を記載します. 仕組みAMF通信を処理するためには大きく分けて以下の部分からなります. 変換ルールT2AMFではActionScriptとJavaの間の変換は以下のようなマッピングで行っています.
拡張ポイントT2AMFでは、以下の2つの拡張ポイントが用意されています. AmfMessageProcessorはT2AMFにおけるエンジン部分です.これを置き換える事によって、大幅にAMFの処理構造を変えることが出来ます. 特に必要がない場合はこのインタフェースの実装クラスを置き換える必要は出てこないでしょう.
一方AmfConverterはActionScriptとJavaの間での型変換を司るインタフェースです. 基本的な型変換はAmfMessageProcessorがAMFフォーマットを解析するプロセスの中で行われます(上記表参照). その他のある特定のケースにのみ対応する場合に、このAmfConverterを実装する事で対応できます. デフォルトでは以下のコンバータが適用されています.
拡張ポイントの適用拡張クラスの適用は簡単です.お使いのDIコンテナに登録して、それ用のContainerAdapterを使うだけです. SimpleContainerAdapterを使っている場合には、web.xmlでt2.components項目に登録してください. <filter> <filter-name>t2</filter-name> <filter-class>org.t2framework.t2.filter.T2Filter</filter-class> <init-param> <param-name>t2.rootpackage</param-name> <param-value>examples.page</param-value> </init-param> <init-param> <param-name>t2.exclude-resources</param-name> <param-value>css, js, png, gif, jsp, jar</param-value> </init-param> <init-param> <param-name>t2.components</param-name> <param-value>org.yourdomain.yourservice.YourAmfConverterImpl, [other plugins or extensions here]</param-value> </init-param> </filter> | |