これまでのプログラムで、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 件のコメント:
コメントを投稿