ひがやすを技術ブログ

電通国際情報サービスのプログラマ

FlexのFlash Remoting Component

Flexでは、クライアント側のFlash Remoting ComponentもFlashの時と動作が変わっているようです。
AMFGatewayからFlex(Flash)側にJavaBeansを返すときに、Object or CustomClassとして返す方法があるのですが、CustomClassとして返してしまうと、Flex側に対応するクラスがないとバインディングに失敗します。
Objectとして返し、_remoteClassプロパティを設定するというやり方が正解のようです。そうするとFlex側に対応するクラスがあるときちんとクラスにマッピングしてくれますし、存在しない場合は、通常のオブジェクトになり問題なく処理できます。オブジェクトになってしまうとJavaに送るときには、特定の_remoteClass宣言したクラスのオブジェクトに変換しなければなりませんが。
Flex側でクラスとして受け取る場合は、そのクラスで変数を定義しておく必要があります。例え、その変数は、使わなくても。

var selectedItem:examples.flex.Product;

あるいは、

<Product xmlns="examples.flex.*"/>

まとめると、FlexJavaで強く型付けされたオブジェクトでやり取りするためには、class定義で_remoteClassプロパティを定義します。FlexJavaの完全クラス限定名は同じにします。

class examples.flex.Product {
var _remoteClass = "examples.flex.Product";
...
}

Javaとデータを送受信するMXMLでは、対応するクラスの変数を定義しておきます。
サーバでは、_remoteClassをきちんと処理できるRemoting Gateway(Flex純正、S2AMF、S2OpanAMF(?))を使います。


マニュアルでは、_remoteClassを使うと軽く触れてるだけなので、あれで直ぐに使える人はほとんどいない予感。