ラベル AppEngine の投稿を表示しています。 すべての投稿を表示
ラベル AppEngine の投稿を表示しています。 すべての投稿を表示

月曜日, 3月 22, 2010

appenginejsのアプリ初期化過程

最初のリクエストが飛んできたときに、appenginejsに同梱されているJSGIServlet.javaで行われていることをまとめておきます。
  • コンテキストが作られる
  • narwhalの(engine個別の/ここではrhinoの)bootstrap.jsが実行される
     ここでNARWHAL_HOMEはWEB-INF/packages/narwhalと決め打ち
     その中で(NARWHAL_HOMEの)narwhal.jsが実行され環境が作られる
  • jackのservletハンドラ(proessメソッド)がrequireされる
     アプリは(serviceメソッドから呼ばれ)このハンドラ内で実際に実行される
  • アプリのWEB-INF/src/jackconfig.jsがrequireされる
     (web.xmlの)appとenvironmentに合わせた変数がexportされる
  • 上記exportされた変数(environmentとapp)を使ってアプリが初期化される

月曜日, 3月 08, 2010

hotデプロイなGAE開発!

appenginejsでは、war\WEB-INF\jackconfig.jsの中でlocalとhostedという2つの稼働方法をexportしている。

そして、同ディレクトリにあるweb.xmlの中でenvironmentという名前で指定して利用するのだが、これをlocalにしておけば、ソース修正が(jettyの再起動を行わずとも)反映できるようになる。

なお、jackconfig.jsというファイル、何かの設定ファイルのようだけどなんのことはなく、このファイルが、jack経由でJettyで実行されているだけである(このファイルのexports.app)。

日曜日, 3月 07, 2010

appenginejsでtimezone

blog-gaeでのtimezone設定のやり方が分からず、ずっと時間表示がUTCだった。
調べてみると起動するservletであるjack-servletを最新ソースではこの設定が可能になっていたので差し替え。

ソースを落としたら、D:\work\blog-gaeに展開して、
ant runserver
とするだけで、開発用サーバが8080ポートで上がります。ちなみに、WEB-INF\packages\narwhal\lib\sandbox.jsの6行目にある以下を修正すれば、配置場所は変更可能です(Windowsのディレクトリ記述がうまくパースできないようなので、このファイルは無理に改造しています)。
var zzWork = 'd:\\work\\blog-gae\\war\\WEB-INF\\';

土曜日, 3月 06, 2010

blog-gae

appenginejsのサンプルが動いたので、ソースを上げました。
GAEって、普通にzipファイルを上げたらダウンロードできるようになるんですね。

火曜日, 2月 23, 2010

appenginejsでrunInTransaction!!

appenginejsで、どうしても出来なかった同一トランザクションでのdb登録がやっとできた。GAEでは同一トランザクションでのデータ更新は、
・同じエンティティグループのエンティティ群しかダメ
・(そのためには先に作ってる同一に入れたい)エンティティからキーをもらう必要あり
このための記述が、昔はModelをnewするときの第一引数にキーを渡す方式だった(よう)だが、

×(昔)
var objCom = new Comment(msg.key(),{
msgRef:msg.key(),
content: "This is test comment"
});

今のバージョンではプロパティにparentと切ってそこにキーを渡すことになっている。

(今)
var objCom = new Comment({
parent:msg.key(),
msgRef:msg.key(),
content: "This is test comment"
});

これで、以下のような一括更新が成功するようになる!!
db.runInTransaction(function() {
db.put([objCom,msg]);
});

ちなみに、
agl0ZjAwNTQtMDZyDQsSB01lc3NhZ2UYCQw
というキーを与えたら、
agl0ZjAwNTQtMDZyGgsSB01lc3NhZ2UYCQwLEgdDb21tZW50GAoM
というキーを持った(同一エンティティグループに入った)エンティティができている。

土曜日, 2月 13, 2010

App Engine JavaScript SDK

GAEのアプリをJavascriptで書けるSDK"appenginejs"というのがあるのだけど、公開されているサンプルアプリ(blog-gae)をWindowsで動かすのにえらく苦労したのでメモ。

"app is not function"とかエラーがでるがこれはウソ。
で、やることは大きく2つ。

パスがうまく取り込めないので置換する(配置場所に合わせて適宜変えて下さい)。
変更するファイルは"blog-gae\war\WEB-INF\packages\narwhal\lib\sandbox.js"の1つだけ。

loader.find = function (topId) {
if(topId.match(/\-gae/)){
var zztmp = new Array();
//zztmp = topId.match(/([^\\]+)$/);
zztmp = topId.match(/INF\\(.+)$/);
topId = 'd:\\work\\blog-gae\\war\\WEB-INF\\'+zztmp[1];
}
...

self.find = function (topId) {
if(topId.match(/\-gae/)){
var zztmp = new Array();
zztmp = topId.match(/INF\\(.+)$/);
topId = 'd:\\work\\blog-gae\\war\\WEB-INF\\'+zztmp[1];
}
...

"\blog-gae\war\WEB-INF\src"は本来classesへのシンボリックリンク。
なのだけど、Windowsなのでこれはclassesをsrcという別名でコピーしておく。

これで、起動はやはり重いけど動くことは動く。日本語も使えている様子。