参考 Slim3 JSON 機能の説明(非公式) GAE + Slim3 で JSON 出力 Model での記述例。 基本的には JSON を利用するのに既存の Model をそのまま使える。 しかし、JSON アノテーションで Model が保持するエンティティ内のプロパティを操作したい場合は、下記のように「org.slim3.datastore.json.Json」が必要になる。 import org.slim3.datastore.Attribute; import org.slim3.datastore.Model; // JSON アノテーションを利用する場合に import する import org.slim3.datastore.json.Json; @Model(schemaVersion = 1) public class Article implements Ser
(2/7更新) (2/26更新) (12/22更新 @Jsonはフィールド直接指定になりました) Slim3 JSON機能のドキュメントを書き始めました。まだ非公式なものですが、ひと通り書き終わったら公式へのマージを提案する予定です。でも、公式は英語なんですよね。どうしたものか。まぁ、いきなり下手な英語で書くより、まずは日本語でちゃんと書いたほうが良いはず。 というわけで、下記ドキュメントの草案です。若干改行が変ですが、evernoteに書きなぐってexportしたものを貼っつけてるためだと思います。これにあとJSON入出力のカスタマイズ方法を書いて一段落とする予定です。(書きました!) 概要 Slim3のJSON機能は、モデル(@org.slim3.datastore.Modelアノテーションが付加されたクラス)のJSON変換機能を提供します。JSON変換は、org.slim3.data
例えば、渡された値が一意でその値を Key として利用したい場合や、タイムスタンプを Java で利用できるミリ秒単位に変換したい場合などで、BeanUtil で処理をする前に一度別の処理を行いたいときに使う。 public class ItemService { private ItemMeta a = new ItemMeta(); public Item post(Map<String, Object> input) { Item Item = new Item(); // exclude に処理対象外にしたい変数名を記入する // See at http://slim3.googlecode.com/svn/trunk/slim3/javadoc/org/slim3/util/CopyOptions.html BeanUtil.copy(input, Item, new CopyO
CoolなURIでJSONを返すURLはどう表現するか 内部的には「/user/get?id=12345&type=json」となるようなURI(idが12345のユーザ情報のJSON形式)を、Cool URIではどのように表現するのが適切か悩んでいた。「/user/json/12345」や「/user/12345/json」はなんか違う気がするし。 そしたら「Webを支える技術 -HTTP、URI、HTML、そしてREST (WEB+DB PRESSプラスシリーズ)」にその答えが書いてあった。 例えば1つのリソースをHTMLとテキストとJSONで表現できる場合には、それぞれ「.html」「.txt」「.json」という拡張子を付けてここの表現を分けると良いでしょう。 「Webを支える技術」 p.062 先述の例で言えば、「/user/12345.json」となる。なるほど確かにこれはしっ
slim3ではGAEの環境に依存するような単体テストもかなり簡単に行う事ができます。例えば、Bigtableへのアクセスはテストの実行毎にリセットされる、グローバルトランザクションに対応など至れりつくせりです。 ところが、画像を加工してサムネイルを作る時などに使用する ImagesServiceですが、これを単体テストで実行しようとすると例外が発生します。内部的には、画像の作成や一部の軽い処理はImplで行っているようですが、拡大縮小などの変換処理は各アプリでやるのではなく、外部サービスとして呼び出しているようです。これらのテスト環境でのエミュレートは、org.slim3.tester.AppEngineTesterのmakeSyncCallで行っていますので、ここを少しカスタマイズすることでImagesServiceもエミュレートできるようになります。 以下、簡単なサンプルになります。
ローカルのユニットテストで、com.google.appengine.api.users.Userのインスタンスを取得しようとしても、デフォルト・コンストラクタはプライベートであるし、UserServiceのgetCurrentUser()メソッドもnullを返すため、簡単ではない。 以下のリンクを参考にすれば、getCurrentUser()メソッドで任意のuserIdを持つUserのインスタンスを取得することが可能。 Local Unit Testing with UserService: userId==null problem また、slim3を利用する場合は、下記のようにtester.environmentからorg.slim3.tester.TestEnvironmentを利用するらしい。 public class UserTest extends AppEngineTestC
こちらのページは移転しました。 この度、旧会社名シアトルコンサルティング株式会社からMETATEAM株式会社へと社名変更および、弊社コーポレートサイトをリニューアルいたしました。 このページは5秒後に、新しいコーポレートサイトに自動転送されます。 遷移しない場合はこちら。
その他、ブランクプロジェクトの入手に書いてある設定を行う。 プロジェクトを実行(「実行」→「Webアプリケーション」)すると、「Development Mode」というビューが開く。 そこに表示されている「http://127.0.0.1:8888/index.html?gwt.codesvr=127.0.0.1:9997」をブラウザーで開くと、最初に「Google Web Toolkit Developer Plugin」のインストールが要求される。 GwtDevPluginSetup.exeをダウンロードして実行してインストールする。 再度「http://127.0.0.1:8888/index.html?gwt.codesvr=127.0.0.1:9997」を開くと、ブラウザー上は真っ白の画面が表示されるだけ。(GwtDevPluginのActiveXの実行は許可しておく) Ecli
AppEngineは、アクセスがあったときにアプリケーションを起動し、しばらくアクセスが無ければアプリケーションを終了させ、また次のリクエストで再起動するという仕組みを導入しています。 そのため、アプリケーションを起動(spin-up)する時間がとても重要になってきます。このspin-upの時間はpython(webapp)で60cpu_ms以下。(cpu_msはcpuが使う仮想的な時間ですがmsと同じ感じで捉えてもらってもとりあえずは大丈夫です)JavaのServletだと600cpu_msくらいです。PythonでもDjangoような大きなフレームワークだと1000cpu_msくらい(アプリによる)かかりますが、許容範囲内。JavaだとSlim3で1300cpu_ms、Springだと早くて7000cpu_msという感じで、Slim3がギリギリ許容範囲内でしょうか。ほんとうは、1000
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く