気楽なソフト工房

プログラミングについていろいろな記事を書いています。



mykonos2008

Author:mykonos2008
システムエンジニアとして働いている30代の会社員です。
仕事や趣味でプログラムを書いている方の役に立つ記事を書いていきたいと思っています。
ご意見、ご感想はこちらまで
If you are an english speaker,Please visit my english blog.

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
ブログの名前にC#としておきながら、最近、その他の内容が多くてすみません。
Google App Engineとクライアント側のC#を組み合わたソフトを作りたくて、Pythonで
あれこれやっていたところ、先週火曜日4月8日に、Google App EngineのJavaサポートが
発表されたため、つい飛びついてしまいました。

しばらく、Javaから遠ざかっていたので、開発環境を整えるところからスタートしました。

JDK1.6をインストールする
Google App EngineのJavaはJava6のJVMを採用しているので、開発する際にもJDKの1.6を使うことが推奨されます。
ただ、どうしても1.6が手に入らない場合は、1.5でも開発できるようです。

私は以下のURLからJDK1.6をインストールしました。

http://java.sun.com/javase/downloads/index.jsp

Eclipse3.4をインストールする
「Google App Engine SDK」とコマンドラインを使って開発することも出来るのですが、やはりEclipseを使った方が断然、便利です。
Eclipse3.3または3.4に対して、Google App EngineのPluginが提供されているので、そのどちらかをインストールします。
私は3.4をインストールしました。インストール作業は以下のURLのサイトを参考にさせていただきました。ありがとうございました!

「金子研究室」

Google Plugin for Eclipseをインストールする
次にGoogle App Engineの開発用プラグインをインストールします。ヘルプ→ソフトウェア更新で以下のURLからインストールします。

http://dl.google.com/eclipse/plugin/3.4

「Google Plugin for Eclipse3.4」と「Google App Engine Java SDK 1.2.0」をインストールすればOKです。
「Google Web Toolkit SDK 1.6.4」は任意です。

インストールする際、Eclipseは他のプラグインとの依存関係をチェックしながらインストールするため、とてもなが~い時間がかかってしまいます。
これを防ぐためには、Google App Engineのロケーションを除く、登録済みのロケーションのチェックを一旦外し、チェックが走らないようにします。
これをすると、すんなりインストールが終わります。



まだ日本語環境をインストール出来ていない状態の画像なので、分かりにくいかもしれませんが、上の画像の[ManageSites..]ボタンの位置にある
ボタンからロケーションの一覧を開けると思います。

プロジェクトを作成する
プラグインをインストールし、Eclipseを再起動すると、ファイルメニューの新規作成にGoogle App Engine用の
Webアプリケーションプロジェクトが表示されるはずですので、それを選んでプロジェクトを作成します。



プロジェクトのフォルダ構成は通常の「動的Webプロジェクト」とは少し異なっているのですが、
Javaに馴染んでいる方であれば、違和感はないと思います。

こんな感じです。

[プロジェクト名]
     |--[src] ・・・ソース
     |--[war]
        |--index.html
        |--[WEB-INF]
             |--[classes]
             |--[lib]
             |--appengine-web.xml  ・・・App Engine用の設定ファイル
             |--web.xml

YoutubeのFeedを取得するサーブレットを作成する
前回の記事でPythonで作ったYoutubeのFeedを取得するアプリをJavaで作ってみました。

@SuppressWarnings("serial")
public class RiaMediatorServlet extends HttpServlet {
  
  private static final Logger _log = Logger.getLogger(RiaMediatorServlet.class.getName());
  
