クライアントサイドの実装
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の可能性を追求していきたいと考えています。