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

2012/12/03

GAE/Jのアノテーション@Modelでの注意点

実際に経験して、しばらく解決ができなかった事象について共有します。 

業務でGAE/JでSlim3をフレームワークとしてWebアプリを作っています。
以下のようなルールを設定して使用するEntityを作成していました。


  • Javaのクラスは末尾に「Model」をつける
  • Kind名には「Model」を付けない
    →アノテーションでKind名を設定する
     例)@Model(kind="カインド名")


新規でEntityを作ってアノテーションを設定していました。
そしたら、以下のような状況が発生しました。


  • ローカルの開発環境ではデータがうまく取得できる
  • GAE環境にデプロイしたらデータがうまく取得できない
  • GAE管理画面では該当のKINDにデータが投入されていることは確認できた


ん〜ってソースを見なおしていたら・・・

@Model(kind=" カインド名")

こんな感じになっていました。
??
一見間違いはない。問題はない。

よーく見ると・・・

@Model(kind=" カインド名")

そう、カインド名の前に半角スペースが!!
ローカルの開発環境ではうまく動くっていうのが非常に辛い><

皆様ご注意下さい。。。

2012/10/07

GAE/Jでメール送信機能を実装してみた

GAE/Jでメールを送信する機能が必要となったので、調べて実装してみました。
参考にしたGoogle App Engineの日本語サイトは こちら(※1)。
⇒https://developers.google.com/appengine/docs/java/mail/overview?hl=ja

このページによると、Mail Service Java API は、メール メッセージの送信用に JavaMail(javax.mail)インターフェースをサポートしているそうです。基本的なメール送信の実装方法はこちらのサイトをご参考ください。

ちなみにローカルで実行した場合には、メールは送信されません。 その代わりに、コンソールに送信しようとしたメールの内容が出力されます。 ここで困ったことは、メール本文は出力されなかったこと。 現在も表示方法がわからないので、もしご存知の方がいたら教えていただけると幸いです^^

GAE/Jにデプロイしてケータイにメール送信をして動作確認してみました。 そしたら、英語の件名、本文はきちんと送信されました。

が、しかし!!

日本語の件名が文字化けしていました;;
本文の日本語はきちんと表示されていたんですけど、件名だけが・・・
画面から入力した日本語を含む件名をGAE管理画面でログ出力するように実装して確認したら、きちんと表示されていました。。。

色々と調べてみたら、分かりやすいサイト(※2)を発見しました。
件名はきちんと文字コードを設定しないと文字化けしてしまうようです。 しかも、"ISO-2022-JP"にしないといけない、という事でした。
ということで、以下のように変更してみました。

変更前:msg.setSubject("日本語の件名");
⇒
変更前:msg.setSubject("日本語の件名", "ISO-2022-JP");

が、コンパイルが通らない。。。
よくよくサイトを見ると、もう一箇所修正が必要でした。

変更前:Message msg = new MimeMessage(session);
⇒
変更後:MimeMessage msg = new MimeMessage(session);

これでコンパイルが通り、日本語の件名も使えるようになりました!!
本文についても、文字コードを指定してあげる方が安全かもしれません。私はやっておきました。

以上!!

参考サイト

2012/08/04

GAE/Jアプリのローカル・データストアのアップ・ダウンロード

Google App Engine SDK for Java を利用したアプリを開発している。
ユーザ認証をするときにGoogleアカウントを利用せず、データストアにユーザマスタを作成して行っている。

データのアップロード・ダウンロードにはGoogle App Engine SDK for Pythonで公開されているappcfg.pyとbulkloader.yamlを使った一括ローダーが一般的だろう。
データのアップロードとダウンロード

しかし、「開発用サーバーへのデータのロード」にローカル環境へのコマンドが記載されているが、同じようにやってもうまく行かず、結局イマイチよく分からなかった。これってpythonで作ったアプリに対してだけなのかな、って判断した。なので、マスタ登録用のロジックを組んで・・・って感じで登録を行っていた。

これが相当面倒・・・
できれば、ユーザマスタとか他のマスタデータをエクセルやCSVファイルとかで用意して、ローカル環境で動作確認をしたかった。

色々調べたり、試してみたりしていたところ、
httplib.BadStatusLine
という例外が発生していた。

これを調べてみるとProxy設定の記事にたどり着いた。

おや?

