97
G* クラ ウド ─ 雲のかなたに ─ アスタ 2009/10/08 @JJUG CCC def speaker = new Cast(name:”T.Yamamoto”,version:”G*C-2009-10-08”)

G*なクラウド ~雲のかなたに~

Embed Size (px)

DESCRIPTION

日本 Java ユーザグループ CCC Fall 2009 でのスライドです。「G*なクラウド ~雲のかなたに~」まわりを見渡せばクラウドの話で持ちきりです。様々なフレームワークがクラウドに対応するなか、もちろんG*なクラウド活用法も存在します。Grails でプラグインを使ってGAE/Jに対応や、Cloud Foundry(EC2)、GroovyでのGAE/J「Gaelyk」など、Grails/Groovyでのクラウドを紹介・解説します。

Citation preview

Page 1: G*なクラウド ~雲のかなたに~

G*なクラウド─ 雲のかなたに ─

アスタ

2009/10/08 @JJUG CCC

def speaker = new Cast(name:”T.Yamamoto”,version:”G*C-2009-10-08”)

Page 2: G*なクラウド ~雲のかなたに~

まえがき

 まわりを見渡せば、クラウドの話で持ちきりです。様々なフレームワークがクラウドに対応するなか、もちろんG*なクラウド活用法も存在します。 今回は、Grails/Groovyでのクラウドを紹介・解説します。

Page 3: G*なクラウド ~雲のかなたに~

名前:山本 剛 (やまもとつよし)

所属:株式会社ニューキャストDTP、組版屋、印刷業界向けWebアプリ開発など。案件は75%Grailsを使ってます。

JGGUG(じぇいがぐ) 名古屋支部長です。「Grails徹底入門」9-11章を書きました。 Grails Acegi Plugin の中の人だった。

http://d.hatena.ne.jp/mottsnite/twitter @tyama

自己紹介

Page 4: G*なクラウド ~雲のかなたに~

※注意事項

本日ライブコーディングは行いません。まとめサイト的な内容です。EC2やGAE/Jの奥深い内容の質問は後日回答となる場合があります。

Page 5: G*なクラウド ~雲のかなたに~

本日の議題G*(アスタ)ってなに?Groovy/Grails?Why?G*(アスタ)をクラウドへAWSベースMorph AppSpaceStaxCloud Foundry

GAE/JGrails+AppEngineプラグインGaelyk

まとめ・比較・利点・欠点

Page 6: G*なクラウド ~雲のかなたに~

G*(アスタリスク)

JGGUGjapan grails/groovy user group

Page 7: G*なクラウド ~雲のかなたに~

G*(アスタリスク)って何?JGGUGでは、Groovyに関連する技術、Groovyはもちろんのこと、Grails - JEEフレームワークGriffon - デスクトップアプリ用フレームワークGant、Gradle - ビルドツール等のことを、

G*(アスタリスク)とよびます。

JGGUGjapan grails/groovy user group

Page 8: G*なクラウド ~雲のかなたに~

GroovyGroovyはJVM上で動作する動的スクリプト言語。簡潔で強力な表現力。DSLなどに適した高い柔軟性。Javaとの親和性の良さが特徴。JSR-241として標準化されてる。

Page 9: G*なクラウド ~雲のかなたに~

何故Groovy?(個人的意見)Javaを楽しく簡潔にコーディングほぼJavaなのでJava開発者には入りやすい。GroovyはJava!(昔そんなことをロンドンで聞いた)わざわざ他の言語を覚えなくて良いよ!

深入りすると大変だよ!ケガするよ!

Page 10: G*なクラウド ~雲のかなたに~

Grailsとは・・・JavaEEで実績のあるSpringフレームワークやHibernateをベースに、Groovyを活用して効率よくJavaEE開発を行うことのできる、フルスタックフレームワークです。

JVM

開発フレームワーク・DSL

Warファイルをデプロイ

Grails コア (Java+Groovyで実装)

Webコンテナ Testing コード生成

Grails プラグイン

プロダクション

Page 11: G*なクラウド ~雲のかなたに~

何故Grails?利点DRY、CoC (この辺の話は詳しい人にお願いするとして・・・)

DSLでのわかりやすいコード豊富なプラグインでサクサク開発各種機能、Web開発に必要なパーツ認証、AJAX、Flex、JMS、AppEngine、UI関連等。

