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を自動的に割り振るようにしています。