Google App Engineでデータ保存 | sola's note

sola's note

日ごろのメモを書いていきます。何か新しいものを作るために。

少し時間が出来たのでGAE(Google App Engine)について
詳細は以下URL参照なのだ
http://code.google.com/p/appengine-cl/

今回は以下の二つについて。

1.PersistenceManagerの呼び出し方法
2.データの永続化(登録)

細々しい事は書くと意味不明になるので割愛しようと思う。

まず
1.PersistenceManagerの呼び出し方法
について。

そもそも論から入ってしまうが、GAEではDBではなく、
データストアにエンティティを持たせるという形でデータの永続化を行う。
なので、データアクセスの仕方もEJBとかとは違って
PersistenceManager(以下PM)というものを使って行う。

そんで、今回はその呼び出し方。
PMはPersistenceManagerFactory(以下PMF)という
生成する用のクラス(ファクトリ)から作成されるのだけれど、
その仕組みは

PMFはシングルトンクラスとし、1つ以上インスタンス化ができないようにする。
 →PMFはfinalなPMF変数を持つ。(シングルトンだからね)
そのfinalなPMF変数はJDOHelperのメソッドにデータ永続化用の設定ファイル(jdoconfig.xml)
のパラメータ(transactions-optional)を引数として渡す事で用意されます。

ex.PMFクラスのフィールド
private static final PersistenceManagerFactory pmfInstance =
    JDOHelper.getPersistenceManagerFactory("transactions-optional");

ex.呼び出し方
PersistenceManager pm = PMF.get().getPersistenceManager();

これで生成したpmインスタンスを用いてデータストアとのやりとりを行う模様。

まあ簡単に書くと、
PMFクラスからpmfインスタンスを取得して使う。
その時に陰でJDOHelperのお世話になる。
という流れ。

次に
2.データの永続化(登録)
について。

個人的にはO/Rマッピングに近いのかという印象を受けたけど
エンティティというものを用いて、データストアに対してデータの永続化を行う。

この時のエンティティの書き方。

1.クラスにアノテーションを付ける
@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class Hoge{
    //--
}

2.メンバ変数にLong型のidを定義して、アノテーションを2つ付ける。
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
private Long id;

3.永続化するメンバー変数にアノテーションを付ける。
@Persistent
private String hoge;

まあ、要はアノテーション付けろよって話みたいです。

4.エンティティが出来たらデータ保存!
PersistenceManager pm = PMF.get().getPersistenceManager();

Hoge hoge = new Hoge();
hoge.setHoge("hoge");

try {
    pm.makePersistent(e);
} finally {
    pm.close();
}

※保存が終わったらちゃんとクローズすること。

以上で保存までの流れ。
ちなみにまだ実践してない。