プラグイン独自に開発して、モジュラな開発。欠点ダイナミック過ぎて純粋なJEEアプリよりは・・・。IDE・・・・!?個人的には無問題。テキストエディタでOKSpringSourceの人がEclipse対応の開発を開始してるとか!?

Grailsプロジェクトがほぼそのままプラグイン化できるのでCMS

的な感覚も持ち合わせている。

Page 12: G*なクラウド ~雲のかなたに~

JGGUG、G*にワークショップに参加してね!

詳しくは→ http://www.jggug.orgこんな方はとくに!!!動的だけど静的もほしい。柔軟な開発がしたい。技術の進歩の速度に疲れた方。もっと詳しい事を議論したい方。さみしがりや。変わり者。言語オタク。矛盾の狭間にいて苦しい人。

JGGUGjapan grails/groovy user group

Page 13: G*なクラウド ~雲のかなたに~

G* と クラウド

Page 14: G*なクラウド ~雲のかなたに~

G*(アスタ)をクラウドへ基本的にJEEの動くクラウドであれば動作可能。注目のポイントは、大きく分けると3種類AWS(EC2,S3)ベースMorph AppSpaceStaxCloud Foundry Cloud Foundry (EC2)Google App Engine for JavaGrails+app-engineプラグインGAE/Jでライトに開発 Gaelyk

GrailsにやさしいPaaS。

本家運営!

Page 15: G*なクラウド ~雲のかなたに~

AWSベース

(EC2,S3)

Page 16: G*なクラウド ~雲のかなたに~

Morph AppSpace概要 サイト http://www.mor.ph/PaaSです。キューブ(Cubes)という単位で管理。Cubes - (Webサーバとアプリケーションサーバを組み込んだ仮想マシン単位)インフラはAWS。(EC2,S3)料金:2 Cubes/ DB:10GB データ転送:30GB ストレージ:20GB $1/日 $31/月料金表 http://www.mor.ph/information_pricing2009年5月から有料契約をしていないと無料な開発版が使えない。

Page 17: G*なクラウド ~雲のかなたに~

Morph AppSpaceツールなどWebベースのツールで管理がおこなえる。

Grailsをデプロイする公式サポートツールも存在する。現在 Grails-1.0.2 - v1.1.1に対応。

デプロイのサポートをするGrailsプラグイン。 http://grails.org/MorphDeploy+Plugin※たぶん古いのでメンテが必要。

Page 18: G*なクラウド ~雲のかなたに~

Morph AppSpace新規 AppSpaceサブスクリプション登録画面サブドメイン、DB等を設定2キューブ 1クレジット/日

Page 19: G*なクラウド ~雲のかなたに~

Morph AppSpaceツールのダウンロード

Page 20: G*なクラウド ~雲のかなたに~

ツールの使い方ツール設定ダウンロードしたツールを解凍grails-svn-morph-deployerファイルをGRAILS_HOME/binにコピーGRAILS_HOME/libにgrails-morph-deployer.jarをコピーGRAILS_HOME/scriptsにMorphDeploy.groovyをコピーデプロイ管理画面よりダウンロードしたmorph_deploy.propertiesをGrailsプロジェクトの直下にコピーコマンド grails morph-deploy を実行自動的にコンパイルしてwarを作りデプロイしてくれます。

Page 21: G*なクラウド ~雲のかなたに~

Morph AppSpace管理画面、DB管理 (phpPgAdmin)

Page 22: G*なクラウド ~雲のかなたに~

Morph AppSpaceクラウドの構成設計ツール (Beta)

Page 23: G*なクラウド ~雲のかなたに~

Staxhttp://www.stax.net/EC2をインフラにJEEの実行環境を提供。現在はベータ提供中なので無料。デプロイ用のSDKを提供している。Grails用の解説もある。http://wiki.stax.net/w/DBはStax MySQLデータベースを使用する。※MySQL 5.0.x (ローカルからもアクセス可能)

Page 24: G*なクラウド ~雲のかなたに~

Stax管理コンソール

Page 25: G*なクラウド ~雲のかなたに~

Staxアプリケーション作成管理画面 ↓

Page 26: G*なクラウド ~雲のかなたに~

Staxデータベース作成情報入力 →管理画面 ↓

Page 27: G*なクラウド ~雲のかなたに~

StaxSDKセットアップ公式ドキュメントより。http://wiki.stax.net/w/index.php/SDK

