2010-03-03

GAEデータストアで条件検索(JDO利用)

以下のサンプルは、データストアにあるUserテーブルのunivIDプロパティが"1234567"という文字列であるデータを検索する例です。下記のサンプル内で一部全角の「<>」を用いてますが、半角に直して下さい。


JDOQLのフル記述の場合
//JDOのマネージャーのインスタンス呼び出し
        PersistenceManager pm = PMF.get().getPersistenceManager();
        String query ="select from org.ochilab.server.user.User where univID=='1234567'";
        List<org.ochilab.server.user.user>result=(List<org.ochilab.server.user.user>pm.newQuery(query).execute();

JDOQLのところは以下のように書くことも可能です。
パラメータ変数で記述する場合
Query query = pm.newQuery(User.class,"univID == univIDParam");
        query.declareParameters("String univIDParam");
        List<org.ochilab.server.user.user>result= (List<org.ochilab.server.user.user>query.execute("1234567");

個人的には後者がよいかと思われます。なお、条件の指定には、下記の方法でもOKです。
Query query = pm.newQuery(Users.class);
     query.setFilter("univID == univIDParam");
     query.declareParameters("String univIDParam");

条件を複数にする場合は、上記、setFilter()の条件を&&で結び、declareParameters()ならびに、query.execute()の各引数を複数にすればOKらしいです。

2010-03-01

GWT-RPCでの効率的なファイルの記述の仕方

以下の話はNetbeansの場合です。


ご存知のように、GWT-RPCを利用する場合は、3つのファイルが必要になります。(Netbeansの場合は下記のファイルが自動生成されます)


(1)サーバ用サービスインタフェース
(2)クライアント用サービスインタフェース(Asyncで終わる名前のインタフェース)
(3)メソッド実装クラス(Implで終わる名前のクラス)

この3つは関連していますので、3つともメソッドの定義を共通させておく必要があります。しかし、2については微妙に異なっていたりしますので、どうも面倒。。。。Netbeansの場合には、ある程度アシストしてくれますので、次のようにすればOKです。

  1. 最初に(1)にてメソッドを定義
  2. するとエラーができるので、右クリック操作により(2)に自動的にメソッドが定義
  3. つづいて(3)にエラーがでているので、右クリック操作にてメソッドを記述
まあ、しっかり設計していれば必然的にこの順番になるとは思いますが。あと、メソッド名の変更などは、リファクタリングで対応できます。だったら、メソッドの追加も完全に自動対応してくれてもいいような気がしますが、、、、ボクが知らないだけかな?他にいい方法がアルかもしれません。