会社からGAE環境にアップするときには、会社のProxy設定をしている。
ということは??ローカルURLでProxy設定を行うのか?????

やってみよう!!

ということで、やってみた。

・・・

・・・・・・

でけたーーーーーーーーー!


という事で、データアップロードの手順とかまとめる。
諸々のインストールとかEclipseからGAE/JでWebApplicationとして実行できるとか、yamlファイルを作成と編集とか、そこらへんは割愛!

  • 設定内容
    • OS:Windows
    • ポート番号:8888
    • リモートAPIのパス:http://localhost:8888/remote_api
    • アップするデータファイル:CSVファイル

  1. Google App Engine for Pythonにパスを通す
    set PATH=%PATH%;appEnginePython¥bin
  2. Proxy設定を行う
    set HTTP_PROXY=http://localhost:8888
    set HTTPS_PROXY=http://localhost:8888
  3. Eclipseで該当のアプリを起動
  4. アップロードコマンドの実行!
    appcfg.py upload_data
    --filename=xxxxx.csv
    --config_file=bulkloader.yaml
    --url=http://localhost:8888/remote_api
    --kind=xxxx
    -v --no_cookies --email=test@example.com --passin
  5. メールアドレスのパスワードの入力が求められるので、入力

上記手順でローカル環境へのアップロードが完了する!(はず・・・)

ちなみに、プロキシはEclipseの起動オプションで設定したものを、メールアドレスとパスワードは何でもOKです。
ポイントはアップロードコマンドにアプリケーションIDを指定するオプションを使用しないこと。

理由は分からないけど、アプリケーションIDを指定してしまうと、データが行方不明になりましたw

ダウンロードも同様の設定でできた〜

2011/12/14

GAEのことでやってみたい事のメモ

GAEを使ってやってみたい事を忘れないようにメモメモ。
  1. 簡単なアプリを作って公開する
  2. RDB→Bigtable(Key-Value)のDB設計方法の変換
  3. Slim3プロジェクトのディレクトリ構成の変更方法をまとめる
  4. ログのフォーマット変換とローカル環境でのログファイル保存方法

1は自分の勉強のため。
まずログイン処理をする。 そのあと、簡単な掲示板を作ってみる。 これで、一連の処理の流れを押さえられる、と思うから。

2は、RDBとは異なり敢えて非正規化をすることが必要とあるけど、 実際にはどのように設計すればいいのか、という具体例を見つけることができなかった。 (私の検索能力の問題だな・・・) だから、RDBでの簡単なテーブル2,3個をBigtable用にデザイン変更にしてみようかと。

3は、Slim3のデフォルトのディレクトリ構成が個人的に好きでないからww

4は、仕事上、ログのフォーマットを記録する必要があったから調べたので。 それを忘れないようにまとめておこうかと思います。

AndroidやGAEの事を考えると、 Googleさんは”JavaVM”という仮想OSを新しいOSとして利用することで、 マルチプラットホームを実現して、より簡単にアプリとかのサービスを 展開していこうとしているんだろうな~
となると、今のOSの未来も変わってくるのかな??

さて、今日はメモだけで寝ようかな~

2011/12/11

【GAE】Eclipseローカルで起動時に出るエラーメッセージ

会社のようなプロキシ経由で外部ネットワークに接続する場合、 Google App Engine(以降、GAE)をローカルで実行する際に 以下のようなエラーメッセージが表示されることがある。 (バージョン情報は伏せ時にしてます。)
Unable to access https://appengine.google.com/api/updatecheck?runtime=java&release=x.x.x×tamp=xxxxx1&api_versions=['x.x']
どうやら実行時にアプリのGAE SDKのバージョンと 公開されている最新のGAE SDKのバージョンの比較をするらしい。 その時、プロキシのせいで問い合わせができずにエラーが出ているみたい。 そこで、下図の画面で実行時のプロキシ設定を追加。

【画面表示】
プロジェクトを右クリック > Run As > Run Configrations > Argmentsタブをクリック

【追加内容】
proxy hostやproxy postは適宜変更で。

-Dhttp.proxyHost=<proxy host>
-Dhttp.proxyPort=<proxy port>

-Dhttps.proxyHost=<proxy host>
-Dhttps.proxyPort=<proxy post>

【実行環境】

Eclipse EE3.7
Java SDK1.0.27

【参考サイト】
Eclipse(Galileo)のGAEでプロキシ