ラボ講座‎ > ‎Google講座‎ > ‎

JDO を利用したGAEデータストアの使用

GAEでは、JDOまたはJPAによるインタフェースでデータアクセスに対応します。ここでは、JDOについて書きます。

GAEデータストアの特徴

  <現在調査中>
  • BigTableと呼ばれる列指向DBMSである
  • RDBのようにテーブル構造をもつが、RDBのようなリレーションを利用した検索などはできない。
JDOとは
  • データの永続性を扱うインタフェース
  • データベースを扱う際のデータの状態(CRUD)管理をする

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
です。
ċ
PM.java
(0k)
Y OCHI,
2010/08/24 18:36
ċ
jdoconfig.xml
(1k)
Y OCHI,
2010/08/24 2:00
Comments