2010年3月11日木曜日

GAE/Jのドキュメントを読んでみる その1(App Engine Java Overview)

以下、ドキュメントを読んだ際のメモ。

App Engine Java Overview

  • GAEを用いることにより、標準的なjava技術を用いてWebアプリケーションを開発することができ、それらをGoogleのスケーラブルなインフラ上で動作させることができる。
  • Java 環境は Java6 JVM や Java Servlets interface を提供する。また、JDO, JPA, JavaMail, JCache 等の標準的なインタフェースを、App Engine のスケーラブルなデータストアやサービスをサポートするために提供している。標準仕様のサポートはアプリケーション開発を簡単にし、また独自の servlet 環境へのポーティングを容易にする。Google Plugin for Eclipse は、新しいプロジェクト・ウィザードやデバッグ設定を提供する。
  • GAE/J は、Google Web Toolkit (GWT)により、ワールドクラスのWebアプリケーションの開発とデプロイを容易にする。
  • Eclipse plugin は、App Engine と GWT の SDK を同梱している。
  • 他のJava用IDEと同様、サードパーティのプラグインも存在する。NetBeans や IntelliJ など。
  • まだ入手していないなら、the Java Getting Started Guide を読みましょう。

The Java Runtime Environment

  • JVMは java6。
  • App Engine SDK は Java5 以降をサポート。(Java 6 JVMは Java6 までの他のバージョンのコンパイラでコンパイルされたクラスを扱うことができる)
  • App Engine は Web アプリケーションに Java Servlet 標準を採用している。そのため、servlet クラス、JSPs、静的ファイル、データファイルを、デプロイメント・ディスクリプタ (web.xmlファイル) や他の設定ファイルを、標準仕様どおりの WAR ディレクトリ構成で用意することができる。
  • App Engine は リクエストをデプロイメント・ディスクリプタにしたがって呼び出されたサーブレットによって処理する。
  • JVM は安全なサンドボックス環境で実行される。
  • サンドボックスは、アプリケーションが他のアプリケーションのパフォーマンスやスケーラビリティに干渉しないことを保証する。例えば、アプリケーションは、スレッドの生成、ローカルファイルへの書き込み、自由なネットワークコネクションの確立等ができない。また、JNI他のネイティブコードを扱えない。JVM は、サンドボックスの中では、Javaのどのようなバイトコードでも実行することができる。
  • 更なる情報は、Servlet Environmentを参考のこと。

The Datastore, the Services and the Standard Interfaces

  • App Engine は、スケーラブルなサービス群を提供する。それはアプリケーションから、データの永続化、ネットワーク上のリソースへのアクセス、イメージデータの操作のようなほかのタスク等のために利用することができる。
  • これらのインタフェースはポーティングを可能とするために、可能な限り標準APIに準拠している。
  • 各サービスは、新たなインタフェースアダプタの開発や直接的なアクセスのため、完全な低レベルを提供している。
  • アプリは、App Engine Datastore を信頼性のあるスケーラブルなデータストレージとして使用することができる。このデータストアは2つのJavaの標準的なインタフェースである Java Data Objects (JDO) 2.3 と Java Persistence API (JPA) 1.0 に対応している。これらのインタフェースは、オープンソースの実装である DataNucleus Access Platform を利用して実装されている。
  • App Engine Memcache は、データストアへのクエリや演算結果のキャッシュ用の高速かつ一時的な分散ストレージを提供する。Java のインタフェースは JCache (JSR 107)。
  • アプリは Web 上のリソースにアクセスや、HTTP や HTTPS プロトコルを用いて他のホストと通信するために、URL Fetch service を利用することができる。Java からは普通に java.net.URLConnection とその関連クラスを使えばよい。
  • アプリは、アプリケーションの管理者やログイン中のユーザに代わってメールを送信するために、Mail サービスを利用することができる。Java からは普通に JavaMail を使用すればよい。
  •  Images サービスは、さまざまなフォーマットのイメージデータについて、トリミング、回転、リサイズ、photo color enhancement などを含む、変換や操作の機能を提供する。このサービスは CPU 負荷の高い画像処理タスクを受け持ち、アプリケーションサーバにWebリクエストを処理させるリソースを残す。(もちろん、アプリケーションサーバ上でサンドボックス制約の範囲内でJVMベースの画像処理ソフトを使うこともできる)
  • アプリは、Google Accounts をユーザー認証に利用することができる。Google Accounts は、ユーザーアカウントの作成、ログインができ、既にアカウントを持っているユーザはそのアカウントをアプリ上で使うことができる。アプリは現在ログイン中のユーザを検出することができ、そのユーザのemailアクセスを使用することができる。アプリは、Google Accounts 経由でのアクセスに対して、デプロイメント・ディスクリプタで制約をかけることができ、ユーザーがサインインしているかどうかを検出することができ、servlet request の getUserPrincipal() メソッドで email アドレスを取得できる。アプリは低レベルのGoogle Accounts API で、サインインおよびサインアウトの URL の作成や、datastore 内の storage に適したユーザーデータオブジェクトを取得することができる。(メモ:guestbookサンプルアプリでいきなり com.google.appengine.api.users.User を永続化できた理由はコレか。)

Scheduled Tasks

  • アプリは、定期的にアプリの URL を呼び出すスケジュールされたタスクを設定することができる。詳細は Cron Jobs を参考のこと。

Java Tools

  • App Engine Java SDK は、アプリのテスト、アプリケーションファイルのアップロード、ログデータのダウンロードツールを含んでいる。また、App Engine は Apache Ant がプロジェクトに共通のタスクを簡略化するためのコンポーネントを含んでいる。Google Plugin for Eclipse は Eclipse に App Engine 開発、テスト、デプロイ機能を追加する。また、完全な App Engine SDK を含む。また、Eclipse plugin は Google Web Toolkit アプリケーションの開発と App Engine 上での実行を容易にする。
  • 開発サーバ は、開発とテストのためにローカルコンピュータ上で動作する。サーバはデータストア、サービス群、サンドボックスの制約をシミュレートする。また、開発サーバは、アプリがテスト中に実行したクエリを元にデータストア・インデックスの設定を生成することができる。
  • AppCfg という多目的ツールは、App Engine 上で動作する自分のアプリとのすべてのコマンドライン操作を扱う。AppCfg はアプリの App Engine へのアップロードや、コードをアップデートする前に新しいインデックスを構築するためにデータストアインデックス設定のみを更新することができる。また、アプリのログデータをダウンロードすることもできるので、自前のツールでアプリのパフォーマンス分析をすることもできる。
GAE/Jのドキュメントを読んでみる その2(The Java Servlet Environment)に続く。

0 件のコメント:

コメントを投稿