nod::ぶろぐ:RIA::Flex/AIR/Flash

FlashやFlex,(Ajax),S2Flex2,ActionScript3,yui-frameworks,Akabanaプロジェクトなどのメモ帳

AS3とJavaObjectのマッピングについて再度考える

S2Flex2のgateway(Beta1)とmxmlのタグを利用することでdFlex Enterprise Services 2(FES2)がなくても、これまでのAMF0を利用してJavaObjectとの連携ができるようになりました。

AS3とJavaObjectのマッピングはRemoteClassアノテーションを使うことで自動的にマッピングすることができます


[RemoteClass(alias=&qout;examples.flex2.dto.AddDto&qout;)]

または、registerClassAliasを利用しても同じことになります。

registerClassAlias(&qout;examples.flex2.dto.AddDto&qout;,examples.flex2.dto.AddDto);

AS3側で上記の記述をセットすることでJavaObjectにマッピングすることができます。
しかし、サーバから取得したオブジェクトは、JavaObjectからAS3に変換するときに型情報が失われてAS側ではObject型になってしまいます。

この受け取り側のマッピングについていろいろ実験していましたが、
結局解決していません。(-_-;)

同じAS3のオブジェクトを渡してもRemoteObjectタグでFES2と接続すると、JavaObjectとAS3のObjectがマッピングされて、CustomClassとして受け取ることができました。

接続方法 プロトコル 接続先 結果
mx:RemoteObjectタグ AMF3 FES2

〇(型情報を保持)

s2:S2Componentタグ AMF0 FES2 ×(型情報がなくなってObject型になる。)
s2:S2Componentタグ AMF0 S2Flex2Gateway ×(型情報がなくなってObject型になる。)

上記の例からすると、AMF0での接続の場合は型情報が失われてしまい、Objectクラスのオブジェクトになってしまうということになります。
または、s2:S2Componentの接続方法に問題があるのかもしれません。

S2Flex2Beta1リリースからずっと気になっていろいろ試しているのですがいまだに解決していません。

たとえば...

・JavaObject側にSerializableをつけてみる
・AS3にTypeという名前の属性をつけてみる

いまのところ、型情報にあったものを返す方法がわかりません...
CustomClassで返してくれる方法があるのでしょうか...

RemoteClassアノテーション
ひがさんのエントリーです。
http://d.hatena.ne.jp/higayasuo/20060216#1140085882

[Flex]PrettyAMF(Flex Coder)
コメントで議論されています。
http://d.hatena.ne.jp/sato-shi/20060220/p1#c

Posted by nod at 2006年02月27日 20:44 | コメント (15) | トラックバック (0) | Clip!! | Clip!! | このエントリーを含むはてなブックマーク |digg it! |del.icio.us it!

この記事に対するコメント

今日、AMF3の解析してみました。
そこで、型情報が保持できる場合でも、調べてみたいのですが、nodさんは、どのようにして試されたのでしょうか?
ご教授おねがいします><。

Posted by: arkw at 2006年02月28日 20:33

追記ですいません><

前まであった、S2Adapter?ってクラスは、ダウンロードできないんでしょうか?

Posted by: arkw at 2006年02月28日 21:24

arkwさん、 AMF3の解析できたんですね。すごい!
このエントリーにある接続テストは、開発中のs2flex2を使いました。
http://s2flex2.sandbox.seasar.org/ja/
上記にある、S2Flex2 Example Beta1にある足し算のサンプルで試しています。

FES2は同じ足し算をRemoteObjectタグに替えて試しました。

Posted by: nod at 2006年03月01日 08:31

ありがとうございます!

AMF3の解析結果は、型保持が確認できたらまとめて、アップしようかと思ってます。
まだ一部謎な部分がありますけど^^;

FES2の場合ですが、サーバ側は、どうなさってますかぁ?

S2Adapterってどこかで取得できますか?

Posted by: arkw at 2006年03月01日 09:52

FES2のサーバ側は、同じ足し算を使っています。

