Objectifyで簡単DataStore操作(モデルオブジェクトを作ってみる)

では、さっそくモデルを作ってみます。作るモデルは”Car”モデルです。ありがちです。Carはサーバー側でもクライアント側でも使うのでどちらからもアクセスできるところに置きましょう。

shareの下にパッケージを作ります。こんな感じです。

package com.storadia.GAETest.shared.model

モデルの定義


モデルのクラス定義は以下です。

package com.storadia.GAETest.shared.model;

import javax.persistence.Id;
import com.google.gwt.user.client.rpc.IsSerializable;
import com.googlecode.objectify.annotation.Entity;

@Entity
public class Car implements IsSerializable {
	@Id
	public Long id;
	private String name;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
}

IsSerializable インターフェイスを使用していますが、これはクライアント、サーバ、両方で使用するためのおまじないです。
@Idアノテーションに注目してください。このLong値を使ってオブジェクトを管理することをDataStoreに宣言しています。
あとはnameプロパティのGetter/Setterを持ったいたってシンプルなクラスです。

DAOの定義


DAOはサーバー側で使用します。パッケージは以下にしました。

package com.storadia.GAETest.server.dao;

Objectifyは扱うクラスの登録を最初の一回だけにしなければいけないという条件を持っています。ですのでstatic節で括って何度も登録しないようにしています。
いろいろ書き方はあるでしょうが、基本はこんな感じになると思います。DAOにはCarの登録用メソッド”put”、名前でCarをDataStoreから取り出す”get”を用意しました。

package com.storadia.GAETest.server.dao;

import com.googlecode.objectify.Objectify;
import com.googlecode.objectify.ObjectifyService;
import com.googlecode.objectify.util.DAOBase;
import com.storadia.GAETest.shared.model.Car;

public class CarDAO extends DAOBase {
	private Objectify ofy = ObjectifyService.begin();
	static {
		ObjectifyService.register(Car.class);
	}
	public void put(Car car) {
		ofy.put(car);
	}
	public Car get(String name) {
		return ofy.query(Car.class).filter("name", name).get();
	}

}

次回GWT-RPCを使ってクライアントからCarを登録・取得してみたいと思います。