GAEでは、JDOまたはJPAによるインタフェースでデータアクセスに対応します。ここでは、JDOについて書きます。
GAEデータストアの特徴
<現在調査中>
JDOとは
JDOインタフェースを利用することから、感覚的には、HibernateのようなORマッピングツールを使うのと同じように扱えます。
ファイル構成
今のところ、NetbeansのGAEプラグインでは、各構成ファイルを自動生成する機能がありません。よって下記のファイルは手動で作成してもらうことになります。
JDO設定ファイル
ソースの直下に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>PersistenceManager クラス
データベースへアクセスするための接続を管理するクラスです。ダウンロード
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; }}データbeanクラス
データを格納するためのbeanクラスです。POJOであることが特徴です。
import java.util.Date;import javax.jdo.annotations.IdGeneratorStrategy;import javax.jdo.annotations.IdentityType;import javax.jdo.annotations.PersistenceCapable;import javax.jdo.annotations.Persistent;import javax.jdo.annotations.PrimaryKey;import com.google.appengine.api.users.User;@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class Student {
@PrimaryKey @Persistent private Long id;
@Persistent private String name;
@Persistent private Date date;
public Student(String name, Date date) {
this.name = name; this.date = date; } public Long getId() {
return id; } public String getName() {
return name; } public Date getDate() {
return date; } public void setId(Long id) {
this.id = id; } public void setName(String name) {
this.name = name; } public void setDate(Date date) {
this.date = date; }}サンプルプログラム
JDOのマネージャーのインスタンス呼び出し
//JDOのマネージャーのインスタンス呼び出し
PersistenceManager pm = PMF.get().getPersistenceManager();登録の場合
//登録したいデータストアStudent st = new Student(name, date);
pm.makePersistent(st); //closeすることで更新されます
pm.close();
検索(idをキーにする)
//参照したいデータのキーを指定
Student st = pm.getOBjectById(student.class,id);
データの検索については、JDOQLを利用してRDBのように条件検索をすることができます。JDOQLによる検索。
更新(idをキーにする)
//更新したいデータのキーを指定
Student st = pm.getOBjectById(student.class,id);
st.setName("ochi2");
//closeすることで更新されます
pm.close();
削除(idをキーにする)
//削除したいデータのキーを指定
Student st = pm.getOBjectById(student.class,id);
pm.deletePersistance(st);
ローカル用データストアの管理
Netbeans上で動かした際は、データベースはローカルにあります。ローカル用の管理コンソールがあり、
http://localhost:8080/_ah/admin (http://localhost:8888/_ah/adminでアクセスできる時もある?)
でアクセスできます。データベースの中身も見れます。
データベースの内容は再起動しても消えません。ゼロからやり直したい場合は、データファイルを削除することになります。その場所は
<プロジェクトのディレクトリ>/build/web/WEB-INF/appengine-generated/local_db.bin