1.tomcatプロジェクト作成
 新規tomcatプロジェクトを作成します。"fes2sample"という名前で
 作成してhttp://localhost:8080/fes2sampleでアクセスできるようにしました。

2.fes2サンプル/足し算サンプルを展開
 fes2を簡単に動かしたかったので、fes2のサンプル"samples.war"をfes2sampleプロジェクト
 に展開しました。
 あわせて、足し算に使った、DtoとロジックをWEB-INF/src以下に配置して足し算サンプルが
 動作するようにします。

3.flex-enterprise-services.xmlを修正
 WEB-INF/flex/flex-enterprise-services.xmlのendpointの設定を変更します。
my-amfのendpointをfes2sampleにあわせて変更しました。
 http://{server.name}:8080/fes2sample/messagebroker/amf

4.flex-remoting-service.xmlにaddServiceを追加
 destination id=&qout;addService&qout;を追加しました。
sourceにexamples.flex2.service.impl.AddServiceImplを直接指定しています。

5. mxmlを変更
  s2:S2Componentをmx:RemoteObjectに変更して、AMF3で呼び出すようにしました。

参考までにFES2確認に使ったものを以下にアップしました。
http://www.noridon.net/weblogs/flex2/srcview/

これぢゃあだめだろぉーなどのツッコミがあればかんげーします。


S2Adapterについては、お昼に書きます。しばしお待ちを~

Posted by: nod at 2006年03月01日 10:34

ありがとうございます。
ホント感謝です☆

早速試してみたところ、成功しました。
デバック&解析したところ・・・
FESでは、flash.messaging.messageパッケージのクラスにデータを入れ込んで、やり取りしてるみたいです。
それも2パスです。
ちょっと複雑になってるみたいです。

詳細は、おって報告します。

Posted by: arkw at 2006年03月01日 12:38

S2AdapterってCFAdapterに含まれているJavaAdapterを元に作成したものですか?
S2Flex2はBeta1になったときにAMF0のGatewayに生まれ変わりました。

必要なら探して見ますけど..

Posted by: nod at 2006年03月01日 12:46

はい^^;
CFAdapterをもとに作ったクラスです。
今頃すいません><

FES2の検証のため、S2Adapterが必要になったのです。
よかったら、御願いします(*- -)(*_ _)ペコリ

Posted by: arkw at 2006年03月01日 13:21

解決しました。
AS3とJavaObjectのマッピングは、AMF3で接続を行えば、OKみたいです。

Posted by: arkw at 2006年03月01日 14:28

AMF3を実装してみて、最終調整してみたと思います。

Posted by: arkw at 2006年03月01日 18:04

arkwさん、ぜひ、S2Flex2プロジェクトに参加して、AMF3のGatewayを作ってみませんか。

Posted by: ひが at 2006年03月01日 18:24

是非、参加させて下さい。

まだ、何箇所か未解析の部分がありますが、
まずは、AMF0がベースに、AMF3データ部の実装をしようかと思っているところです。

Posted by: arkw at 2006年03月01日 18:54

それでは、nodさん、arkwさんにどうやればプロジェクトに参加できるかの案内をお願いします。

Posted by: ひが at 2006年03月01日 19:45

参加案内了解いたしました。>ひがさん

案内メールを送りました>arkwさん

Posted by: nod at 2006年03月01日 23:37

案内メールありがとうございます。

S2Flex2プロジェクトへの参加に必要な情報を
gmailからメールいたしました。

宜しくお願いします。

Posted by: arkw at 2006年03月02日 10:30

コメントを投稿する




保存しますか?



この記事のトラックバックURL


この記事に対するトラックバック

この記事に対するトラックバックはまだありません。



Flex.org - The Directory for Flex Get Adobe Flash Player Made with dreamweaverMade with fireworksPowered by Movable Type 3.36Powered by Wandering Wind
Copyright : [Articles] (C) nod::ぶろぐ:RIA::Flex/AIR/Flash All Rights Reserved.
[Comments/Trackbacks] ... Authors of those have rights.