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(); Listgreetings = (List ) pm.newQuery(query).execute();
次は、Persistenceクラスの1対1や1対多の関係の実装を調べてみよう。
この辺が参考になる。
http://code.google.com/intl/ja/appengine/docs/java/datastore/relationships.html