slim3のインストール、Velocity との連携 その2
2010 年 4 月 15 日
前回、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) アノテーションをつける事で永続化できます。インデックスは作成されません。
- シリアライズ可能( implements Serializable 的な )クラス
- バイト配列( byte[]な )クラス
- 長いテキスト文字列(500バイトより大きいString型)
-
コレクション
- 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の有難味が分かり始める予感。
を読みながら、eclipseのエラーメッセージに従い実装していくと、結果こうなりました。
private ModelRefcircles = 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