  public void doGet(HttpServletRequest req, HttpServletResponse resp)
      throws IOException {
    resp.setContentType("text/xml;charset=UTF-8");

    BufferedReader reader = null;
    PrintWriter writer = null;
    
    try
    {
      writer = new PrintWriter(new OutputStreamWriter(resp.getOutputStream(),"UTF-8"));
      
      URL url = new URL("http://gdata.youtube.com/feeds/api/standardfeeds/recently_featured?start-index=1");
        reader = new BufferedReader(new InputStreamReader(url.openStream(),"UTF-8"));
        
        String line;
        while( (line = reader.readLine()) != null)
        {
          writer.println(line);
        }        
    }
    catch(Exception ex)
    {
      _log.severe(ex.toString());
    }
    finally
    {
      try
      {
        if(reader != null)
        {
          reader.close();
        }
      }
      catch(Exception ex){}

      try
      {
        if(writer != null)
        {
          writer.close();
        }
      }
      catch(Exception ex){}
    }
  }
}

Feedの取得は、URLクラスを利用して行っています。URLクラスをはじめとするjava.netのクラスは、Google App Engine用の実装が
されているので、実際の処理はGoogle App Engineのインフラストラクチャを使って行われます。

また、Pythonと同じく、SandBox内で実行されるため、以下のような制限があります。
「接続できるポートはHTTP(80)とHTTPS(443)のみ」

Google App Engineへのデプロイ
Google App Engineへのデプロイもとても簡単です。まずは、Google App Engineに登録してアプリケーションIDを取得してください。
そして、「appengine-web.xml」の「application」欄に取得したアプリケーションIDを入力します。



そして、ツールバーのGoogle App Engineマークのアイコンをクリックし、表示されるダイアログにEmailとパスワードを入力して実行します。
これで完了です。



ここで以下のようなエラーが出る場合があります。

Creating staging directory
Scanning for jsp files.
Scanning files on local disk.
Initiating update.
Unable to upload:
java.io.IOException: Error posting to URL: http://appengine.google.com/api/appversion/create?app_id=riamediator&version=1&
400 Bad Request
Invalid runtime specified.

	at com.google.appengine.tools.admin.ServerConnection.send(ServerConnection.java:114)
	at com.google.appengine.tools.admin.ServerConnection.post(ServerConnection.java:66)
	at com.google.appengine.tools.admin.AppVersionUpload.send(AppVersionUpload.java:345)
	at com.google.appengine.tools.admin.AppVersionUpload.beginTransaction(AppVersionUpload.java:159)
	at com.google.appengine.tools.admin.AppVersionUpload.doUpload(AppVersionUpload.java:68)
	at com.google.appengine.tools.admin.AppAdminImpl.update(AppAdminImpl.java:41)
	at com.google.appengine.eclipse.core.proxy.AppEngineBridgeImpl.deploy(AppEngineBridgeImpl.java:203)
	at com.google.appengine.eclipse.core.deploy.DeployProjectJob.runInWorkspace(DeployProjectJob.java:97)
	at org.eclipse.core.internal.resources.InternalWorkspaceJob.run(InternalWorkspaceJob.java:38)
	at org.eclipse.core.internal.jobs.Worker.run(Worker.java:55)
java.io.IOException: Error posting to URL: http://appengine.google.com/api/appversion/create?app_id=riamediator&version=1&
400 Bad Request
Invalid runtime specified.

これはGoogle App EngineでJavaを使用するための認証が済んでいないために発生するエラーです。

以下のURLから認証出来ます。当面は、先着10,000アカウントに限定するみたいなので、使用されたい方はお早めに。

http://appengine.google.com/promo/java_runtime

しばらく(私は5分くらいでした)待つと、メールが来ますので、その後、再度デプロイすると成功するはずです。

Google App Engineでサーバサイドにおける開発言語の主流であるJavaが使えるようになったことで、
Google App Engineの広がりが加速するのは間違いないと思います。

また、今回のアップデートでcronを利用することも出来るようになりました。これで業務アプリケーションへの
適用もしやすくなったのではと思います。ただ、1リクエスト30秒以内という制限があるので、
処理の粒度の工夫がいるとは思います。

コメント

コメントの投稿

管理者にだけ表示を許可する

トラックバック

http://csfun.blog49.fc2.com/tb.php/45-92a95681

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。