データストアを使うために必要なクラス
では、さっそくGAEの機能を利用したアプリケーションを作ってみましょう。GAEでサポートされている機能の中で、もっとも重要なものといえば、やはり「データストア」でしょう。これは、Googleに用意されている「BigTable」と呼ばれる巨大データベースを利用してデータの保存や検索などを行うためのものです。
GAEからデータストアを利用するには、「JDO」というライブラリを使用します。これは「Java Data Objet」というもので、Javaのオブジェクトを永続的に利用するための機能を提供するものです。GAEにはこのJDOが搭載されており、これを利用してデータを管理するようになっています。
JDO経由でデータアクセスをする場合、必要となるのは2つあります。これらについて整理しておきましょう。
・PersistenceManagerFactory取得クラス
1つは「PersistenceManagerFactory」と呼ばれるオブジェクトを取得するためのクラスです。これは、JDOを使ってオブジェクトの永続化を行うための「PersistenceManager」クラスのインスタンスを生成する働きを持つクラスです。これは、インスタンス生成に大きなコストがかかるため、「シングルトン」なクラスとして定義しておく必要があります。(シングルトンというのは、デザインパターンの一種で、常に1つのインスタンスだけが生成されるように設計されたクラスのことです)
・保存するオブジェクトを定義したクラス
もう1つは、保管するオブジェクトの定義となるクラスです。通常、データベースサーバーなどを利用する場合には、SQLなどを用いてデータベースやテーブルなどを設計しますが、データストアの場合にはこうした作業はまったく必要ありませんデータストアは、ただ単に「シリアライズ可能なオブジェクトをどんどん放り込んでおく入れ物」なのです。ですから、あらかじめ必要なデータをプロパティとして保持しているクラスを定義しておき、そのクラスのインスタンスを保管していくのが一般的です。
データストアへのデータの保存は、まずPersistenceManagerFactoryインスタンスからPersistenceManagerインスタンスを取得し、それを利用して、保存するクラスのインスタンスを永続化して行います。「永続化」という言葉になじみがない人もいることでしょうが、要するに「そのオブジェクトがずっと存在し続ける=保存されている」ということだ、と考えればよいでしょう。
PMFクラスの作成
では、まずはPersistenceManagerFactoryインスタンスを取得するためのクラスを作成しましょう。jp.allaboutパッケージに、新たに「PMF.java」というソースコードファイルを作成し、以下のように記述を行います。
package jp.allabout;
import javax.jdo.*;
public class PMF {
private static final PersistenceManagerFactory pmfInstance = JDOHelper
.getPersistenceManagerFactory("transactions-optional");
private PMF() {}
public static PersistenceManagerFactory get() {
return pmfInstance;
}
}
PMFクラスでは、あらかじめPersistenceManagerFactoryインスタンスを作成しておき、getでこのインスタンスを返すようにしています。こうして、常に同じインスタンスが使われるようにしておくわけです。また、デフォルトコンストラクタをprivateにしておくことで、newによるインスタンス生成が行えないようにしておきます。