これまでのプログラムで、Java+BlazeDS → AIR(Flex) の場合は、enumからテキストに変換さていましたが、AIR側からのテキストは、Javaでうまくenumとして受け取ってくれません。
ちょっと古いですが、こちらによると、
http://flexblog.faratasystems.com/2007/09/16/adding-enum-support-to-flex-amf-protocol
もともと、AMF(BlazeDSで使う通信フォーマット)は、Java1.4に対応して作られており、1.5で追加されたenumには対応していないとのこと。
このページでは、LCSD(有料版BlazeDSのようなもの)での解決策は記されていますが、BlazeDSとは別物のようでそのまま利用はできないようです。
そこで、オープンソースのwrenched http://code.google.com/p/wrenched/ というものをみつけて利用してみようとしましたが、正直使い方があまり良くわかりませんでした。
どうしようかと思っていたところ、このページにたどり着きようやく解決しました。
https://bugs.adobe.com/jira/browse/BLZ-17
単純な話、ActtionScript でもきちんと書けば enum のようになるということですな。
JobStatus.as
[RemoteClass(alias=“jp.co.bzc.biz.xxxx.model.JobStatus”)] public class JobStatus { public static const 未着手:JobStatus = new JobStatus("未着手"); public static const 着手:JobStatus = new JobStatus("着手"); public static const 完了:JobStatus = new JobStatus("完了"); public var val:String; public function JobStatus(v:String="unset"){ val = v; } public function equals(other:JobStatus):Boolean{ return other.val == val; } public function toString():String{ return val; } public static function getAll():ArrayCollection{ return new ArrayCollection([未着手,着手,完了]); } }
UserService.java に下記を加えます。
static { PropertyProxyRegistry.getRegistry().register(Enum.class, new EnumProxy()); }
EnumProxyは、上記adobeのバグサイトに載っているものを使用しました。
これで、enumが使えるようになりました。
気持ちのよいプログラミングができそうです。
現在の課題は、JDOを使ったオブジェクトのアップデート(更新)です。
db4oのときもそうでしたが、同じIDを持っている別オブジェクトで「簡単に更新」するためにはどうすればいいのかが課題です。
atached detached などJDOの基本をやってみます。
0 件のコメント:
コメントを投稿