環境変数設定

Stax SDKのツールはgroovyで実装されています。※groovy-1.6.0

# curl -L http://stax-downloads.s3.amazonaws.com/sdk/stax-sdk-0.3.6-dist.zip > stax_sdk.zip

# unzip stax_sdk.zip

# rm stax_sdk.zip

# cd stax-sdk-0.3.6

export STAX_HOME=/opt/stax-sdk-0.3.6export PATH=$PATH:$STAX_HOME

Page 28: G*なクラウド ~雲のかなたに~

StaxでGrailshttp://wiki.stax.net/w/index.php/GrailsGrailsのプロジェクト作成grails create-app myapp

DataSource.groovy編集

...省略...dataSource {dbCreate = "update"driverClassName = "com.staxnet.jdbc.Driver"url = "jdbc:stax://jggug"username = "tyama"password = "*****"

}

...省略...

Page 29: G*なクラウド ~雲のかなたに~

StaxでGrailsConfig.groovyにstacktrace.logの無効指定追記

ライブラリをSTAX_HOME/libからコピーstax-appserver-[verson].jar,mysql-connector-java-5.1.6.jar, xstream-1.3.jar

warファイル書きだし # grails warstaxコマンドでデプロイ# stax app:deploy -a アプリID warファイル指定

... log4j = { appenders { null name:'stacktrace'...省略...

Page 30: G*なクラウド ~雲のかなたに~

Stax動作確認!

Page 31: G*なクラウド ~雲のかなたに~

Stax その他デプロイ履歴 開発メンバー追加

サーバゾーンの設定

クラスタサイズ

Page 32: G*なクラウド ~雲のかなたに~

Cloud Foundry

Page 33: G*なクラウド ~雲のかなたに~

Cloud FoundryとはURL http://www.cloudfoundry.comSpringSourceが提供する。EC2をインフラに使用したJEE用のPaaS。WebコンテナにSS社のtcサーバが使用されている。数クリックで簡単デプロイ+管理。Cloud ToolのWeb版!?

後で、少し歴史でも

Page 34: G*なクラウド ~雲のかなたに~

Cloud FoundryとはAmazon Web Servicesのアカウント登録が必要AWSの課金がされます。

現在はベータなので、Cloud Foundry自体は無料正式サービスは有料化の予定らしいです。

Page 35: G*なクラウド ~雲のかなたに~

Cloud Foundry 歴史 ①作者Chris Richardson (POJOs in Actionの著者さん)

2008/1 Cloud Tool の公開 EC2DeployフレームワークEC2にJEEアプリケーションを簡単にデプロイするためのGroovyベースのフレームワーク

Tomcatが動作して、EC2Deployで作業が行われるように設定されたAMIEC2Deployを使用してデプロイを行うMavenプラグイン

Page 36: G*なクラウド ~雲のかなたに~

Cloud Tool MavenプラグインMaven Goalscloudtools:deploy アプリケーションをEC2にデプロイする。 cloudtools:redeploy 再デプロイ。cloudtools:jmeter jmeterを起動してテストをロードする。cloudtools:stop インスタンスを停止する。 cloudtools:dbsave データベーススナップショットを cloudtools.s3.path に指定したS3に保存する。cloudtools:dbrestore cloudtools.s3.pathに保存したデータベースをリストアする。cloudtools:clone クラスタのコピーを作成する。cloudtools:describe クラスタの情報表示cloudtools:list 使用可能なクラスタのリストを出す。cloudtools:stop クラスタの停止。EBS(Elastic Block Store)も操作可能

Page 37: G*なクラウド ~雲のかなたに~

Cloud Foundry 歴史 ②2008/4 - 8:Grails用のプラグイン発表→公開 Cloud Tools Grails Plugin v0.1 - v0.4Grails用のコマンドが実装されるcloud-tools-deploy - EC2インスタンスを起動してWebアプリケーションを起動 (MySQLマスタ&スレーブ、Tomcat、Apache)cloud-tools-describe - インスタンスの情報を表示cloud-tools-redeploy - 再デプロイcloud-tools-stop⦆ - EC2インスタンスを停止

0.3、0.4で更にMySQLのバックアップ設定の実装やコマンドが追加

Page 38: G*なクラウド ~雲のかなたに~

Cloud Tools Grails Pluginコマンド一覧

cloud-tools-deploy cloud-tools-describe cloud-tools-redeploy cloud-tools-stop cloud-tools-add-app-server cloud-tools-clone cloud-tools-create-snapshot cloud-tools-curl cloud-tools-db-recreate cloud-tools-db-restore cloud-tools-db-save cloud-tools-enable-brb cloud-tools-disable-brb

cloud-tools-enable-ebs cloud-tools-enable-master-backups cloud-tools-enable-slave-backups cloud-tools-init-lb-pool cloud-tools-jmeter cloud-tools-list cloud-tools-restart-apache cloud-tools-sql cloud-tools-stop-jmeter cloud-tools-stop-mysql-slave cloud-tools-update-war cloud-tools-verify

Page 39: G*なクラウド ~雲のかなたに~

Cloud Foundry 歴史 ③2008/9:Elastic Block Store(EBS)対応2008/11:Clould Tools (Web版)のベータテスターをブログで募集2008/11 - 2009/1:Cloud Foundryベータ公開開始この辺りから、Dustin Whitney氏が参加して、多数のGrails用スクリプトを実装。v0.5-v0.7

2009/8/19:SpringSourceがSpring Source Cloud Foundryを発表

Page 40: G*なクラウド ~雲のかなたに~

Cloud Toolのデモ動画作者のサイトにGrailsでの動画あります。http://tinyurl.com/y9hb2go

Cloud Tool手順grails create-app democd demograils install-plugin cloud-tool.zip

Config.groovy設定importの追加aws.propertiesの指定

デプロイgrails cloud-tools-deploy

インスタンス情報grails cloud-tools-describe

停止grails cloud-tools-stop

こんな手順でした。

Page 41: G*なクラウド ~雲のかなたに~

Cloud Foundry 歴史 まとめCloud ToolからCloud Foundryへの歴史を見ることで、Cloud Foundryの中がどうなってるか分かったと思います。

中身は、もしかしてGrailsで実装されていたり!?

Page 42: G*なクラウド ~雲のかなたに~

Cloud Foundry 構成図構成図

Clould FoundryApache HTTP Server

tc Server

MySQL

HypericHQ&SIGAR

Amazon Web Services EC2

Page 43: G*なクラウド ~雲のかなたに~

Cloud Foundry デプロイ手順ログインすると、こんな画面。

Page 44: G*なクラウド ~雲のかなたに~

Cloud Foundry デプロイ手順アプリケーションをアップロードする

warファイルをセット

コンテキストルート

DBの設定

アプリケーション名をセット

Page 45: G*なクラウド ~雲のかなたに~

Cloud Foundry デプロイ手順アップロード完了

再生ボタンをクリック

Page 46: G*なクラウド ~雲のかなたに~

Cloud Foundry デプロイ手順起動画面で詳細設定

デプロイ名をセット

インスタンス設定

パブリックIP設定

Page 47: G*なクラウド ~雲のかなたに~

Cloud Foundry デプロイ手順起動画面で詳細設定

コンテナ設定

DB設定EBS設定

Page 48: G*なクラウド ~雲のかなたに~

Cloud Foundry デプロイ手順設定のテンプレート保存ができるように!

Page 49: G*なクラウド ~雲のかなたに~

Cloud Foundry デプロイ手順デプロイ!!起動完了!!

 起動!

Page 50: G*なクラウド ~雲のかなたに~

Cloud Foundry 管理デプロイメント詳細画面

詳細

UPTIME等

アプリケーション

Page 51: G*なクラウド ~雲のかなたに~

Cloud Foundry 管理デプロイメント詳細画面

詳細へApache

tc Server

MySQL

Page 52: G*なクラウド ~雲のかなたに~

Cloud Foundry 管理詳細画面。

基本情報

HTTPDサーバ

TCサーバ

Page 53: G*なクラウド ~雲のかなたに~

Cloud Foundry動作確認。

Page 54: G*なクラウド ~雲のかなたに~

Cloud Foundry 管理アカウント設定画面

AWSのACCESS KEY ID

KEY PAIRS

Page 55: G*なクラウド ~雲のかなたに~

AWSで確認動いてます。 SSHでログイン

Page 56: G*なクラウド ~雲のかなたに~

Cloud Foundry まとめSpringSourceが提供しているので、Grailsを使うのに何かと安心感がある。個人的には、管理画面からも良いのだが、GrailsのコマンドからデプロイするCloud Toolも魅力を感じる。今はCloud Tool更新が止まってるので、今後の対応に期待。利用料金はどうなるのだろ?今後のVMwareとの絡みは?VMware vCloud ?

Page 57: G*なクラウド ~雲のかなたに~

GAE/J

Page 58: G*なクラウド ~雲のかなたに~

GAE/J と G*

Grails + GAE/Jサポートプラグイン。または、Gaelyk

Page 59: G*なクラウド ~雲のかなたに~

GrailsをGAE/Jに対応させるAppEngine プラグインGORM-JPA プラグインドメインクラスの調整 コントローラの調整 起動コマンド 微調整!

Page 60: G*なクラウド ~雲のかなたに~

AppEngine PluginGrailsをGAE/Jに対応させるプラグイン機能インストール時にGAEに必要なファイル生成デプロイ用のコマンドスカッフォルドテンプレートJDOとJPAに対応認証設定 → Config.groovyに設定

Page 61: G*なクラウド ~雲のかなたに~

AppEngine Pluginインストール前に必要な設定

Google App Engine SDK設定ダウンロード&解凍http://code.google.com/appengine/

AppEngineSDKの場所を指定。環境変数 APPENGINE_HOME 又は、config/BuildConfig.groovyにgoogle.appengine.sdkで指定

export APPENGINE_HOME=/opt/appengine-java-sdk-1.2.5

google.appengine.sdk='/opt/appengine-java-sdk-1.2.5'

Page 62: G*なクラウド ~雲のかなたに~

インストールと設定インストール!$ grails install-plugin app-engine

インストール途中で質問に答えます。Do you want to use JPA or JDO for persistence? (jpa, jdo)jpa

インストールされるとgrails-app/conf/以下にそれぞれのファイルが追加されます。datastore-indexes.xmlpersistence.xml

★grails-app/conf/Config.groovyにGAEのアプリケーション名を記述google.appengine.application="jggugv4"

★Grailsプロジェクトのバージョンをセット

Page 63: G*なクラウド ~雲のかなたに~

GORM-JPA PluginJPAプラグインは3種類ある…

Hibernate JPA Provider PluginJPA PluginGORM-JPA Plugin ← これを使います。

できることGORMと同じsave(),list()等のメソッドが利用できる。(※一部未対応、)

できないことドメインクラスと同じmapping定義ドメインの定義には、JPAアノテーションを利用Criteria (※JPA1.0で未対応なため)

Page 64: G*なクラウド ~雲のかなたに~

GORM-JPAインストールインストール! $ grails install-plugin gorm-jpa

resources.groovyにentityManagerFactoryとtransactionManagerを追記entityManagerFactory(org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean) { beanClassLoader = ref("classLoader")}

transactionManager(org.springframework.orm.jpa.JpaTransactionManager) { entityManagerFactory = entityManagerFactory }

何故かdatanucleus-enhancer*.jarが入っていないのでコピーcp $APPENGINE_HOME/lib/tools/orm/datanucleus-enhancer-1.1.4.jar lib

Page 65: G*なクラウド ~雲のかなたに~

ドメインクラスの調整通常のGrailsドメインクラスでは、JPAで使うことはできません。若干の修正が必要です。JPA用のアノテーションを追記import org.datanucleus.jpa.annotations.Extensionimport javax.persistence.*;

@Entityclass Event implements Serializable {

@Id @GeneratedValue (strategy = GenerationType.IDENTITY) @Extension (vendorName = "datanucleus",

key = "gae.encoded-pk", value = "true") String id /** イベントタイトル */ @Column //全てのフィールドに付加 String eventName

Page 66: G*なクラウド ~雲のかなたに~

コントローラの調整これが正解なのかは検証中ですが。アクションクロージャsaveだけ編集。

def save = { def eventInstance = new Event(params) Event.withTransaction{ if(eventInstance.save(flush:true)) { flash.message = "Event ${eventInstance.id} created" redirect action:"show", id:eventInstance.id } else { render view:'create', model:[eventInstance:eventInstance] } }}

Page 67: G*なクラウド ~雲のかなたに~

起動コマンドバージョンをセットしてローカルで起動

準備$ grails set-version 1

起動$ grails app-engine run

Page 68: G*なクラウド ~雲のかなたに~

デプロイコマンドでデプロイ

appcfgコマンドでデプロイ

$ grails set-version 1$ grails app-engine deploy

$ grails app-engine package$ rm target/war/WEB-INF/lib/jul-to-slf4j-1.5.6.jar$ appcfg.sh update ./target/war

Page 69: G*なクラウド ~雲のかなたに~

動作!

Page 70: G*なクラウド ~雲のかなたに~

Grails+GAE/J まとめいろいろと記述をGAE/J用に書き直す手間がありますが、プラグインを活用して開発ができる等の利点があります。

現状バグがあり正常に動作しませんが、近々Fixされると思います。※1.2のリリースには安定するはず。

Page 71: G*なクラウド ~雲のかなたに~

Gaelyk(ゲーリック)

GroovyでGAE/Jを簡単に。

Page 72: G*なクラウド ~雲のかなたに~

GroovyでGAE/Jを簡単に。

GAE/Jをはじめるにあたって、最初からしっかりしたMVCなフレームワークも良いけど、柔軟なわかりやすい環境で試すことができたら良いなと思います。そんなサックリとGAE/Jを試したい人にはもの凄くお勧め。AppEngineのサービスを試してみるもよし、本気で開発するもよし。Gaelykも一応MVCな対応ができてたりします。ただし、IDEフレンドリーではない気がする。その辺はおいといて・・・・。

Page 73: G*なクラウド ~雲のかなたに~

Gaelyk(ゲーリック)Gaelykとは、

GAE/J用の軽量Groovy開発ツールキットです。GroovyテンプレートとGroovletで構成されています。

ビューとコントローラGroovletsとTemplateServletを拡張したクラスで実現ビュー:GaelykTemplateServlet拡張子gtplのプレゼンテーション層

コントローラ:GaelykServletGaelykTemplateServletとGaelykServletにGAE/Jで使用するサービスなどがServletBindingにバインドされています。GAE/JのサービスにもCategoryを使用してメソッドが拡張追加されています。

Page 74: G*なクラウド ~雲のかなたに~

Gaelyk(ゲーリック)

クイックスタート & 概要

Page 75: G*なクラウド ~雲のかなたに~

セットアップGaelykテンプレートプロジェクトをダウンロードhttp://gaelyk.appspot.com/download/

テンプレートプロジェクトです。そのまま解凍して仕様します。gaelyk-template-project-0.2.zipを解凍。

Page 76: G*なクラウド ~雲のかなたに~

テンプレートプロジェクト内容 build.groovy & src

AntBuilderで実装されてる簡単なビルド用プログラム。srcフォルダに配置した、GroovyとJavaのソースのコンパイルに使用。

warこのディレクトリがデプロイされます。

Page 77: G*なクラウド ~雲のかなたに~

warディレクトリこのディレクトリに、ビューの*.gtplと、css、images等のファイルを配置します。WEB-INFappengine-web.xml  GAEの定義ファイルweb.xml/groovy/ここに*.groovy配置

/includes/ - インクルードファイル//lib/ - *.jar/classes/

Page 78: G*なクラウド ~雲のかなたに~

appengine-web.xml 設定<application>タグの中身を対象のアプリケーション名称に変更<version>を指定<static-files> リソース設定

Page 79: G*なクラウド ~雲のかなたに~

web.xml 設定拡張子など変更したい場合や、色々追記したい場合は、そのまま追記でOK。

Page 80: G*なクラウド ~雲のかなたに~

起動には、GAE/Jのツールを使う

Eclipseで起動もOK

http://localhost:8080/をブラウザで表示

ローカルで起動テンプレートプロジェクトのルートで、$ dev_appserver.sh ./war

※Windowsでは、.sh→.cmd

Page 81: G*なクラウド ~雲のかなたに~

Gaelyk(ゲーリック)

More Quick Start!

Page 82: G*なクラウド ~雲のかなたに~

More Quick Start!.gtpl(テンプレート) GaelykTemplateServletGroovlets GaelykServletEager、Lazy変数バインドされたGAE/Jのサービス追加/拡張されたメソッドおまけ:簡単に始められるキット

Page 83: G*なクラウド ~雲のかなたに~

.gtpl(テンプレート) GaelykTemplateServlet

JSPやGSPと同じようなもの。Groovyコードが書けます。<% /* some code */ %>${value}でGString書けます。<%=hoge %>も使えます。printとprintlnもOK。

Page 84: G*なクラウド ~雲のかなたに~

GaelykTemplateServletソース

Page 85: G*なクラウド ~雲のかなたに~

Groovlets GaelykServletGroovyServletを拡張したGroovyスクリプト

Viewテンプレートへのデリゲートrequest.setAttribute 'list', [1, 2, 3, 4]request.setAttribute 'date', new Date() forward 'display.gtpl'

Page 86: G*なクラウド ~雲のかなたに~

GaelykServletソース

Page 87: G*なクラウド ~雲のかなたに~

Eager変数request : HttpServletRequestresponse : HttpServletResponsecontext : ServletContextapplication : contextと同じsession : HttpSessionを返します。 request.getSession(false) と同じです。params : フォームパラメータのマップheaders : 全てのリクエストヘッダのマップ

Page 88: G*なクラウド ~雲のかなたに~

Lazy変数out : PrintWriterを返す。   response.getWriter()への速記sout : ServletOutputStreamを返す。 response.getOutputStream() への速記html : MarkupBuilderを返す。   new MarkupBuilder(response.getWriter()) への速記

Page 89: G*なクラウド ~雲のかなたに~

バインドされたGAE/JのサービスdatastoreService : DatastoreサービスmemcacheService : MemcacheサービスurlFetchService : URLFetchサービスmailService : メールサービスimagesService : ImagesサービスuserService : ユーザサービスuser : ログイン中のユーザ (ログインしていない場合は null )

Page 90: G*なクラウド ~雲のかなたに~

追加/拡張されたメソッドGAE/Jのサービスやクラスがより便利に使えるように、メソッドが追加されています。(一部を紹介)

詳しくは http://gaelyk.appspot.com/tutorial/MailServiceのsend()を拡張

DatastoreServiceにwithTransactionを追加

low-levelデータストアAPIを使いやすく

mailService.send to: '[email protected]', subject: 'Hello World', htmlBody: '<bold>Hello</bold>'

datastoreService.withTransaction { // your code}

Page 91: G*なクラウド ~雲のかなたに~

low-levelデータストアAPIグルービーにEntityクラスを使ってデータストアimport com.google.appengine.api.datastore.Entity

def person = new Entity("person")

person['name'] = "やまもとつよし"println person['name']

person.age = 31println person.age

//保存person.save()

//削除person.delete()

//リストdef q = new Query('person')def list = datastoreService.prepare(q).asList(

    Builder.withLimit(20).offset(0) )

Page 92: G*なクラウド ~雲のかなたに~

注意点・ゲーリック*.gtplの文字化け回避

file.encodingのみではだめっぽい。groovy.source.encodingも指定してね。

<system-properties> <property name="file.encoding" value="UTF-8"/> <property name="groovy.source.encoding" value="UTF-8"/></system-properties>

Page 93: G*なクラウド ~雲のかなたに~

おまけ荒っぽいですが、簡単に始められるキットここに http://grails.jp/sample/ に置いておきます。gaelyk-setup.sh をダウンロードそして実行!要 wget 。※好みな物に置き換えてね。注意:危険だと思ったら中身を見てから使ってね。超ザックリ適当に作ったので、シェルスクリプト詳しい人、拡張よろしくです。

Eclipseでインポート。GAE/JのプラグインとGroovyのプラグインが必要。

$ ./gaelyk-setup.sh myapp001

時間があればデモ

Page 94: G*なクラウド ~雲のかなたに~

まとめG*なクラウド開発では、どれを選択するべき?ものすごく単純なJEEアプリを作る場合はGAE/J&Gaelyk でサックリ開発

Grailsプラグインを活用して若干高度なJEEアプリを作りたい場合で、GAE/J範囲で可能であれば、Grails/AppEngine がオススメ。

Grailsをそのままクラウドへ!の場合はCloudFoundry他のEC2ベース

Page 95: G*なクラウド ~雲のかなたに~

まとめ小 Gaelyk

中Grails + GAE/J

大Grails + Cloud Foundry

Page 96: G*なクラウド ~雲のかなたに~

AWS S3

AWS EC2

Clould FoundryGrails

PluginPluginPlugin

instanceinstanceinstance

ライトな部分Google AppEngine

Gaelyk

GrailsPluginPlugin

クライアントGriffon Adobe Air

連携

連携連携

Page 97: G*なクラウド ~雲のかなたに~

Thank you.

日本 Grails/Groovy ユーザーグループhttp://www.jggug.org/