The Dragon Scroll

Be just and fear not.

JDOの利用

GAE/Jでは、永続化にJPAかJDOが利用できる。
JDOは全く使ったことが無いので、ドキュメントをもとに動かしてみる。
http://code.google.com/intl/ja/appengine/docs/java/gettingstarted/usingdatastore.html
http://code.google.com/intl/ja/appengine/docs/java/datastore/


必要なもの

  • jdoconfig.xml
  • Persistenceクラス
  • PersistenceManagerFactory
  • JDOクライアント
jdoconfig.xml

GAEのeclipsePluginが自動生成してくれる。
PersistenceManagerFactoryの実装クラスオプションの設定を管理するようだ。
src/META-INF/配下におくことで、ビルド時にwar/WEB-INF/classes/META-INF/にコピーされる。



   
       
       
       
       
       
       
   

Persistenceクラス

GAEでは、物理的なテーブルがあって、それにアクセスできるわけではない。Persistenceクラスを利用する。
このPersistenceクラスは、POJOで書ける。クラスには@PersistenceCapableを付与する。
以下、サンプルのママ。

@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class Greeting {
    @PrimaryKey
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
    private Long id;

    @Persistent
    private User author;

    @Persistent
    private String content;

    @Persistent
    private Date date;

    public Greeting(User author, String content, Date date) {
        this.author = author;
        this.content = content;
        this.date = date;
    }
    // 以下略

永続化させる属性には、@Persistentを付与する。また、主キーにあたる属性には、@PrimaryKeyを付与する。
データの永続化は、PersistenceManagerを利用する。PersistenceManagerはPersistenceManagerFactory
によって生成される。

PersistenceManagerFactory

PersistenceManagerを生成するためのFactory。

import javax.jdo.JDOHelper;
import javax.jdo.PersistenceManagerFactory;

public final class PMF {
    private static final PersistenceManagerFactory pmfInstance =
        JDOHelper.getPersistenceManagerFactory("transactions-optional");

    private PMF() {}

    public static PersistenceManagerFactory get() {
        return pmfInstance;
    }
}
JDOクライアント

PersistenceManagerをFactoryから生成し、makePersistentメソッドで永続化する。

        Greeting greeting = new Greeting(user, content, date);

        PersistenceManager pm = PMF.get().getPersistenceManager();
        try {
            pm.makePersistent(greeting);
        } finally {
            pm.close();
        }

データの取得もPersistenceManagerで行う。JDOQLというクエリ言語を用いる。

    PersistenceManager pm = PMF.get().getPersistenceManager();
    String query = "select from " + Greeting.class.getName();
    List greetings = (List) pm.newQuery(query).execute();


次は、Persistenceクラスの1対1や1対多の関係の実装を調べてみよう。
この辺が参考になる。
http://code.google.com/intl/ja/appengine/docs/java/datastore/relationships.html

参考
Page Redirection
JDO - Persistence Manager Factory