Java (JDO)でGoogle App Engineのデータストアにアクセスする(1)

JavaでGoogle App Engineのデータストアにアクセスする方法として、JDO(Java Data Object)インターフェースが提供されている。JDOを使ったコーディングでは、「データクラス」、「インターフェース(PMF)クラス」、「処理クラス」の3つのクラスが必要になる。

  • データクラスを作成する
    データクラスは、データストアのkind(テーブル)の全property(フィールド)をクラス変数として持つクラスで、以下のように定義する。今回はkind:SpotPlanに対するデータクラスを定義する。
    • kind名と同じ名前のクラスを作成する
      このクラスの1つのインスタンスが1つのentity(レコード)に相当する。例えば、データストアを検索して複数entityを受け取るケースでは、以下のようなコードが想定される。

      // Java
      List<SpotPlan> plans = (List<SpotPlan>)pm.newQuery(query).execute(); // クエリ実行
      
    • データクラスであることを宣言する(@PersistenceCapable)
      // Java
      @PersistenceCapable(identityType=IdentityType.APPLICATION)
      
    • 主キー用変数を定義する(property名と同じ名前の変数を定義する)
      // Java
      @PrimaryKey private String ID;
      
    • その他の全てのプロパティ(フィールド)用変数を定義する
      // Java
      @Persistent private String plan_key;
      

      ここまでをまとめると以下の感じになる。

      // Java
      import javax.jdo.annotations.IdentityType;
      import javax.jdo.annotations.PersistenceCapable;
      import javax.jdo.annotations.PrimaryKey; // @PrimaryKeyを付与するのに必要
      import javax.jdo.annotations.Persistent; // @Persistentを付与するのに必要
      
      @PersistenceCapable(identityType=IdentityType.APPLICATION)
      public class SpotPlan {
        @PrimaryKey private String ID;
        @Persistent private String plan_key;
        // 以下省略。全プロパティについて定義する。
      }
      
    • コンストラクタを定義する
      適宜コンストラクタを記述する。(処理クラスの実装次第。)
    • getter/setterを定義する
    • プロパティ変数に対するgetter/setterを定義する。Eclipseのメニューで「ソース」-「getterおよびsetterの作成」で、まとめて作成することが可能。

  • インターフェース(PMF)クラスを作成する
    詳細は省略するが、データストアとの接続に必要なクラス。PMF.java として配布されているものを、そのままコピー&ペーストすればOK。
  • 処理クラスを作成する
    処理クラスは実際にデータストアとのデータのやり取りを行うクラス。今回は「データストア(kind名:SpotPlan)の内容を表示する」サーブレットを想定して処理クラスを作ってみる。処理の流れは以下のとおり。
    (1) PersistenceManagerをインスタンス化する
    (2) クエリを定義する
    (3) クエリを実行する
    (4) 結果を表示する
    これをコーディングするとこんな感じになる。

    // Java
    public class ViewSpotPlanServlet extends HttpServlet {
      public void doGet(HttpServletRequest req, HttpServletResponse resp)
          throws IOException {
        resp.setContentType("text/plain");
        resp.setCharacterEncoding("UTF-8");
        resp.getWriter().println("Hello, world. I'm ViewPlanSpot class (sample).");
        // 処理開始
        // (1) PMの作成
        PersistenceManager pm=PMF.get().getPersistenceManager(); 
        // (2) データクラス名を指定してクエリを作成
        Query query = pm.newQuery(SpotPlan.class);
        // (3) クエリを実行 - 結果はSpotPlan型のListで受け取る
        List<SpotPlan> plans = (List<SpotPlan>)query.execute();
        // (4) 結果表示
        for(SpotPlan plan:plans){ 
          resp.getWriter().println(plan.getSpot_time() + " - " + plan.getSpot_name() );
          // 時刻と地点名を表示
        }
        pm.close();
    }
    
    
  • 実行例(ブラウザ画面)
    viewSpotPlan_servlet_01
カテゴリー: Tips タグ: , , , パーマリンク

Java (JDO)でGoogle App Engineのデータストアにアクセスする(1) への1件のフィードバック

  1. ピンバック: Java/JDOでGoogle App Engineのデータストアにアクセスする方法 | Try Lifelog

コメントは停止中です。