S3BlazeDSでDatastoreのKeyのシリアライズ対応しました
まだ正式にバージョンアップしていませんが、DatastoreのKeyのシリアライズ対応をコミットしました。
http://code.google.com/p/s3blazeds/
以前書いたこちらの記事から少々パワーアップしていまして、
Namespace対応と、Flex側でEntity Group作成ができるようになっています。
使い方
s3blazeds-sample-server、s3blazeds-sample-clientを見て頂ければだいたい分かると思いますが、
Java側は、
WEB-INF/lib/s3blazeds.jarを追加して、
WEB-INF/flex/services-config.xmlに、SerializerBootstrapServiceの登録を追記してください。
こんな感じです。
<services-config> <services> <service-include file-path="remoting-config.xml" /> <!-- for Google App Engine datastore key serialization support --> <service class="org.slim3.blazeds.bootstrap.SerializerBootstrapService" id="s3blazedsbootstrap"/> </services>
Flex側は、
kind、parent(親Key)、name、id、namespaceをプロパティとして持つクラスを作成して、DatastoreのKeyをRemoteClassとして設定してくれればOKです。
こんな感じです。
package com.google.appengine.api.datastore { [RemoteClass(alias="com.google.appengine.api.datastore.Key")] public class Key { public function Key(){} public var kind:String; public var parent:Key; public var name:String; public var id:Number; public var namespace:String; } }
このKeyのソースはs3blazeds-sample-clientからゲットできます。
(というか、これもActionScriptライブラリとしてリリースに含めた方が良いのかな)
Flex側でEGとnamespaceを同時に扱う場合、ちょっと注意が必要です。
EGのRoot(一番祖先)キーにnamespaceを設定する必要があります。
こんな感じです。
//namespaceが"namespace1"で、ParentSampleModel(parentKey)/SampleModel(key1)のKeyを作成する var key:Key = new Key(); key.kind = "SampleModel"; key.name = "key1"; //親キー作成 var parentKey:Key = new Key(); parentKey.kind = "ParentSampleModel"; parentKey.name = "parentKey"; //EG作成 key.parent= parentKey; //namespaceは親キーに設定する。 parentKey.namespace = "namespace1";
以上ですが、
現状だとActionScript側でのキーの扱いが面倒くさいので、
Slim3っぽく、Java側でモデルを作成すれば、APTでActionScriptのモデルのMetaクラスが自動生成されてくれればナイスかもしれませんね。