My favorites | Sign in
t-2
Project Home Downloads Wiki Issues Source
READ-ONLY: This project has been archived. For more information see this post.
Search
for
Integration_Flex  

en, ja
Updated Aug 18, 2009 by shinpei.ohtani@gmail.com

FlexからT2を使うときの詳細ドキュメントです.

FlexとT2を使う

T2でFlexを使う場合にはAMF通信をするのがベストです.AMFでの通信はJSONの4倍程度の速度向上が見込めます. T2ではこのAMF通信を簡単に行うための仕組みが提供されており、ほぼ設定無しで通信することができます.
AMF通信を使うためにはT2ではライブラリとしてはBlazeDST2独自の実装を使います. どちらにするかは原則クラスパスで判断できます.例えば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通信を処理するためには大きく分けて2つの部分からなります.
  • AMF通信をするためのpingポストとその返信
  • 実際のHTTPのボディ部分からAMFフォーマットをデシリアライズして、Javaのクラスに変換する
  • T2の既存の仕組みにのせて、Pageクラスのアクションメソッドの引数としてオブジェクトを渡す
  • T2のアクションメソッドの戻り値からAmfResponse#to()によって戻されたオブジェクトを再度AMFフォーマットにシリアライズして、レスポンスに書く

変換ルール

T2AMFではActionScriptとJavaの間の変換は以下のようなマッピングで行っています.

ActionScriptT2での内部変換Pageクラスで受け取れる型詳細
booleanBooleanboolean/Boolean
intintまたはIntegerint/Integer
uintintまたはIntegerint/Integer
NumberDoubleint/short/long/double/float

Integer/Short/Long/Double/Float

BigInteger/BigDecimal
StringStringString
Datejava.util.Datejava.util.Date/java.sql.Date/java.util.Calendar
ArrayObjectObject
mx.collections.ArrayCollectionjava.util.List< Object >java.util.List< Object >
カスタムクラスRemoteClassで指定された型RemoteClassで指定された型
XMLorg.w3c.dom.Documentorg.w3c.dom.Document
Mapjava.util.Map<String, Object>java.util.Map<String, Object>
flash.utils.IExternalizablejava.io.Externalizablejava.io.ExternalizableJava側にデフォルトコンストラクタが必須です.
それ以外の型org.t2framework.t2.format.amf3.type.Amf3Objectorg.t2framework.t2.format.amf3.type.Amf3ObjectAmf3ObjectはHashMapの子クラスです

拡張ポイント

  • org.t2framework.t2.format.amf.spi.AmfMessageProcessor
  • org.t2framework.t2.format.amf.spi.AmfConverter
TODO.

TOPに戻る

Powered by Google Project Hosting