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クラスが自動生成されてくれればナイスかもしれませんね。