JDO設定ファイルについて
続いて、JDOを利用するための設定ファイルを用意します。しかし、実はEclipseでプロジェクトを作成すると、これは自動的に作成されます。「src」内にある「META-INF」フォルダの中に用意されている「jdoconfig.xml」がそれにあたります。これを開くと、次のように記述されているのが分かります。
<?xml version="1.0" encoding="utf-8"?> <jdoconfig xmlns="http://java.sun.com/xml/ns/jdo/jdoconfig" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://java.sun.com/xml/ns/jdo/jdoconfig"> <persistence-manager-factory name="transactions-optional"> <property name="javax.jdo.PersistenceManagerFactoryClass" value="org.datanucleus.store.appengine.jdo.DatastoreJDOPersistenceManagerFactory"/> <property name="javax.jdo.option.ConnectionURL" value="appengine"/> <property name="javax.jdo.option.NontransactionalRead" value="true"/> <property name="javax.jdo.option.NontransactionalWrite" value="true"/> <property name="javax.jdo.option.RetainValues" value="true"/> <property name="datanucleus.appengine.autoCreateDatastoreTxns" value="true"/> </persistence-manager-factory> </jdoconfig>
ここで、PersistenceManagerFactoryのクラスの指定や、各種オプション設定の情報を用意します。これらは特に修正する必要はないので、そのまま使ってください。
SimpleDataクラスの作成
では、実際にデータストアに保管するオブジェクトのクラスを定義しましょう。これは、Groovyではなく、Javaのクラスとして作成します。実際に試してみたのですが、Groovyで作成したクラスはJDOに「永続化可能なクラスである」と認めてもらえないようで、うまく動きませんでした。そこで、この部分に関してはJavaにお願いすることにします。
プロジェクトの「src」フォルダには、「gae_app」というパッケージがデフォルトで用意されているので、この中にクラスを用意することにしましょう。「SampleData.java」というファイルを用意し、次のように記述をしてください。
package gae_app;
import javax.jdo.annotations.*;
@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class SampleData {
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
private Long id;
@Persistent
private String data;
SampleData(String d){
this.data = d;
}
public Long getId() {
return id;
}
public String getData() {
return data;
}
public void setData(String data) {
this.data = data;
}
}
見れば分かるように、非常にシンプルなBeanクラスです。単にidとdataというprivateフィールド、そしてそれらのアクセサがあるだけです。ただし、それ以外にこまごまとしたアノテーションが記述されています。これが、JDOで永続化可能クラスとして扱えるようにするための秘密なのです。JDOで利用するクラスは、次のようなアノテーションを用意し、シリアライズ可能であることを示す必要があります。
@PersistenceCapable(identityType = IdentityType.APPLICATION)
@PrimaryKey
@Persistent
ここでは、プライマリキーの@Persistentでは、(valueStrategy = IdGeneratorStrategy.IDENTITY)という指定を追記しています。これにより、IDを自動的に割り振るようにしています。
