アーカイブ

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

appengine の Datastore Adminのページが真っ白

2012 年 3 月 7 日 Comments off

いつのまにかappengineの特定のアプリで少し前まで見られていたDatastore Admin のページが見られない様になっていました。
Internet Explorerで見られないとかそんなんじゃありません。ブラウザはWindows版 chrome, firefox、およびmac版chrome で試しました。

lastest というバージョン名は使っていないので、この現象とは違います。
Datastore Adminのページが開けない – Google グループ

経緯としては、最初こんなエラーが出たので、

Error: Not Found

The requested URL /_ah/login_required?continue=https://ah-builtin-python-bundle-dot-latest-dot-slow-net.appspot.com/_ah/datastore_admin/?app_id=s~xxxx was not found on this server.

Application Settingsから、「Datastore Admin」を「Disable」して「Enable」をクリックしたんです。

その後、Datastore Adminをみたらこんな事を言われ

サードパーティのサービスが Google アカウント へのアクセスを許可するようリクエストしています。
使用するアカウントを選択してください。

「次へ」をクリックしたらそれ以降、Datastore Adminの画面が真っ白のままです。

Google グループ へ投稿しました。
Datastore Admin のページが見られない(真っ白) – Google グループ

そしてすぐに解決しました。

Authentication Options を Federated Login にしてるせいでした。
多分 Federated Login にしていると Bulkloader が使えないのと同じ理屈なんでしょうね。

issue trackerをよく見れば判ったものを、慌ててました。

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

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

2011 年 12 月 2 日 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 日 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 日 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 日 Comments off

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

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

※2012年4月4日追記
今はappengine-web.xml とかで slim3.useXGTX=true しないとCross-Groupなトランザクションになりません。

404 shin1のつぶやき ないわー Not Found: Slim3 Cross Group TransactionをUnit Testで使う

で、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 タグ: