ホーム > Google App Engine, slim3 > slim3のインストール、Velocity との連携 その2

slim3のインストール、Velocity との連携 その2

2010 年 4 月 15 日 tdtsh
このエントリーをはてなブックマークに追加
はてなブックマーク - slim3のインストール、Velocity との連携 その2
Share on Facebook
Share on FriendFeed
Share on GREE
Share on reddit
Share on LinkedIn

前回、slim3とVelocityのインストールをして、Controllerクラスを作ってみました。
その続きです。
 


Modelクラスの作成

  • パッケージ・エクスプローラにてプロジェクト直下の build.xml をダブルクリックする
  • 右側のアウトライン・ビューにて、[gen-model]タスク※を右クリックする。
    ※[gen-model]が複数ある場合は、◎みたいなアイコンの方
  • [実行(R)] – [1 Ant ビルド Alt+Shift+X, Q] (1番目の項目) をクリックする
  • [構成の編集]ダイアログにて、[gen-controller[デフォルト]]のチェックを外し、[gen-model]にチェックを入れ、[実行(R)]ボタンをクリックする。
  • [Ant Input Request]にて、任意の文字列 (例:Member)を入力する
  • 下記ファイルが生成されている事を確認する。

    • src/my/package/model/Member.java
    • test/my/package/model/MemberTest.java

 
実に簡単です。

 

  • あとは、フィールドとかゲッターとかセッターとかを必要に応じて付け足します。

    永続化するフィールドに @Persistent アノテーションは要りません。

    フィールドを永続化したくない場合は、
    @Attribute(persistent = false)
    アノテーションをつけます。
  • 明示的にインデックスづけを中止するアノテーションもあります。
    @Attribute(unindexed = true)
  • 以下のものについては、@Attribute(lob = true) アノテーションをつける事で永続化できます。インデックスは作成されません。

    1. シリアライズ可能( implements Serializable 的な )クラス
    2. バイト配列( byte[]な )クラス
    3. 長いテキスト文字列(500バイトより大きいString型)
    4. コレクション

      • java.util.ArrayList<...>
      • java.util.LinkedList<...>
      • java.util.HashSet<...>
      • java.util.LinkedHashSet<...>
      • java.util.TreeSet<...>
      • java.util.List<...>
      • java.util.Set<...>
      • java.util.SortedSet<...>

 


1対多の Modelクラスを実装する

さきほどこさえたMemberクラスに対し、Circleクラスをこさえて 1対多のリレーションを実現します。
いよいよ、slim3の有難味が分かり始める予感。

リレーションシップ (Slim3 日本語サイト(非公式))

を読みながら、eclipseのエラーメッセージに従い実装していくと、結果こうなりました。

private ModelRef circles = new ModelRef(Circle.class);
public ModelRef getCircles() {
	return circles;
}

ドキュメントによると、保存はこんな感じ。

Circle circle = new Circle();
Member member = new Member();
member.getCircles().setModel(circle);
Datastore.put(circle, member);

参照はこんな感じ。

Key memberKey = ...;
Member member = Datastore.get(Member.class, memberKey);
Circle circle = member.getCircles().getModel();

うん。覚えやすそうです。
関連(例では多の方のCircle)はレイジーにロードされるそうです。

 


Serviceクラスの作成

  • パッケージ・エクスプローラにてプロジェクト直下の build.xml をダブルクリックする
  • 右側のアウトライン・ビューにて、[gen-service]タスク※を右クリックする。
    ※[gen-service]が複数ある場合は、◎みたいなアイコンの方
  • [実行(R)] – [1 Ant ビルド Alt+Shift+X, Q] (1番目の項目) をクリックする
  • [構成の編集]ダイアログにて、[gen-controller[デフォルト]]のチェックを外し、[gen-service]にチェックを入れ、[実行(R)]ボタンをクリックする。
  • [Ant Input Request]にて、任意の文字列 (例:MemberService)を入力する
  • 下記ファイルが生成されている事を確認する。

    • src/my/package/service/MemberService.java
    • test/my/package/service/MemberServiceTest.java

 
Serviceに関する説明は、今の所Slim3公式サイトにもSlim3 日本語サイト(非公式))にもありません。

slim3-demoをチェックアウトして、ソースコードを見てみる事をオススメします。
実に判りやすいです。

永続化層の操作を中心としたビジネスロジックをServiceで実装して、Controllerで利用すれば良いと思います。
とりあえずは、slim3-demoを参考にして、CRUDを実装しときます。
必要に応じてあとで付け足すことにします。

public class MemberService {

	private MemberMeta mMeta = MemberMeta.get();

	public Member get(Key key, Long version) {
		return Datastore.get(mMeta, key, version);
	}

	public List getAll() {
		return Datastore.query(mMeta).asList();
	}

	public void insert(Member member) {
		SLog.log.info("insert ("+ member.getClass().getName() + ")");
		Transaction tx = Datastore.beginTransaction();
		Datastore.put(tx, member);
		Datastore.commit(tx);
	}

	public Member update(Key key, Long version, Map input) {
		SLog.log.info("update()");
		Transaction tx = Datastore.beginTransaction();
		Member member = Datastore.get(tx, mMeta, key, version);
		BeanUtil.copy(input, member);
		Datastore.put(tx, member);
		Datastore.commit(tx);
		return member;
	}

	public void delete(Key key, Long version) {
		SLog.log.info("delete member ()");
		Transaction tx = Datastore.beginTransaction();
		Member member = Datastore.get(tx, mMeta, key, version);
		Datastore.delete(tx, member.getKey());
		Datastore.commit(tx);
	}
}

 


次回は、更新系のControllerを作りこんだり、バリデーションチェックをしたりします。

カテゴリー: Google App Engine, slim3 タグ:
  1. コメントはまだありません。
コメントは受け付けていません。