Objectifyで簡単DataStore操作(GWT-RPCでモデルの受け渡しを実装する)

Objectifyを使ってクライアント<—>サーバ間でオブジェクトの受け渡しをしてみたいと思います。そのためにはGWT-RPCでいくつか実装をする必要があります。Googleプラグインでプロジェクトを新規作成したときに自動で生成される
GreetingService.greetServer(String name)がそのサンプルです。

private void sendNameToServer()

で呼んでいますね。
GWT-RPCに独自メソッドを実装する場合3つのファイルにタッチする必要があります。

  • GreetingService.java RPCメソッドの定義です。
  • GreetingServiceImpl.java上記RPCメソッドの実装です。
  • GreetingServiceAsync.java クライアントからはここで定義した形で呼び出します。Ajaxで値が返ってきたとき受け取るコールバックも定義しています。

GWT-RPCメソッドの実装


2つのメソッドを実装します。
registerCar(Car car); // 生成したCarオブジェクトをDataStoreに登録します。
getCar(String name); // “name”が一致したCarオブジェクトをDataStoreから探して返す。

これらのメソッドの実装は以下になります。

// GreetingService.java
/**
 * The client side stub for the RPC service.
 */
@RemoteServiceRelativePath("greet")
public interface GreetingService extends RemoteService {
	void registerCar(Car car) throws IllegalArgumentException;
	Car getCar(String name) throws IllegalArgumentException;
}
// GreetingServiceImpl.java
	@Override
	public void registerCar(Car car) throws IllegalArgumentException {
		CarDAO dao = new CarDAO();
		dao.put(car);
	}

	@Override
	public Car getCar(String name) throws IllegalArgumentException {
		CarDAO dao = new CarDAO();
		return dao.get(name);
	}
// GreetingServiceAsync.java
/**
 * The async counterpart of GreetingService.
 */
public interface GreetingServiceAsync {
	void registerCar(Car car, AsyncCallback callback) throws IllegalArgumentException;
	void getCar(String name, AsyncCallback callback) throws IllegalArgumentException;
}

これで準備ができました。次回は早速呼び出してみましょう。

Objectifyで簡単DataStore操作(開発環境を整える)

GWT+GAEでの開発にはまっています。日本じゃあんまり話題を聞かないんですが、めちゃくちゃ便利でAjaxなWebアプリがバリバリかけます。そう、「スクリプトを駆使したサイト」ではなく、「Webアプリケーション」です。

その中でもGAE(Google App Engine)が持つ新しいデータ管理技術DataStore!これがすごいです。そんなわけで簡単にデータをサーバにおいて、簡単にクライアントで使うTipsを書いてみたいと思います。

GWT(Google Web Kit)


ざっくりというとクライアント側を受け持つフレームワークです。なんとJavaで書いたソースがJavaScriptにコンパイルされ、ブラウザで動くというウルトラCをやってのけます。ついでにAjaxで非同期にデータを読み込むなんてことも簡単です。

GAE(Google App Engine)


Googleが提供しているクラウド環境(サーバ側)です。かなりの量まで無料で使うことができます。必ずしもGWT+GAEでなければいけないわけではありませんが、やっぱり相性がいいです。

Objectify(Objectify-appengine)


GAEのDataStoreの扱いを便利にするライブラリです。
ここからダウンロードすることができます。

開発環境


Eclipse用にプラグインが提供されています。

プロジェクト作り


プラグイン入りEclipseを立ち上げるとツールバーに”g”アイコンが現れます。ここで”New Web Application Project…”を押してプロジェクトを作りましよう。とりあえず「GAETest」にしましょうか。数秒待つとソースツリーが生成されます。
ここで先ほどダウンロードしたObjectifyの実体(Objectify-3.1.jar 2013/09現在)をwar/WEB-INF/libに置きます。次にGAETest/srcにGAETest.gwt.xmlに

<inherits name="com.googlecode.objectify.Objectify" />

を追加します。これはよく忘れるので注意。
Javaのクラスパス設定も忘れずに。これで環境が整いました。