ブログ移設しました。

bloggerから記事を移設しました。


HUGOで記事を書いてみると思いのほか書きやすかったので移動。

月曜日, 5月 05, 2014

tizenのdata contorolsを読み解いてみる。

tizenを使う用事があって、その中で利用するData Contorolsについて読んでみる。

忘れっぽいので書いたあとにドキュメントをなくす人だからここに書く。

追記:
DataContorlって何するの?まとめ。
アプリ間でデータを共有するときにAppManager?AppContorlの一緒に載せてデータを送るとか、そのリスナーだけで解決できない小難しい問題に対しての解決策を提供するもの。
SQL型とキーバリュー型があるから好きなものを使うよろし、(一つのパッケージに複数のプロバイダーを入れても問題はないからそれでも良いと思う。 SQL型の場合今見ている限り、DBを切り替えるみたいなものはないですし)

Datacontrolを使うためには、
サービスアプリ(DataControlProviderとなるもの)
クライアント
でやりますので、1対多で使えるけど、実際これってデータの完全性とかトランザクションの概念はあるのかな。。。 その辺がまだわからない状態で時間切れになりました。

チラ裏でやれ。ってツッコミは正解でモチベーションのために記事書いた。公開したいものがあるから記事書いたわけではない( ー`дー´)キリッ

BGMはこんな感じの意味が読み取りづらい曲を流していると作業に集中できることを発見。


日本語訳を公開している人もいなかったので、読みながら書いてミスを発見するために文章を起こした。
でもね、訳も間違っている。話の大筋は自分が追える(書いたあとに思ったのは、これだったら本文読んだほうが1.5倍早く追える)このエントリーを更新していくきりょくがなかったりするんで
もし、コメントにノイズ載せるなハゲ的な苦情が殺到したらページを閉じます。

https://developer.tizen.org/help/index.jsp?topic=%2Forg.tizen.native.appprogramming%2Fhtml%2Fguide%2Fapp%2Fdata_controls.htm

上記のページから開始。

データコントロール

データコントロールは標準的なアプリケーション間のデータのやり取りを行う機構です。
すべてのアプリケーションは、データの共有を他のアプリケーションに対してリクエストすることができます。しかし、サービスは自分のデータを提供することしか出来ません。

2つのタイプのデータコントロールがあります。
SqlDataContorol
MapDataControl

ここで脱線します(具志個人的に使って覚えるほうが早い人はこっちのほうがいい気がしたので)--------------
チュートリアルを見たほうが早いという人は
SqlDataControl
https://developer.tizen.org/help/index.jsp?topic=%2Forg.tizen.native.appprogramming%2Fhtml%2Ftutorials%2Fapp_tutorial%2Ftask_dictionarydatacontrolprovider_sql.htm

MapDataCOntrol
https://developer.tizen.org/help/index.jsp?topic=%2Forg.tizen.native.appprogramming%2Fhtml%2Ftutorials%2Fapp_tutorial%2Ftask_dictionarydatacontrol_map.htm

とかをみればよい。
------------------

続き行きます。
SqlDataControl
このクラスは、他のサービスアプリケーションにより、特定のデータをSQL型のデータコントロールを使用することができるようにするものです。
また、あなたのサービスアプリケーションからSQLデータ管理プロバイダーを定義することができます。

MapDataControl
このクラスは、他のサービスアプリケーションからエクスポートされたデータに対してキーバリュー型のデータアクセスを可能にするクラスです。またサービスアプリケーションかからキーバリュー型データ管理プロバイダーを定義することができます。

(exportの意味が結構危ないですね。 また、データコントロールは、データ管理と書くべき?CRUDするだけじゃないの?)

データコントロールは、共有データにアクセスし、結果を戻すための操作を供給することができます。

データコントロールを使ってみる

sqldatacontrol または mapdatacontrolのインスタンスをappmanagerクラスから取得します。
appmanagerクラスは、要求されたデータコントロールを提供し、あなたのアプリケーションにデータコントロールを返すサービスアプリケーションを見つけます。

データコントロールはプロバイダーIDを第一情報として使います。
これは、データコントロールプロバイダーで定義します。
例えば、static const Tizen::Base::String DATACONTROL_PROVIDER_EXAMPLE = L"http://tizen.org/datacontrol/provider/exmaple"
(あれ?この書式operationidに似てね?)

sqldatacontorl
appmanager::getsqldatacontorlN メソッドを使用してプロバイダーIDを指定する場合、一意に特定のSQLデータコントロールを取得出来ます。データコントロール取得後、(解決 後)sqldatacontorlのselect(),insert(),update(),deleteなどを呼び出せます。
sqldatacontorlインスタンスの実行結果はリスナーを返します。(この時に返すのは、OnSqlDataControlSelectResponseReceived(),
OnSqlDataContorlUpdateResponseReceived(),
OnSqlDataContorlDeleteResponseReceived(),
OnSqlDataContorlInsertResponseReceived(),
はTizen::App::ISqlDatacontorolResponseListenerのインターフェースです。
サービスアプリケーションが終了した時、そのsqldatacontrol操作を終了した応答リスナーが呼び出されます。(上の4つね。)

(やばい、訳があやしすぎるw 楽しくなってきた。)

MapDataControl
GetMapDataContorolN() を使用してプロバイダIDを指定する場合、ユニークな特定のマップタイプのデータコントロールを得ることができます。データコントロールを解決したあと、 GetValue, AddValue SetValue removeValueのようなMapDataContorlクラスのメソッドをよびだします。
MapDataContorlインスタンスの実行結果は以下のメソッドから取得出来ます。
OnMapDataControlAddValueResponseReceived(), OnMapDataControlSetValueResponseReceived(), OnMapDataControlRemoveValueResponseReceived()
はTizen::App::IMapDataControlResponseListenernaのインターフェースです。
上記の応答リスナーはサービスアプリケーションがマップデータコントロールの操作を行ったあと呼び出されます。

データコントロールのライフサイクル(ここは図を見たほうがいい)
順番を書いておくと

  1. データコントロールを取得(C++App)
  2. データコントロールのプロバイダーIDを解決、アクセス権限をチェックする。(AppManager)
  3. データコントロール応答リスナーをセット(C++APP)
  4. データコントロールメソッドを使用(C++APP)
  5. データコントロールを起動または、データコントロールのプロバイダーに要求(これはきっと、provider側(datacontorolを実装したアプリ側))
  6. 結果が非同期にデータコントロール応答リスナーに対して送られる。
  7. 終了
順番は、そのプロバイダー側で制御してあげないといけないのか。

データコントロールを用いた開発

でサービスから他のアプリケーションにデータを出力する。(やっぱり、exportの訳が分かんね)
データベースファイルを提供する(データベースを提供という解釈で)サービスアプリは、ISqlDataControlProviderEventListenerインタフェースを実装し、
Tizen::App::DataControlProviderManager のSetSqlDataControlProviderEventListener()を使用し、プロバイダーのリスナーとして登録します。
サービスアプリケションは、SQL型データコントロールリクエストをプロバイダーリスナーからデータコントールリクエストを
OnSqlDataControlSelectRequestReceived(),
OnSqlDataControlInsertRequestReceived(), OnSqlDataControlUpdateRequestReceived(), OnSqlDataControlDeleteRequestReceived() 
ISqlDataControlProviderEventListenerインターフェースから受け取るよ。。。
(手が疲れてきたよ)

んで、キーバリュー型の〜〜、、、、(ここも大体が同じ説明、何を実装して、どれからリクエストをとるかというお話)

終了

このへんを頭に入れて、各チュートリアルを見てみましょう。


SqlDataControl
https://developer.tizen.org/help/index.jsp?topic=%2Forg.tizen.native.appprogramming%2Fhtml%2Ftutorials%2Fapp_tutorial%2Ftask_dictionarydatacontrolprovider_sql.htm

MapDataControl
https://developer.tizen.org/help/index.jsp?topic=%2Forg.tizen.native.appprogramming%2Fhtml%2Ftutorials%2Fapp_tutorial%2Ftask_dictionarydatacontrolprovider_sql.htm

両方共、インタフェースの用意からインスタンスの取得、データの読み取り追加まで流行っています。更新と削除については、コードは用意していないけど、きっと同じように〜ってなっていますね。

使い方はわかったけど、んー。 RDBMSないし、キーバリューのサーバー(サービスアプリケーション)に対して、クライアントからどうすれば利用できるか。を書いたものでしたねー。。。。 ちょっと、これ制御めんどくさそうだな。

さ て、読み解いた。 Tizenの中だけでデータをやり取りして(MessagePort)、そして、データを書込して(DataControl)で面白い 題材ないかなー。。。。 私の頭ではぐちゃぐちゃになってきっともうすでに存在しないデータに対して更新とかやりそうで。

眠たいので、風呂入って寝ますかね。

0 件のコメント:

コメントを投稿