前回の続きです。
データストアチャネル
データストアはデータストアチャネル経由でアクセスします。
ここでは、以下のようにappdsという名前のデータストアチャネルを定義しています。
datastore('appds)
データストアチャネルはデフォルトではg3に組み込んでいるRDBMSのDerbyを使用します。また、AppEngine上で動作させるとAppEngineのデータストアを使用します。
データストアチャネルの定義あるいは外部定義ファイルによって、任意のJDBC URLやJDBCドライバを指定することができます。ただし、現時点の実装ではデータベース固有のデータ型に対応していないので、Derby以外のRDBMSは事実上動作しないと思われます。いずれ、MySQLやPostgresなどのデータベースにもアクセス可能にする予定です。
カインドの作成
カインドの作成は、Createコマンドをデータストアチャネルに送信することで行ないます。Createコマンドには、カインド名とスキーマを設定します。
val create = Create(KIND_NAME, schema)
port("/create") agents(create) invoke("appds")
agentsエージェントは、メッセージを受信すると、引数に指定されたコマンドを発行するエージェントです。この場合は、Createコマンドをinvokeエージェントに送信しています。invokeエージェントは同期型でデータストアチャネルappdsにメッセージを送り、データストアアクセスの結果を受け取ります。 invokeエージェントは、このチャネルの最後のエージェントなので、invokeエージェントが受け取ったメッセージが、このチャネルの最終結果となります。
レコードのインサート
カインドに対するレコードのインサートは、Insertコマンドをデータストアチャネルに送信することで行ないます。Insertコマンドには、カインド名とインサートするレコードを設定します。
val insert = Insert( KIND_NAME, Record('id -> 5, 'name -> "Yamada Taro", 'zip -> "1234567", 'address -> "Yokohama", 'phone -> "0451234567", 'comment -> "omlet rice"))
port("/insert") agents(insert) invoke("appds")
レコードのアップデート
カインドに格納されているレコードのアップデートは、Updateコマンドをデータストアチャネルに送信することで行ないます。Updateコマンドには、カインド名とアップデートするレコードを設定します。レコードには、IDと更新するフィールドのみを設定すればOKです。
SQLの場合はUPDATE文で、AppEngineの場合は読み込みと書き戻しをデータストアチャネル側で行ないます。
val update = Update( KIND_NAME, Record('id -> 5, 'name -> "Suzuki Hanako"))
port("/update") agents(update) invoke("appds")
レコードのフェッチ
カインドに格納されているレコードの取り出しは、Fetchコマンドをデータストアチャネルに送信することで行ないます。Fetchコマンドには、カインド名とIDを設定します。
val fetch = Fetch(KIND_NAME, 5)
port("/fetch") agents(fetch) invoke("appds")
レコードのクエリ
カインドに格納されているレコードの問合せは、Queryコマンドをデータストアチャネルに送信することで行ないます。Queryコマンドには、カインド名と問合せ式を設定します。
ここでは「Id(5)」という問合せ式で「IDが5」のレコードの問合せを行っています。
val query = Query(KIND_NAME, Id(5))
port("/query") agents(query) invoke("appds")
レコードの削除
カインドに格納されているレコードの削除は、Deleteコマンドをデータストアチャネルに送信することで行ないます。ここでは、Queryコマンドには、カインド名とIDを設定したレコードを設定しています。
val delete = Delete(KIND_NAME, Record('id -> 5))
port("/delete") agents(delete) invoke("appds")
カインドの削除
カインドの削除は、Dropコマンドをデータストアチャネルに送信することで行ないます。Dropコマンドにはカインド名を設定しています。
val drop = Drop(KIND_NAME)
port("/drop") agents(drop) invoke("appds")
次回に続きます。
0 件のコメント:
コメントを投稿