Google App Engineがやって来るJa!va!だぁ!
米グーグルは2008年4月7日、Pythonで作成したプログラムが動くクラウド・コンピューティング環境「Google App Engine」(以下、GAE)を発表しました。それからちょうど1年後の2009年4月7日、GAEはPythonに加えてJavaへの対応(以下、GAEj)を発表しました(参考:グーグルのクラウドがJava対応、JRubyも稼働か)。
2008年のGAE発表当初、日本ではPythonのプログラマ数があまり多くなく、反響もいまひとつの感じがありましたが、今年になって開発者や利用実績が多いJavaに対応したことで、GAEのユーザー数が一気に増加する可能性があります(参考:App Engine発表後、クラウド時代に向けJavaの対応が加速)。
本連載では、GAEjの概要・特徴から環境設定、アプリケーションの作成、GAEjクラウド上でのBigtableの操作、jQueryによる日本語表示の解決、そしてDWRによるjQueryとGAEjサーブレットの連携までといった業務用アプリケーションとして応用できるところまで徹底解説していきます。
GAEjを理解する8つのポイント
まずは、GAEjの主な概要・特徴を8つ紹介します。
【1】Java 5/6のサーブレット/JSP、JavaBeansが使える
クラウド上にあるWebアプリケーション実行環境は、Javaのバージョン6対応ですが、アプリケーションはJava 5/6のどちらでも作成できます。また、対応アプリケーションはJava Servlet(サーブレット)が基本ですが、ほかにJSP(JavaServer Pages)や、サーブレットから呼び出されるJavaBeansも使用可能です。
【2】Java言語以外でも実行できる
GAEjのJVM(Java Virtual Machine)は、Javaのバイトコードを実行するので、生成するコンパイラがあれば、Java言語以外でも実行できます。例えば、JRubyやGroovy、Scala、JavaScript(Rhino)、PHP(Quercus)なども動作可能です。
【3】Eclipseプラグインがある
GAEj用のJavaアプリケーション作成とクラウド環境へのデプロイは、コマンドラインからも可能ですが、Eclipseのプラグイン「Google Plugin for Eclipse」が用意されているので、アプリケーションの作成からクラウド環境へのデプロイまでを、すべてEclipseの開発環境内で行えます。
なお、プラグインはEclipse 3.4(Ganymede)およびEclipse 3.3(Europa)に対応しています。
【4】GAEjで制限されているJavaの機能
GAEjでは、サーブレットを使用するサーバサイドJavaの機能をほとんど使用できますが、一部サポートされていない機能もあります。
例えば、スレッドの起動やファイルシステムへのアクセス、ソケット通信、それにJNI(Java Native Interface)によるJavaプログラムからの、ほかの言語で開発されたネイティブコード・プログラムの利用はできません。
【5】JDOとJPAによるBigtableへのアクセス
グーグルのデータ管理システム「Bigtable」に、JDO(Java Data Object)とJPA(Java Persistence API)を通じてアクセスできます。JDOおよびJPAの詳細は、下記記事を参照してください。
ただし、BigtableはRDB(Relational Database)ではないため、アクセスにはGAEj固有の方式も含まれます。そのため、現在多くの業務システムで使われているRDBMSからGAE上に移植するにはデータベースの設計自体を変える必要があると議論されているところです。
【6】専用Java APIがあるがある
主な専用Java APIは以下になります。
- Memcache Java API
Bigtableの直接アクセスを一部代替するJCacheでのイン・メモリのキャッシュサービスを利用できる - URLフェッチAPI
JavaプログラムからHTTPとHTTPSリクエストによって、ほかのホストへアクセスとデータ取得ができるJavaプログラムからHTTPとHTTPSリクエストによって、ほかのホストへアクセスとデータ取得ができる - Mail API
GAEjの管理者、およびユーザーからメールを送信できるGAEjの管理者、およびユーザーからメールを送信できる - Image API
専用のImageサービス機能によって、イメージデータのサイズ変更や回転、反転などができる専用のImageサービス機能によって、イメージデータのサイズ変更や回転、反転などができる
【7】Googleアカウントで認証
GAEjアプリケーションにアクセスするユーザーに対して、Googleアカウントでの認証機能を提供します。
【8】そのほかGWTやcronも
【5】〜【7】の機能は、Python版でサポートされていたものとほぼ同様ですが、Java版ではこのほかに、GWT(Google Web Toolkit)でのAjaxアプリケーション作成、UNIXなどでおなじみの日時指定スケジュールジョブ実行ツールcronのサポートなどが追加されています。
GWTはAjaxのプログラムをJavaで作成して変換する機能を持つグーグルのフレームワークです。詳しく知りたい読者は下記記事を参照してください。
Google App Engineのアカウントを取得してみよう
作成したプログラムをグーグルのクラウド環境で稼働させるためには、最初にGAEのページで認証キーを所得する必要があります。
今回のJava版の発表は「Early Look」扱いで、ユーザー数は当初1万人限定でしたが、その後すぐに2万5000人に拡張されています。筆者の場合は、サインアップから認証キーをリクエストして1日半くらい経過してから、メールが届いてGAEjの利用が可能になりました。
筆者はGAEjの使用許諾メールが届くのにそれほど時間はかからないと思って、何度か受信トレイをのぞきましたがメールは届いておらず、人数制限に引っ掛かってしまったかと思っていました。翌日になって、何げなくメールボックスを開くと、グーグルからのメールが届いていたという感じで、ある程度は待つ必要があるようです。
そのほかの認証キーを取得する際の注意点については、主にPython版の説明ですが下記記事が参考になります。認証キーを取得する部分はJava版とほぼ共通です。
エンジニア視点で比較する"雲"の違い
特集:クラウド体験記(前編) Amazon EC2、Google App Engine、Windows Azure、Force.comという4大クラウドの機能や使いやすさを比較。あなたは、どのクラウドが最適か?
「Insider.NET」フォーラム 2009/3/17
次ページからはGAEjアプリケーション作成に入っていきますが、今回はGAEjのEclipse環境設定から、簡単な表示をするアプリケーションの作成、それにGAEクラウド環境へのデプロイ・実行までを解説します。
Copyright © ITmedia, Inc. All Rights Reserved.