クライアントサイドの実装
CurlからGoogle App Engine上のサービスへアクセス
CurlからGoogle App Engine上のサービスにアクセスするには、Curl ORBのCurlコード生成ツールを利用して、サービススタブ・クラス(MemoService)とデータクラス(Memo)を生成します。その生成されたCurlのクラスを呼び出すことで、CurlからGoogle App Engine上のサービスクラスへアクセスできます。詳細なCurlコード生成ツールの利用方法はこちらを参照ください。
|||
||| Curl ORB for java (version 0.6)
||| This code was generated by the Curl code generator automatically.
||| package name : MEMO
||| generated date : 2009-04-15 16:46:27.126000
|||
{import * from COM.CURLAP.ORB}
{define-class public MemoService {inherits ApplicationContextClient}
{constructor public {default server-url:#Url = null}
{construct-super.ApplicationContextClient "memoService", server-url = server-url}
}
{method public {async-get-memos ...:EventHandler}:AsyncWorker
{return {self.async-invoke "getMemos", {splice ...}} asa AsyncWorker}
}
{method public {get-memos}:#Array
{return {self.invoke "getMemos"} asa #Array}
}
{method public {async-register-memo v0:Memo, ...:EventHandler}:AsyncWorker
{return {self.async-invoke "registerMemo", arguments = {FastArray v0}, {splice ...}} asa AsyncWorker}
}
{method public {register-memo v0:Memo}:void
{self.invoke "registerMemo", arguments = {FastArray v0}}
}
{method public {async-remove-memo v0:int64, ...:EventHandler}:AsyncWorker
{return {self.async-invoke "removeMemo", arguments = {FastArray v0}, {splice ...}} asa AsyncWorker}
}
{method public {remove-memo v0:int64}:void
{self.invoke "removeMemo", arguments = {FastArray v0}}
}
}
|||
||| Curl ORB for java (version 0.6)
||| This code was generated by the Curl code generator automatically.
||| package name : MEMO
||| generated date : 2009-04-15 16:46:53.742000
|||
||--{import * from JAVAX.JDO}
{import * from COM.CURLAP.ORB}
||--{import * from JAVAX.JDO.SPI}
{define-class public serializable Memo
field private _id:int64
field private _name:#String
field private _message:#String
field private _date:#Date
||-- field protected transient _jdo-state-manager:#StateManager
||-- field protected transient _jdo-flags:int8
{getter public {name}:#String
{return self._name asa #String}
}
{getter public {message}:#String
{return self._message asa #String}
}
{getter public {id}:int64
{return self._id asa int64}
}
{getter public {date}:#Date
{return self._date asa #Date}
}
{setter public {message v:String}:void
set self._message = v
}
{setter public {name v:String}:void
set self._name = v
}
{setter public {date v:Date}:void
set self._date = v
}
}
次のようにコードを記載することで、このサービススタブ・クラスやデータクラスを使ってGoogle App Engine上のサービスにアクセスできます。
サンプルコードはこちらからダウンロードできます。memo.zipを展開し、memo-client/memo.dcurlを実行してください。
|| Google App EngineのURLを指定
{set-default-server-url {url http://localhost:8080}}
|| サービスクラスのインスタンス生成
def service = {MemoService}
|| メモの作成(データクラス作成と値セット)
def memo = {Memo}
set memo.name = “おかだ ひとし”
set memo.message = “あいうえお!”
set memo.date = {Date}
|| メモ登録(GAEのストレージに登録)
{service.register-memo memo}
デプロイ
デプロイをする前に、WEB-INF/appengine-web.xmlにアプリケーションIDを追加します。アプリケーションIDはGoogleのサイトから取得します(「http://<アプリケーションID>.appspot.com」のような形になります)。
<?xml version="1.0" encoding="utf-8"?> <appengine-web-app xmlns="http://appengine.google.com/ns/1.0"> <application>ここにアプリケーションIDを入力</application> <version>1</version> <!-- Configure java.util.logging --> <system-properties> <property name="java.util.logging.config.file" value="WEB-INF/logging.properties"/> </system-properties> </appengine-web-app>
デプロイは、ツールバーにある次のボタンを押下します。

下記画面にて、対象のプロジェクト(ここではmemo_server)とEmail(Gmailのアカウント)、パスワードを入力して、Deployボタンを押下します。

成功するとConsoleに次のように表示されます。
Deployment completed successfully
先ほどのCurlのサンプルでは、ローカルの開発環境(http://localhost:8080)を向いていましたので、今度はデプロイしたGoogle App EngineサーバのURLを指定します。
|| Google App EngineのURLを指定
{set-default-server-url {url http://<アプリケーションID>.appspot.com”}}
アプリケーションIDは以下のサイトから取得します。
サンプル(memo.zip)を実行すると次の画面が起動します(memo-client/memo.dcurl)。

- 画面起動時、MemoService.getMemosメソッドを呼び、DataStoreからデータを取得します。
- メモ作成ボタン押下時、MemoService.registerMemoメソッドを呼び、DataStoreへデータを登録します。
- 1行選択し、メモ削除ボタン押下時、MemoService.removeMemoを呼び、DataStoreからデータを削除します。
最後に
このシリーズでは、今後もクラウド・コンピューティングにおけるRIAの可能性を追求していきたいと考えています。


