2011年7月2日土曜日

Play!でsienaを動かしてみた。

※今回の実行環境
Play! 1.2.1
Play!のGAEモジュール 1.4
Play!のsienaモジュール 1.5
これらの環境がインストール済みであること。

さてさて。今回はPlay! でsienaを使ってdatastoreを使ってみよう。
この辺りがクリアできれば、GAEでBigTableが使えるようになるはずだ。

と、いうことでまずはローカル環境で実験。

application.confに以下の記述を追加する。

# The siena module
module.siena=${play.path}/modules/siena-1.5

これで準備完了!

app/models配下に、Comment.javaクラスを作成する。
package models;

import siena.*;

@Table("Comment")
public class Comment extends Model {

  @Id(Generator.AUTO_INCREMENT)
  public Long id;

  @Column("Comment_Value")
  @Max(200) @NotNull
  public String commentValue;

  public static Query all() {
    return Model.all(Comment.class);
  }

}

@Table、@Column、@Maxといったアノテーションは、BigTableに対しての定義になるみたい。
@Idアノテーションがついたフィールドがキーになるようだ。Id値は自動採番。

Model クラスを継承することで、sienaとしてinsert, update, deleteといったメソッドが使えるようになる。

これでModelクラスの定義が完了。
基本的にはこいつに対して操作してやることで、datastoreが触れるはず。

さっそくテストを書いてみよう。

test/ 配下にあるBasicTest.javaにテストを追記。
import org.junit.*;
import java.util.*;
import play.test.*;
import models.*;

public class BasicTest extends UnitTest {

    @Test
    public void aVeryImportantThingToTest() {
        assertEquals(2, 1 + 1);
    }

    @Test
    public void sienaTest() {
      Comment cm = new Comment();
      cm.commentValue = "テスト";
      cm.insert();

      //insertが成功したかのテスト      
      List<comment> getList = Comment.all().fetch();
      assertEquals(getList.get(0).commentValue,"テスト");

      //後片付けにデータを削除(ついでにデータ更新のテストも兼ねる)
      for(Comment deleteKeys :getList) {
        Comment delcm = new Comment();

        //データ更新のテスト
        delcm.id = deleteKeys.id;
        delcm.commentValue = "更新されてる?";
        delcm.update();
        List<comment> afterUpdateList = Comment.all().filter("id",delcm.id).fetch();
        assertEquals(afterUpdateList.get(0).commentValue,"更新されてる?");

        delcm.delete();
      }

      //削除ができていれば、fetch結果は0件のはず
      List<comment> afterDeleteList = Comment.all().fetch();
      assertEquals(afterDeleteList.size(),0);
    }

}

さきほど作ったCommentクラスのインスタンスを生成し、commentValueに値を設定。
insertメソッドを呼び出す。

これで、datastoreに値が保存されたはず。

getListにデータをfetchし、確認してみる。

あとは後片付けでデータ削除。ついでにupdateとdeleteのテストもやっておく。

これでテストを実行!!




上手く行ったようだ。

0 件のコメント:

コメントを投稿