アーカイブ

‘slim3’ カテゴリーのアーカイブ

備忘録 scenic3 のPageクラスのアノテーション達

2011 年 12 月 2 日 tdtsh Comments off

appengine java + slim3 の開発では、scenic3にお世話になっています。

scenic3は t2 frameworkのようなPageクラスをslim3で実現するslim3の拡張ライブラリです。

scenic3

ページ作るの便利なんで。

そのPageクラスを作るときにアノテーションとか忘れそうになるんでメモしておきます。

@Page リクエストパスの1個目?を指定する
@ActionPath = リクエストパスの2個目以降を指定する

手が覚えるまで迷うのがこれら。

@Var = リクエストパスの中に引数を指定した場合に書く

私にとってコレが簡単に出来る事がscenic3を使う理由のひとつ。

@RequestParam = リクエストパラメータ(GET引数)を引数にする場合に書く

勿論メソッド内で request.getParameter(“xxx”) とも書けるけど、明示的にメソッドの引数にも出来るってこと。

自然語でメモするとなんかややこしい・・・。

簡単なPageクラスはこんな感じになる。

@Page("/path")
public class PathPage extends ScenicPage
{

	@ActionPath("to/{id}")
	public Navigation list_json(
			@Var("id") String id
			, @RequestParam("limit") Integer limit
			, @RequestParam("offset") Integer offset
	)
	{
		// POSTの場合はコッチ
		String hoge = (String) request.getAttribute("hoge");

		....
		return forward("/path/to/page.vm");
	}

}

AppUrl.java への追加も忘れずに。

public AppUrls()
{
	excludes("/_ah/*");
	excludes("/remote_api");
	add(PathPageMatcher.get());
}
カテゴリー: Google App Engine, slim3 タグ:

遅ればせながらGAE/J で TaskQueue を試す

2011 年 11 月 29 日 tdtsh Comments off

 
google appengine / javaの話ですけど。

バッチとかならcron で何とかなるもんだからいままで曖昧にしてきた訳ですが、そろそろ TaskQueue を弄っていこうと思います。

知らんかった事その1

タスクとははURLを持ったただのサーブレット

使い方というか、Queueの登録の仕方はコチラは大いに参考にさせて頂いています。これ以上説明することがありません。
Task Queueの最新情報!【設定ファイル例付き】

知らんかった事その2

TaskQueue用のサーブレットってSlim3のControllerでもいけるし、素のServletでもいけるけど、戻り値はnullじゃないと延々とリトライされる。
(Exceptionをthrowしてもリトライされる。逆に言うとExceptionをcatchしてしまうとリトライされない)

それもあるから、Datastoreに書いたりするならべき等に実装しなきゃいかん。

知らんかった事その3

リトライに関してはqueue.xml でかなり細かく設定できる。

今は昔のkonjak翻訳 φ(・ω・? )…: Java Task Queue Configuration

色々出来そうですね。
がんばってみます。

個人的には .countDownMills(long) が便利だと思う。

5秒後に実行ならcountDownMills(5000L)。

Taskは(ある程度)細かいほどパフォーマンスいいみたい。
例えばどうしてもループの中にDatastore操作が入っちゃうみたいな場合は、TaskQueueの出番かな。

私が知らないだけかもしれませんがちょっと残念なのは、TaskのChainが作れない事です。
Aタスクを実行後Bタスクとかする場合は、Aタスクの中でBタスクを呼び出す様にネストせな仕方ないか。

Twitterボットでも作ってみようかな。

カテゴリー: Google App Engine, slim3 タグ:

slim3.GlobalTransaction と slim3.Lock がいっぱい

2011 年 11 月 15 日 tdtsh Comments off

appengineのDatastoreにいつのまにか

slim3.GlobalTransaction

slim3.Lock

というEntityが出来ていました。とくにslim3.Lockがいっぱい。

Slim3のGlobalTransactionが失敗した形跡があるんで、その残骸なんでしょうか。
暫くしたら消そう。

カテゴリー: Google App Engine, slim3 タグ:

appengine 1.5.5 の Cross-Group Transactions は Entity Group が 5つまでしか扱えない

2011 年 11 月 9 日 tdtsh Comments off

先日 slim3 1.0.14 とグローバルトランザクションについて書きました。
その続編です。

slim3 の Datastore.beginGlobalTransaction() とか deprecated になってます。
やはりフツーのDatastore.beginTransaction() を使えと言う事ですね。

で、Cross-Group Transactions なんですけど、やはり今のところ 5 entity groups までしか対応していないようです。

確かに複数Entityでも、今までの様に「can’t operate on multiple entity groups in a single transaction.」とか怒られる事が無くなったんですが、いっぱいEntityをぶっこむ(Entity Group が5つ以上)と、「java.lang.IllegalArgumentException: operating on too many entity groups in a single transaction.」とか怒られてしまいます。

沢山のEntity Group を含むトランザクションを扱うシチュエーションでは引き続き slim3 の GlobalTransaction を使う事になりますね。

カテゴリー: Google App Engine, slim3 タグ:

Slim3 1.0.14 とCross-Group Transactions

2011 年 11 月 2 日 tdtsh Comments off

Slim3が1.0.14になってる訳ですが、手もとのeclipseを確認したら、slim3-1.0.12.jarじゃないですか。

Slim3 Eclipse Pluginで横着してたんで、気がつきませんでした。

ソフトウェアの更新で出現しないんですけど、勝手にjarを入替えちゃってもいいんですかね。

というかPluginで入れても、更新は手作業なのかな。 (後日ちゃんとslim3pluginのアップデートが配信されました (2011/11/09 追記))

やってみた。いけた。

Slim3 1.0.14から、appengine SDK 1.5.5のリリースを受けて、グローバルトランザクション周りが変わっているようです。

Datastore.beginGlobalTransaction() じゃなく、フツーのDatastore.beginTransaction() で、Cross-Group Transactionsに対応しているとか。

5 entity groupsまでなら、複数Entity Groupをぶっこんでも、問題なく更新とかできる様になっている筈。

今までは複数のEntity Groupをトランザクションに含めると「IllegalArgumentException:can’t operate on multiple entity groups in a single transaction.」とか怒られたんですが、今回からは 5 Entity Group 以上を含んだ場合出るのかな。

また今度ちゃんと試します。

試しました (2011/11/09 追記)

・・・おそらく GTXの実装には苦労された事と思うんですが、ひがさんの心中や如何に。

カテゴリー: Google App Engine, eclipse, slim3, 開発環境 タグ: