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
からのアクセスになる。
ということでブラウザのブックマークを書き換え。
2009-12-28
GAE/J、ルートにサーブレット
アプリケーションのトップに index.html じゃなくて、メインのサーブレットを置きたいなと思って web.xml をいじり中。
結局、その後に war ディレクトリの index.html 自体を削除したらちゃんと思ったとおりに動いた。ルートディレクトリは、サーブレットのマッピングやウェルカムファイルのリストがどうあれ、index.html があったら優先して表示する仕組みみたい。マッピングの書き方が間違っているのかもしれないけれど…。
とりあえず、関係なかったウェルカムファイルのリストだけ、元に戻す(サブディレクトリで影響が出るかも、と)。
<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 でアクセスさせるには、
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)を受ける予定。あまり得意でない分野なので、今から心配…。
午前Ⅱ:92.00
午後Ⅰ:84
午後Ⅱ:65
で何とか合格。午後Ⅰは運よく Java の問題が出て点を稼げたけれど、午後Ⅱはやっぱりギリギリ。あぶなかったー。
ともあれ、初めての高度試験合格なのでうれしい。今回の試験対策で読んだ本はこちら。
春はデータベーススペシャリスト試験(DB)を受ける予定。あまり得意でない分野なので、今から心配…。
2009-12-16
GAE/J、JDO から Low-Level API へ
こちらのプレゼンテーションを参考に、データストアの利用方法を JDO から Low-Level API へ変更。思っていたよりも感覚的にデータの保存ができて、JDO でスタックトレースとにらめっこしていたのが嘘みたい。おまけに JDO より格段に速いとなると…、最初からこちらにしておけばよかった。
分かりやすい資料を公開してくれている shin1ogawa さんに感謝。
分かりやすい資料を公開してくれている 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 とはまた違うので注意。
データストアでサポートされているデータ型は、こちらで確認。
とか例外が出るから何かと思ったら、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 ディレクトリの
java.lang.NoClassDefFoundError: com/google/common/collect/Maps
というエラー…。同じく解凍フォルダ gdata-src.java-*.**.*/gdata/java/deps の方の
その後、実際に Google アカウントに関連する Blogger ブログ一覧を取得して表示してみる。ローカルでは OK。コードはほぼこれのとおり。 これをデプロイして動かしてみたところ、今度は
java.security.AccessControlException: access denied (java.net.NetPermission getCookieHandler)
という例外。これは appengine-web.xml への記載忘れが原因だったよう。 この記載で、ひとまずちゃんと動いた。間違って web.xml の方に記載して、ウンウンうなっていたというのは、内緒の話。
- gdata-blogger-*.*.jar
- gdata-blogger-meta-*.*.jar
- gdata-client-*.*.jar
- gdata-client-meta-*.*.jar
- gdata-core-*.*.jar
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 で参照できます。とのことなので、Firefox でローカル Datastore Viewer にアクセスしてみたところ、「正常に接続できませんでした」の表示。どうやら Firefox の拡張機能 NoScript の「ABE」という機能が邪魔してたみたい。オプションからチェックをはずして、ひとまず解決。
http://localhost:8080/_ah/admin
プログラミング、つづり間違い
programing じゃなくて programming。
わかっていたつもりが、失敗。
ブログの URL が変わってしまった。とほほ。
3 件投稿したところで気づけて、まだ良かったというべきか。
わかっていたつもりが、失敗。
ブログの URL が変わってしまった。とほほ。
3 件投稿したところで気づけて、まだ良かったというべきか。
2009-11-09
GAE/J、ローカル環境データストアの実体はどこに?
Google App Engine for Java、ローカルでのデータストアの実体について、テキストによると
追記:
shin1ogawa さんに教えてもらった。
プロジェクトフォルダ/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 (株)グルージェント著 技術評論社 |