Professional Documents
Culture Documents
• 基本的にネットワーク系のプログラマーです
ここで CM
現在、 CodeZine という開発者向けの
情報サイトで「 Google App Engine for
Java を使ってみよう!」という連載をや
っています。
http://codezine.jp/author/592
よろしければブックマークにご登録を!
今日は何を知りたい?
• GAE for Java 全般の話
• Google Plugin for Eclipse
– インストール
– 使い方
• データストア
– データストア
– データセレクト
• Memcache
• URL Fetch
• Mail
• Images
• Google Accounts
• タスクのスケジュール
GAE 全般の話
Google App Engine とは
• 2008 年4月8日 Google Campfire One
でローンチされた Google のクラウドサー
ビスです。
• アプリケーション・サーバ、データベー
ス、データ・ストレージ・サービスから
構成されている。
Google App Engine for Java
• 2009 年 4 月 7 日 Google Campfire One
にて Java 版を発表!
– http://www.youtube.com/watch?v=P3GT4-m_6RQ
– http://www.youtube.com/view_play_list?p=DFDBB63922B90A70
メリット
• 最大のメリットは突発的なトラフィックに対応可能。サ
ービスが突然大人気になっても即座にスケールアウトで
きる。
• 各種 Google サービスとの親和性が高く、特に認証サー
ビスやメールサーバを自前で用意する必要がない。
– GAE の主要 API は、 Java の標準 API に準拠しており Google App
Engine 用にプログラムを書き直す必要がない。
http://blogs.webtide.com/gregw/entry/google_appengine_uses_jetty
ここだけの話。。。
com.google.apphosting.runtime.jetty.JettyServletEngineAdapter.serviceRequest(JettyServletEngineAdapter.java:125)
com.google.apphosting.runtime.JavaRuntime.handleRequest(JavaRuntime.java:235)
com.google.apphosting.base.RuntimePb$EvaluationRuntime$6.handleBlockingRequest(RuntimePb.java:4547)
com.google.apphosting.base.RuntimePb$EvaluationRuntime$6.handleBlockingRequest(RuntimePb.java:4545)
com.google.net.rpc.impl.BlockingApplicationHandler.handleRequest(BlockingApplicationHandler.java:24)
com.google.net.rpc.impl.RpcUtil.runRpcInApplication(RpcUtil.java:359)
com.google.net.rpc.impl.Server$2.run(Server.java:792)
com.google.tracing.LocalTraceSpanRunnable.run(LocalTraceSpanRunnable.java:56)
com.google.tracing.LocalTraceSpanBuilder.internalContinueSpan(LocalTraceSpanBuilder.java:489)
com.google.net.rpc.impl.Server.startRpc(Server.java:748)
com.google.net.rpc.impl.Server.processRequest(Server.java:340)
com.google.net.rpc.impl.ServerConnection.messageReceived(ServerConnection.java:422)
com.google.net.rpc.impl.RpcConnection.parseMessages(RpcConnection.java:319)
com.google.net.rpc.impl.RpcConnection.dataReceived(RpcConnection.java:290)
com.google.net.async.Connection.handleReadEvent(Connection.java:419)
com.google.net.async.EventDispatcher.processNetworkEvents(EventDispatcher.java:733)
com.google.net.async.EventDispatcher.internalLoop(EventDispatcher.java:207)
com.google.net.async.EventDispatcher.loop(EventDispatcher.java:101)
com.google.net.rpc.RpcService.runUntilServerShutdown(RpcService.java:249)
com.google.apphosting.runtime.JavaRuntime$RpcRunnable.run(JavaRuntime.java:373)
java.lang.Thread.run(Unknown Source)
http://blogs.webtide.com/gregw/entry/google_appengine_uses_jetty
JVM サンドボックス
• JVM は、セキュアなサンドボックス内で
動作しており、他人のアプリと分離され
た状態で実行されます。
• さらに、他のアプリによって、あなたの
アプリのパフォーマンスやスケーラビリ
ティに影響が出ることがありません。
制限
• スレッドの生成ができません。
• ファイルシステムにファイルの書き出し
ができません。
• 自由なネットワーク接続ができません。
• JNI を含むネイティブコードの実行ができ
ません。
利用料金
リソース 単位 単位当たりの費用
レスポンス 1ギガバイト $0.12
リクエスト 1ギガバイト $0.10
CPU 利用時間 1CPU 時間 $0.10
ストレージ ギガバイト/日 $0.005
電子メール 1通 $0.0001
無料の範囲(1日)
リソース 単位
レスポンス 10 ギガバイト
リクエスト 10 ギガバイト
CPU 利用時間 46.3 CPU 時間
ストレージ 1 ギガバイト/日
電子メール 2000 通
* 月間 500 万アクセス相当
使いすぎないか心配。。。
• Google App Engine には新たに Billing と
いう機能が搭載され、利用料の上限を設
定できるようになりました。
標準的な設定
Total
Paid Free Daily
Resource
(% of Budget) Budget Unit Cost Quota Quota Quota
58.29 CPU
CPU Time 60% $1.20 $0.10 11.99 46.30 hours
Bandwidth
Out 16% $0.32 $0.12 2.66 10.00 12.66 GBytes
デモ
GAE へのデプロイ
デモ
アプリの公開
• アプリは appspot.com ドメイン上の予約
したサブドメインから使用するか、
Google Apps を使用して、独自ドメイン
から行うことができます。
GAE コントロールパネルの
使い方
デモ
Images Java API
URL Fetch Java API
Memcache Java API
Datastore Java API
データストア
• データストアを扱う API は3種類
– Java Data Objects (JDO)
– Java Persistence API (JPA)
– low-level datastore API
• JDO が一番使いやすい。
• Google Plugin では標準で Enhancer 用の
設定ファイルが含まれている。
• Google Plugin では、自動的に Enhancer
を実行してくれる。
Enhancer
• クラスファイルを XML で記述したメタデ
ータを元に、 PersistenceCapable を実装
したクラスに改変するものです。
• PersistenceCapable を実装したクラスの
場合はエンハンサを通す必要はありませ
んが、毎回同じインターフェイスを実装
するのは面倒ですのでエンハンサを利用
します。
@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class Employee {
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
private Long id;
@Persistent
private String firstName;
@Persistent
private String lastName;
@Persistent
private Date hireDate;
Employee employee = new Employee("Alfred", "Smith", new Date());
PersistenceManager pm = PMF.get().getPersistenceManager();
try {
pm.makePersistent(employee);
} finally {
pm.close();
}
型 Java class ソートオーダー note
@Persistent(serialized = "true")
private DownloadableFile file;
Google Accounts Java API
最後に
• 「京都 IT エンジニア飲み会」というグル
ープをやっているので、ぜひご参加くだ
さい。
– http://groups.google.co.jp/group/kyoto-it
スパム対策のために承認制になっておりま
すが、オープンなグループですので、おき
がるにご参加いただけます。
ネットでこの資料をごらんになった方も、
関西圏・京都近郊の IT エンジニアの方はぜ
ひご参加ください。
Photo by (c)Tomo.Yun http://www.yunphoto.net