2009-12-28

GAE/J、8080 から 8888 に

App Engine SDK を 1.2.6 から 1.3.0 に更新したら、ローカルテスト環境のポートが 8080 から 8888 に変わった。更新を飛ばしてわからなかったけれど、SDK 1.2.8 からかも。

なので、ローカルでのアプリケーションの確認は

http://localhost:8888/

から、開発コンソール(DataStore や TaskQueue の状態確認)は

http://localhost:8888/_ah/admin

からのアクセスになる。
ということでブラウザのブックマークを書き換え。

GAE/J、ルートにサーブレット

アプリケーションのトップに index.html じゃなくて、メインのサーブレットを置きたいなと思って web.xml をいじり中。
<servlet>
    <servlet-name>main</servlet-name>
    <servlet-class>info.kuribo.example.MainServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>main</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>
と書いてみたけれど、実際にアクセスしてみると index.html が表示される…。あ、そうそうこれだと思ってさらに
<welcome-file-list>
    <welcome-file>index.html</welcome-file>
</welcome-file-list>
を消してみたものの、変わらず。

結局、その後に war ディレクトリの index.html 自体を削除したらちゃんと思ったとおりに動いた。ルートディレクトリは、サーブレットのマッピングやウェルカムファイルのリストがどうあれ、index.html があったら優先して表示する仕組みみたい。マッピングの書き方が間違っているのかもしれないけれど…。

とりあえず、関係なかったウェルカムファイルのリストだけ、元に戻す(サブディレクトリで影響が出るかも、と)。

2009-12-27

GAE/J、TaskQueue 使ってみた

Google App Engine for Java で今日は TaskQueue いじり。なんか 405 とか HTTP エラーが出るので見てみると、Task は基本 POST でアクセスしているよう。

GET でアクセスさせるには、
Queue queue = QueueFactory.getDefaultQueue();
queue.add(url("/path?a=b&c=d").method("GET"));
ってするようにドキュメントには書いてあるんだけれど、そのとおりにやってみると「com.google.appengine.api.labs.taskqueue.TaskOptions に method(String) なんてないぞ」と eclipse に怒られる…。ここは
Queue queue = QueueFactory.getDefaultQueue();
queue.add(TaskOptions.Builder.url("/path?a=b&c=d").method(TaskOptions.Method.GET));
としとけばいいみたい。

2009-12-23

情報セキュリティスペシャリスト試験(SC)

午前Ⅰ:免除
午前Ⅱ:92.00
午後Ⅰ:84
午後Ⅱ:65

で何とか合格。午後Ⅰは運よく Java の問題が出て点を稼げたけれど、午後Ⅱはやっぱりギリギリ。あぶなかったー。

ともあれ、初めての高度試験合格なのでうれしい。今回の試験対策で読んだ本はこちら。


春はデータベーススペシャリスト試験(DB)を受ける予定。あまり得意でない分野なので、今から心配…。

2009-12-16

GAE/J、JDO から Low-Level API へ

こちらのプレゼンテーションを参考に、データストアの利用方法を JDO から Low-Level API へ変更。思っていたよりも感覚的にデータの保存ができて、JDO でスタックトレースとにらめっこしていたのが嘘みたい。おまけに JDO より格段に速いとなると…、最初からこちらにしておけばよかった。

分かりやすい資料を公開してくれている shin1ogawa さんに感謝。

2009-12-11

GAE/J、URL じゃなくて Link だった

java.lang.IllegalArgumentException: java.net.URL is not a supported property type.

とか例外が出るから何かと思ったら、URL はデータの永続化に対応してないんだ。代わりに com.google.appengine.api.datastore.Link を使って即解決。GData の com.google.gdata.data.Link とはまた違うので注意。

データストアでサポートされているデータ型は、こちらで確認。

2009-12-09

GAE/J、Blogger API で右往左往

Google App Engine for Java で、現在 Blogger API をいじっているところ。GData クライアントライブラリについては、以下のサイトから gdata-src.java-*.**.*.zip をゲット。 解凍した gdata-src.java-*.**.*/gdata/java/lib ディレクトリの
  • gdata-blogger-*.*.jar
  • gdata-blogger-meta-*.*.jar
  • gdata-client-*.*.jar
  • gdata-client-meta-*.*.jar
  • gdata-core-*.*.jar
を GAE/J アプリケーションの war/WEB-INF/lib につっこんだ後、ビルドパスに通してみる。これでいいかなと動かしてみると、

java.lang.NoClassDefFoundError: com/google/common/collect/Maps

というエラー…。同じく解凍フォルダ gdata-src.java-*.**.*/gdata/java/deps の方の
  • google-collect-***.jar
  • jsr***.jar
というのも要ったみたい。

その後、実際に Google アカウントに関連する Blogger ブログ一覧を取得して表示してみる。ローカルでは OK。コードはほぼこれのとおり。 これをデプロイして動かしてみたところ、今度は

java.security.AccessControlException: access denied (java.net.NetPermission getCookieHandler)

という例外。これは appengine-web.xml への記載忘れが原因だったよう。 この記載で、ひとまずちゃんと動いた。間違って web.xml の方に記載して、ウンウンうなっていたというのは、内緒の話。

2009-12-06

正誤表

Google App Engine for Java [実践]クラウドシステム構築」の正誤表を発見。コードのセミコロンつけ忘れから、シーケンス図の貼り間違いまで。本を持っている人は必見。 ってこれ、Blogger ブログだ。それだけでなんか親近感。(Navbar を隠しているのはアレだけれども…。)早速、フィードリーダーに登録。

2009-11-29

GAE/J、Datastore Viewer が表示できない

実環境では管理コンソールの Data Viewer からデータストアの内容を確認、編集できます。SDK 1.2.2 より、ローカル環境にも Data Viewer が実装されました。次の URL で参照できます。
http://localhost:8080/_ah/admin
とのことなので、Firefox でローカル Datastore Viewer にアクセスしてみたところ、「正常に接続できませんでした」の表示。どうやら Firefox の拡張機能 NoScript の「ABE」という機能が邪魔してたみたい。オプションからチェックをはずして、ひとまず解決。

プログラミング、つづり間違い

programing じゃなくて programming。
わかっていたつもりが、失敗。
ブログの URL が変わってしまった。とほほ。
3 件投稿したところで気づけて、まだ良かったというべきか。

2009-11-09

GAE/J、ローカル環境データストアの実体はどこに?

Google App Engine for Java、ローカルでのデータストアの実体について、テキストによると
プロジェクトフォルダ/war/WEB-INF/appengine-generated/local_db.bin
にあるよとのこと。これをローカルのデータ削除のために Eclipse のパッケージ・エクスプローラーで探してみたけれど見つからず、少し焦る。結局、単純に Windows のエクスプローラーで表示して削除すればよかったみたい。

追記:

shin1ogawa さんに教えてもらった
@kurikuribo eclipseのパッケージエクスプローラやナビゲータ上で、warフォルダなどの親プロジェクトを選択して右クリック「更新」で、Eclipse上にも表示されるはずです。
右クリック「リフレッシュ」で Eclipse 上にも表示されました。やった。ありがとうございます。

GAE/J、URL フェッチで文字化け「????」

Google App Engine for Java 最初のつまずき。URL フェッチで日本語が「?????」と盛大に文字化け。 Google の Low Level API だと、文字エンコードの設定も自動でしてくれるよ、とのことだったのでその まま信用していたけれど、やっぱり設定はいるようで。
public static String getSiteText(String url, String charset) throws IOException {
    return new String(URLFetchServiceFactory.getURLFetchService().fetch(new URL(url)).getContent(), charset);
}
としておくと、とりあえずいい感じ。もちろん、
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
    resp.setContentType("text/html; charset=UTF-8");
    ...
}
としとかないと、それはそれで文字化けするので注意。あ、あとパラメータ処理のために
public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {
    req.setCharacterEncoding("UTF-8");
    ...
}
みたいなのもいるらしいけれど、うちでは今のところ関係なし。文字コードの自動取得コードも書いてみたいけれど…、それはまた別の機会に。

参考:

2009-11-08

Google App Engine for Java 始めました

Google App Engine for Java (株)グルージェント著 技術評論社
この本を読んで、プログラム熱がメラメラと燃え上がってきたので、とりあえずブログ開設。 現在 Perl で書いている Japanese Blogger Update Info をまず GAE/J に置き換えて、その後簡単な掲示板とか、ブログのカテゴリ分けとかの機能追加ができたらなと思っているところ。 ひとまず、作ってみて何か形にしてみよっと。