Palm Programmer's Laboratory
Introduction to Conduit Development601/7
この章は、HotSync プロセスを、ユーザが HotSync ボタンを押す瞬間からデータベースのバックアップをとり、ログを書き出すまでをステップを追って示します。
この章では以下の節を含みます。
概要 ^TOP^
デスクトップ上の HotSync マネージャアプリケーションは、HotSync プロセス全体を監督します。HotSync プロセスは PalmSource の特許 [1] であり、ハンドヘルドとデスクトップ コンピュータ間のすべてのデータの同期をワン-ボタンで自動的に行います。HotSync マネージャは、データの同期を要求するハンドヘルドの各アプリケーションのためにデータを処理するため、デスクトップ上のコンジットを呼び出します。HotSync プロセスのインスタンスである HotSync 実施またはセッションは、ユーザが(クレドル上またはディスプレイ上の) HotSync ボタンを押したときに開始され、バックアップ コンジットが実行されて最終クリーンアップが完了した後に終了します。データの同期に加えて、HotSync プロセスは:
- HotSync ユーザ名と ID をハンドへルドに代入します。
- ある 1 つのデスクトップ コンピュータに関連付けられた各ハンドヘルドまたは複数のハンドヘルドを管理します。
- ハンドヘルド データをデスクトップ コンピュータにバックアップします。
- 新しいデータベースとアプリケーションをハンドヘルドにインストールします。
- ハード-リセット後にすべてのデータをハンドヘルドに戻します。
HotSync マネージャはデスクトップ コンピュータ上でバックグランドで実行され、1 つまたはそれ以上の通信ポートを監視してハンドヘルドからのコマンドを待ちます。コマンドが届けられると、HotSync マネージャはどの同期操作を実行すべきか決定し、プロセスを開始します。
- NOTE
- HotSync プロセスはハンドヘルドからのみ開始させることができます。PalmSource はデスクトップから HotSync プロセスを開始するためのいかなる手段もサポートしません。
表 7.1 は、ユーザ、HotSync マネージャ、ハンドヘルドの動作を含む HotSync プロセス全体を要約しています。以下の節では、各動作を詳細に説明します。
ユーザのアクションまたは表示 | HotSync マネージャのアクション | ハンドヘルドのアクション |
---|---|---|
1. ユーザが HotSync ボタンを押す | デスクトップ コンピュータから HotSync ユーザ ID を読み込み、そのユーザをデスクトップ ユーザ データ保存場所に対して検証します。 デスクトップ コンピュータ上のユーザのためのデータの位置を突き止めます。 ハンドヘルドからシステム情報と状態情報を読み込みます。 デスクトップ アプリケーションに同期が開始されようとしていることを知らせるために通知機能を呼び出します。 「HotSync 実施の初期化」 を参照してください。 |
HotSync マネージャ プロセスがハンドヘルド上で開始され、デスクトップ コンピュータに信号を送ります。 HotSync クライアントはハンドヘルド アプリケーションに HotSync セッションが開始されたことを通知します。 |
2. 「デスクトップと接続中...」 | ハンドヘルド上のすべてのアプリケーション(タイプが 'app' のデータベース)の作成者 ID のリストとデスクトップに登録されているすべてのコンジットのリストを取得します。 実行するコンジットのリストを作成します: 実行されるコンジットはハンドヘルド上に一致する作成者 ID を持つアプリケーションがあるか、ハンドヘルド上に一致するアプリケーションがない場合でも実行されるべきであるとしていされています [1]。 作成者 ID を持つコンジットがインストールされていないがデータベースのバックアップ ビットがセットされている場合、そのデータベースをバックアップ コンジットのリストに追加します。さらに、データベースのタイプが 'DATA' でない限り、作成者 ID を持つコンジットがインストールされている場合であってもデータベースをバックアップ リストに追加します。 「HotSync 実施の初期化」 を参照してください。 |
|
3. 「同期中...」 | インストールされるためにデスクトップ コンピュータ上のキューに追加されているアプリケーションまたはデータベースをインストールすためにインストール コンジットを呼び出します。 ある特定のエントリ ポイントを呼び出すことによって、リストの中にある各同期コンジットを優先順に実行します。実行順番が回ってきたコンジットはハンドヘルド上のデータを読み書きするためにデスクトップ上の同期マネージャを呼び出します。 再度インストール コンジットを呼び出して、他のコンジットによって生成されたインストールを処理します [2]。 バックアップ リストの中にあるデータベースのコピーをとるために、バックアップ コンジットを呼び出します。 「インストール コンジットの実行」、「同期コンジットの実行」、「バックアップ コンジットの実行」 を参照してください。 |
HotSync クライアントは、実行順番が回ってきて データ マネージャと他の Palm OS マネージャを呼び出すデスクトップ上の同期マネージャからの呼び出しに応答します。 |
4. 完了メッセージ | デスクトップ アプリケーションに同期が完了したことを知らせるために通知機能を呼び出します。 ハンドヘルド上の同期時刻とユーザ ID を含む同期情報を更新します。 いずれかのコンジットがメッセージをログに追加した場合、HotSync マネージャはユーザに対してメッセージを表示し、ユーザはそれらのログ エントリを調べることができます。 「HotSunc プロセスの終了」 を参照してください。 |
データベースが変更されたハンドヘルド アプリケーションを副起動します。 終了した HotSync 実施がインストールしたアプリケーションを副起動します。 通知マネージャに登録されているアプリケーションに「同期完了」通知を通知します。 |
1. Windows のための HotSync マネージャ バージョン 6.0 以降のみが C API-ベース コンジットに、それがハンドヘルド上に一致するアプリケーションが無い場合であっても実行されるべきであるということを指定するために、問合せをすることができます。
2. Windows のための HotSync マネージャ バージョン 3.01 以降のみが、すべての同期コンジットを実行した後にインストールするためにキューに追加されたファイルを持つ場合に、もう一度各インストール コンジットを呼び出します。3.01 よりも前のバージョンでは、このステップは実行されません。
HotSync プロセスの初期化 ^TOP^
ユーザが HotSync 実施を開始するとき、いずれかのコンジットが実行される前に、HotSync マネージャは以下の節で説明されている一連のタスクを実行します:
- 現在のデスクトップ ユーザ ID (PC ID) の取得
- 現在の HotSync ユーザの取得
- デスクトップの信任状態の取得
- 通知機能の呼び出し
- 同期モードの決定
- 実行するコンジットのリストの作成
- バックアップするデータベースのリストの作成
現在のデスクトップ ユーザ ID (PC ID) の取得 ^TOP^
現在のデスクトップ OS ユーザ ID (PC ID)は、HotSync マネージャがそれぞれ別のデスクトップ ユーザによって初めて実行されるときに生成する擬似ランダム数です。HotSync マネージャは各デスクトップ OS ユーザの PC ID が同じコンピュータの他のものに対して固有であることを保証します。HotSync マネージャは現在のデスクトップ ユーザの PC ID を取得してそれをハンドヘルドに保存します。
HotSync マネージャ バージョン 6.0 以降はさらに、ハンドヘルドがデスクトップを「信任」しているかどうかを決定するときにハンドヘルドがデスクトップを識別するのを助けるために、デスクトップのホスト名と IP アドレスも取得します。「デスクトップの信任状態の取得」 を参照してください。
現在の HotSync ユーザの取得 ^TOP^
各 Palm ハンドヘルドは、同期された後に、固有の HotSync ユーザ ID とそのハンドヘルドに関連付けられたユーザ-指定 HotSync ユーザ名を持ちます。ユーザ ID は、リセット後のハンドヘルドの最初の HotSync 実施中またはハンドヘルドの(出荷後の)初めての HotSync 実施中に HotSync マネージャが生成する擬似ランダム数です。
HotSync マネージャは HotSync ユーザ ID と名前をハンドヘルドに保存します。さらに、デスクトップ上の各デスクトップ OS ユーザのためのユーザ データ保存場所を維持します。この保存場所はユーザ名、ID、現在のデスクトップ OS ユーザによって作成されたすべての HotSync ユーザについてのその他の情報からなります。この保存場所はさらに、デスクトップ コンピュータの最も新しい同期日付を追跡し続けます。
- NOTE
- HotSync マネージャは 2 つの異なるハンドヘルド上の同じユーザ名に対してかならずしも同じ HotSync ユーザ ID を生成するわけではありません。しかしながら、HotSync マネージャは各ユーザ ID が現在のデスクトップ OS ユーザのユーザ データ保存場所の中の ID に対し固有であることを保証します。
HotSync プロセスの開始時に、HotSync マネージャはハンドヘルドに HotSync ユーザ名と HotSync ユーザ ID を要求し、それらを現在のデスクトップ ユーザのユーザ データ保存場所の中のものと比較します。可能性のある結果は 表 7.2 で詳細に示されています。
ハンドヘルドが以下の状態ならば。。。 | HotSync マネージャは。。。 |
---|---|
このハンドヘルドの最初の HotSync 実施である、または、ハード リセットされたために、ユーザ ID を持っていない | デスクトップ ユーザに以下の 1 つをするように促します: ・新しいユーザ名を作成する。HotSync マネージャはそれから新しい HotSync ユーザ ID を生成します。 ・リストから存在している HotSync ユーザを選択する。 HotSync ユーザ名とユーザ ID をハンドヘルドに書き込み、現在の HotSync ユーザを識別します。 |
ユーザ データ保存場所にあるものと一致するユーザ ID を持つ | HotSync ユーザを識別します。 |
ユーザ データ保存場所にあるものと一致しないユーザ ID を持つ | ユーザに新しい HotSync ユーザを作成するかどうか問い合わせます。「はい」と答えた場合、ハンドヘルドから取得されたユーザ名と ID を使ってデスクトップ上に新しい HotSync ユーザを作成します。「いいえ」と答えた場合、HotSync 実施を中止します。 |
デスクトップの信任状態の取得 ^TOP^
Palm OS Cobalt は、ユーザが HotSync クライアントの中でどのデスクトップ コンピュータを信任して保護されているデータベースをバックアップまたは同期させるかを指定することを可能にします。
ハンドヘルドは次回の同期時にデスクトップに「共有される保護」を与えることによって信任状態を確立します。それから、ハンドヘルドはデスクトップが共有された保護キーを持っているかどうかチェックし、持っている場合は信任された同期を許可します。
この時点で、HotSync マネージャはハンドヘルドが現在のデスクトップを信任しているかどうか識別します。信任が立証された場合、HotSync マネージャは同期コンジットとバックアップ コンジットが保護されているデータベースにアクセスすることを許可します; さもなければ、保護されているデータベースにアクセスすることを許可しません。
信任されたデスクトップについての更なる情報は、第 9 章 「信任されたデスクトップの理解」 を参照してください。
通知機能の呼び出し ^TOP^
Windows のための HotSync マネージャは登録されているすべての通知機能を呼び出します。通知機能は、HotSync マネージャが HotSync プロセスの開始時と終了時に呼び出すエントリ ポイントを実装します。あなたの実装はそれからあなたのアプリケーションに HotSync 実施が開始したことを通知することができます。この警告はあなたのデスクトップ アプリケーションに保留されている変更をあなたのコンジットによって同期されようとしているデスクトップ データに保存する機会、または、HotSync 実施をキャンセルする機会を与えます。
通知機能についての更なる情報は、C/C++ Sync Suite Companion の 第 8 章 「デスクトップ通知機能の作成」 を参照してください。
同期モードの決定 ^TOP^
HotSync プロセスは最大限の能率を持つように設計されます - つまり、可能な場合はいつでもコンジットがデスクトップとハンドヘルド間で転送する必要があるデータを最小限にすることを可能にします。この決定を下す手法はスキーマ データベースと非スキーマ データベースでは異なるため、詳細は以下の小節でべつべつに説明します:
ハンドヘルド上のデータ マネージャは非スキーマ データベースよりもスキーマ データベースの変更情報をより詳細に追跡します。コンジットは、ハンドヘルドと「有線越しに」転送しなければならないデータの量をかなり抑えるために、この情報を使用することができます。これがどのように行われるのかについての詳細は、 で説明されています。ここでの残りの部分では、あなたのコンジットがどのように動機モードを取得するのか、それが各モードでどのように実行すべきかについて説明します。
同期モードを取得するために、コンジットは同期されようとしている各スキーマ データベースのために SyncDbGetSyncMode()|C/C++ Sync Suite Reference601/2 (C/C++ Sync Suite) または GetSyncTypeInfo()|COM Sync Suite Reference601/4 (COM Sync Suite) を呼び出さなければなりません。これらの関数はあなたが指定したデータベースの変更追跡情報を読み込み、それをデスクトップ上にキャッシュされている 変更コンテクスト と比較して、あなたのコンジットが各 同期単位 のために実行すべき同期のタイプを返します。同期モードは指定されたスキーマ データベースに対してのみ、そして現在実行されているコンジットのためだけに適用され、HotSync 実施全体には適用されません。
- NOTE
- HotSync マネージャはまた、同期タイプをあなたのコンジットの OpenConduit() エントリ ポイント (C/C++ Sync Suite) または PDHotsyncInfo()|COM Sync Suite Reference601/3.SyncType|COM Sync Suite Reference601/5 プロパティ(COM Sync Suite)経由で戻してきます。返された eFast、eSlow 同期タイプは、このハンドヘルドの最後の HotSync 実施が現在のデスクトップとだったかということだけに基づきます。非スキーマ データベースでは、この返り値がコンジットが高速同期と低速同期のどちらを実行するかを決定するための十分条件です。しかしながら、スキーマ データベースではこの値は十分条件ではありません。スキーマ データベースを同期するコンジットは(上述した)「同期モード取得」関数を呼び出して実行する最も効率の良い同期を決定しなくてはなりません。
以下に示すのは、SyncDbGetSyncMode()|C/C++ Sync Suite Reference601/2 または GetSyncTypeInfo()|COM Sync Suite Reference601/4 呼び出しによって決定されるスキーマ データベースの中の各同期単位の同期タイプです:
- 高速同期
- 同期単位のインスタンスは変更されていて、すべての変更フラグが有効です。このモードは、コンジットが現在のデスクトップと行われた最後の HotSync 実施の後に変更されたデータだけを転送することを可能にします。
- 消去の後の高速同期
- この同期タイプは、SyncDbGetSyncMode() または GetSyncTypeInfo() 経由で高速同期として渡されます。しかし、追加の「消去されたものを削除する」フラグがセットされています。それゆえ、スキーマ同期マネージャがハンドヘルド上の削除された同期単位のインスタンスが現在のデスクトップと行われた最後の HotSync 実施の後に消去されていると決定することができる点を除いては、高速同期と同じです。すべての変更フラグは有効であり、そのためコンジットは消去された同期単位の ID リストを読み込み、消去された各同期単位のインスタンスを識別するためにそれらをデスクトップ上の同期単位の ID リストと比較する必要があるだけです。それから、コンジットは高速同期を実行することができます。この消去されたデータを追跡する能力は、コンジットが複数のデスクトップにまたがって高速同期を実行することを可能にします。これはスキーマ データベースでのみ効率的に使用可能です。
- 低速同期
- 同期単位のための変更フラグは信頼できません。それゆえ、ミラー-イメージ同期を行うコンジットはハンドヘルド データベースの中の各同期単位の各インスタンスをデスクトップ上の対応データと比較してそれらをどのように同期すべきか決定しなくてはなりません。
- 変更なし
- 指定されたスキーマ データベースの中に変更された同期単位のインスタンスはありません。
上でリストされている同期タイプは指定されたスキーマ データベースと同期単位に依存し、スキーマ同期マネージャによって決定され、SyncDbGetSyncMode() または GetSyncTypeInfo() 呼び出しによって取得されます。コンジットは、同期設定 機能を実装している場合、どの同期タイプを実行するか決定するときにユーザの同期設定を考慮しなければなりません。ユーザが「デスクトップがハンドヘルドを上書きする」を望むなら、高速同期が可能かどうかにかかわらず、あなたのコンジットはユーザの望むことをすべきです。標準ユーザ同期設定があなたのコンジットがとるべきアクションにどのように影響をあたえるかについては、「ユーザ同期設定の効果」 を参照してください。
以下の小節は、スキーマ同期マネージャが高速同期モードと低速同期モードのどちらが適用されるかをどのように決定するのかについての詳細です。
各 HotSync 実施の最後に、スキーマ同期マネージャはデスクトップ上の各スキーマ データベースの データベース リセット識別子 (DRID) をキャッシュします。与えられたデータベースに対して高速同期と低速同期のどちらが可能か決定するために、スキーマ同期マネージャは、最後の HotSync 実施時にキャッシュされた DRID とハンドヘルド上のスキーマ データベースの DRID を比較します。それらが等しい場合、同期クロック, 変更カウンタ, 消去カウンタ は信頼できるので高速同期が可能です。それらが等しくない場合、低速同期だけが可能です; コンジットは、変更を識別するために、ハンドヘルド上のデータベースからすべてのデータを読み込み、それをデスクトップ上のデータと比較しなくてはなりません。
図 7.1 は、スキーマ同期マネージャがスキーマ データベースに対して高速同期を実行可能かどうかをどのように決定するのかを示しています。
図 7.1 スキーマ データベースに対して高速同期と低速同期のどちらを実行するのかの決定
さらに、各 HotSync 実施の最後に、スキーマ同期マネージャはデスクトップ上に各スキーマ データベースの同期クロックをキャッシュします。スキーマ データベースに対して高速同期が可能な場合、スキーマ同期マネージャは最後の HotSync 実施時にデスクトップ上にキャッシュされたデータベースの同期クロック値をハンドヘルド上のデータベースの中の各同期単位の消去カウンタと比較します。同期クロック値が同期単位の消去カウンタ以上であれば、同期単位は消去されていません; それゆえ、コンジットがする必要があるのは、スキーマ同期マネージャ呼び出しによって提供される同期単位の変更されたインスタンスのリストを読み込むことだけです。そうでない場合、同期単位は消去されています; それゆえ、コンジットは、同期単位のどのインスタンスが消去されたのかを識別するために、同期単位のすべてのインスタンスの ID のリストを読み込み、それをデスクトップ上の ID リストと比較しなくてはなりません。高速同期を実行可能な場合、同期単位の変更されたインスタンスだけの ID リスト(またはデータ自体)を読み込みます。スキーマ データベースの変更追跡についての更なる情報は、「スキーマ データベースのための変更追跡サービス」 を参照してください。
ハンドヘルド上のデータ マネージャは非スキーマ データベースに対しては、スキーマ データベースに対してよりも少ない変更情報しか追跡しません。コンジットはそれでもこの情報を使ってハンドへルドと「有線越しに」転送しなければならないデータの量を最小限にすることができます。これがどのように行われるかについての詳細は、「クラシック同期マネージャはどのように同期タイプを決定するのか」 で説明されています。この小節の残りの部分で、あなたのコンジットがどのように同期モードを取得するのか、各モードでコンジットはどのように実行されるべきなのかにについて説明します。
同期タイプを取得するために、コンジットはコンジットの OpenConduit() エントリ ポイント (C/C++ Sync Suite) または PDHotsyncInfo()|COM Sync Suite Reference601/3.SyncType|COM Sync Suite Reference601/5 プロパティ(COM Sync Suite)経由で HotSync マネージャによって渡される同期タイプを読み込まなくてはなりません。この同期タイプは HotSync 実施全体ですべての非スキーマ データベースに対して適用されます。
非スキーマ データベースに対しては以下の同期タイプが実行され得ます:
- 高速同期
- すべてのデータベースとレコードの "Dirty" フラグが有効です。このモードは、最後の HotSync 実施の後に変更があった場合にのみ、コンジットがハンドヘルドとデスクトップ間でデータを送ることを可能にします。高速同期を実行しているコンジットは変更されていないデータを転送すべきではありません。
- 低速同期
- 最後の HotSync 実施が現在のデスクトップとのものではないため、"Dirty" フラグは信頼できません。それゆえ、ミラー-イメージ同期を実行するコンジットは、どのようにレコードを同期するか決定するために、ハンドヘルド データベースの中の各レコードをデスクトップ上の対応するレコードと比較しなければなりません。
これらの同期タイプは、現在のデスクトップとの最後の HotSync 実施の後に異なるデスクトップと同期したかどうかに依存します。さらに、コンジットが 同期設定 を実装している場合、どの同期タイプを実行すべきか決定留しるときにコンジットはそれも考慮しなければなりません。ユーザが「デスクトップがハンドヘルドを上書きする」を望む場合、高速同期が可能かどうかにかかわらず、あなたのコンジットはユーザの望むことをすべきです。標準同期設定があなたのコンジットがすべきことにどのように影響を与えるのかは、「ユーザ同期設定の効果」 を参照してください。
クラシック同期マネージャがどのように同期タイプを決定するのか
HotSync マネージャはハンドヘルドから最後の同期の HotSync ユーザ ID と PC ID を取得します。これらの値を前回の HotSync 実施時にデスクトップに保存された値と比較します。PC ID 値が一致する場合、コンジットは高速同期を実行することができます。図 7.2 は、HotSync マネージャがコンジットは高速同期を実行できるかどうかをどのように決定するのかを示しています。
図 7.2 非スキーマ データベースに対して高速同期と低速同期のどちらを実行するのかの決定
ハンドヘルド上の非スキーマ データベースは、HotSync マネージャが同期実施の効率を改善するためにしようするフラグを含みます:
- データベースの "Dirty" フラグ - 非スキーマ データベースが最後の同期の後に変更されたことを示します。
- レコードの "Dirty" フラグ - 最後の同期の後に各レコードが変更されたかどうかを示します。
HotSync マネージャが高速同期を実行可能であると決定した場合、コンジットは "Dirty" フラグの有効性を信頼することができ、それゆえ変更されたデータベース レコードに対してのみ処理を行います。
最後の HotSync 実施の後に変更が無い場合であっても、いくつかのケースではコンジットが非スキーマ データベースの中のすべてのレコードを同期しなければならないということに注意してください:
- ハンドヘルド上またはデスクトップ コンピュータ上のどちらかでデータベースが削除された場合、生き残ったデータベースの中のすべてのレコードは同期時にもう一方に転送されなくてはなりません。
- 新しいアプリケーションがハンドヘルドまたはデスクトップ コンピュータにインストールされるとき、対応するすべてのデータ レコードはもう一方に転送されなくてはなりません。
「ユーザのコンジット同期設定」 で説明したように、コンジットの標準だがオプションの機能は、ユーザが次回の HotSync 実施時にコンジットが何をするのかを指定することを可能にします。この同期タイプ設定はデスクトップ上のユーザ データ保存場所に保存され、コンジットの OpenConduit() エントリ ポイント (C/C++ Sync Suite) または PDHotsyncInfo()|COM Sync Suite Reference601/3.SyncType|COM Sync Suite Reference601/5 プロパティ(COM Sync Suite)経由でコンジットに渡されます。HotSync マネージャが eFast と eSlow 同期タイプのどちらを返してくるかは、最後に実行された HotSync 実施が現在のデスクトップとのものだったかどうかに基づきます。eHHtoPC 同期タイプは、ユーザの同期設定に基づいて返されます。
以下で、コンジットに返される同期タイプに加えて、標準ユーザ同期設定を示します:
- 同期(eFast または eSlow)
- ミラー-イメージ同期を実行します同期マネージャは高速同期と低速同期のどちらが可能か決定して、コンジットに eFast または eSlow を返します。コンジットがスキーマ データベースを同期している場合、返される同期タイプは高速同期が実際に可能かどうか決定するための十分条件ではありません。詳細は、「スキーマ データベースの同期モード」 を参照してください。「非スキーマ データベースの同期モード で説明したように、非スキーマ データベースに対して同期マネージャが返す結果は十分条件です。
- ハンドヘルドがデスクトップを上書きする(eHHtoPC)
- デスクトップ データを捨てて、ハンドヘルド データで上書きします。これはユーザ設定であり、このユーザ設定に対して HotSync マネージャはコンジットに値 eHHtoPC を渡します。応答として、コンジットはデスクトップ上のデータを削除して、ハンドヘルド データベースからすべてのデータを読み込みます。
- デスクトップがハンドヘルドを上書きする(ePCtoHH)
- ハンドヘルドデータを捨てて、デスクトップ データで上書きします。これはユーザ設定であり、このユーザ設定に対して HotSync マネージャはコンジットに値 ePCtoHH を渡します。応答として、コンジットはハンドヘルドからハンドヘルド データベース全体を削除するか、すべてのデータ(レコード、行データ、テーブル、定義、カテゴリ情報、カテゴリ メンバ)を削除します。それから、デスクトップ [2]
- 何もしない(eDoNothing)
- デスクトップ上とハンドヘルド上のデータに何も変更を加えません。これはユーザ設定であり、このユーザ設定に対して HotSync マネージャはコンジットに値 eDoNothing を渡します。コンジットはハンドヘルドと情報を交換する必要がありません。たとえコンジットが何もする必要がない場合であっても、HotSync マネージャは依然としてコンジットが何かをする必要がある(例えば、コンジットが実行されたという記録自体のために)ケースに備えてコンジットを呼び出します。
実行するコンジットのリストの作成 ^TOP^
最初のコンジットを実行する前に、HotSync マネージャは現在の HotSync 実施でどの同期コンジットが実行されるべきかを決定しなければなりません。以下のステップは、Windows のための HotSync マネージャが HotSync 実施時に実行される登録されたコンジットのリストをどのように作成するのかを示しています。
- HotSync マネージャはハンドヘルド上のすべてのアプリケーション - つまり、すべてのタイプ 'appl' のデータベース - の作成者 ID のリストを取得します
- コンジットマネージャはデスクトップ上に登録されているすべてのコンジットの作成者 ID をコンパイルします。
- HotSync マネージャは 2 つのリストを比較します。以下のどちらかが true ならばコンジットの作成者 ID を実行するコンジットのリストに追加します:
- アプリケーション リストの作成者 ID がコンジット リストの作成者 ID の 1 つと一致する。
または - HotSync マネージャの問合せに対してコンジットが常に実行されなければならないという応答をする。[3]
図 7.3 は、HotSync マネージャが 2 つのリストをどのように比較するのかの例を示しています。この例では、作成者 ID 'CU04' を持つコンジットがハンドヘルド上に一致するアプリケーションを持たないにもかかわらず実行されることに注意してください。これは、このコンジットが HotSync マネージャの問合せにデバイス上に同じ作成者 ID を持つアプリケーションがあるかどうかに関係なく実行されるべきであると応答するため(そして、その場合にだけ)に起こり得ます。
- アプリケーション リストの作成者 ID がコンジット リストの作成者 ID の 1 つと一致する。
- HotSync マネージャは実行されるコンジットのリストを優先順にソートします。優先値は 0 から 4 までの範囲です; HotSync マネージャは値 0 を持つコンジットを最初に実行して、値 4 を持つコンジットを最後に実行します。[4]
図 7.3 例: Windows のための HotSync マネージャが実行されるコンジットをどのように決定するか
バックアップするデータベースのリストの作成 ^TOP^
HotSync マネージャは、他のすべてのコンジットを実行した後、バックアップ コンジットを実行します。しかし、いずれかのコンジットを実行する前に、HotSync マネージャはハンドヘルド上のどのデータベースがバックアップされるべきかを決定します。
HotSync マネージャは、以下の条件の両方ともが true の場合にのみ、データベースをバックアップするデータベースのリストに載せます:
- ハンドヘルド上のデータベースの中のバックアップ ビットがセットされている。
- ハンドヘルド上のデータベースはこのデスクトップとの最後の HotSync 実施の後に変更されている。
HotSync マネージャは、以下の条件の両方ともが true の場合に、データベースは変更されたと見なします:- データベースの変更ビットがセットされている。
- ハンドヘルド上のデータベースの変更日付がデスクトップ上の HotSync ユーザの Backup フォルダの中にある対応するデータベースの変更日付よりも後である。
- NOTE
- 例外 - Windows のための HotSync マネージャは、データベースのタイプが 'DATA' (大文字/小文字を区別します)であり、かつ、同じ作成者 ID を持つ登録されたコンジットが実行するコンジットのリストにある場合、そのデータベースをバックアップ リストに載せません。
この例外の理由は、登録されたコンジットがすでにそのデータベースの同期をとっていて、バックアップ コンジットがバックアップする必要がないからです。図 7.4 は、HotSync マネージャがハンドヘルド データベースをバックアップするためにバックアップ コンジットのためのデータベースのリストに載せるかどうかをどのように決定するのかを示しています。
図 7.4 データベースがバックアップ コンジットによって扱われるかどうかの決定
インストール コンジットの実行 ^TOP^
HotSync マネージャが実行する最初のコンジットはインストール コンジットです。インストール コンジットは通常 Palm OS アプリケーションとデータベースをハンドヘルドの主記憶装置に、いずれかのタイプのファイルをハンドヘルドの拡張カードに印すとースします。HotSync マネージャのすべてのバージョンは少なくとも 1 つのデフォルトのインストール コンジットと共に出荷されます。
Windows のための HotSync マネージャ バージョン 3.01 以降はインストール コンジットを 2 回実行します:
- 他のすべてのコンジットを実行する前、しかし 「HotSync プロセスの初期化」 の後。このことは、HotSync 実施が開始する前にインストールするためのキューに追加されたファイルが、それらを必要とするかもしれないいずれかのコンジットの前にインストールされることを保証します。
- すべての同期コンジットが実行された後、しかしバックアップ コンジットが実行される前。詳細は、「インストール コンジットの再実行」 を参照してください。
- NOTE
- あなたが HotSync 実施時にあなたの同期コンジットにあなたのデータベースをインストールさせることを望むなら、SyncInstallDatabase() (C/C++ Sync Suite)または InstallDatabase()|COM Sync Suite Reference601/4 (COM Sync Suite)を呼び出します。この機能は、HotSync マネージャ バージョン 6.0 以降で Palm OS Cobalt を実行しているハンドヘルドに対して処理を行う場合にのみ使用可能です。
インストール ツールは HotSync マネージャと共に出荷されるエンド-ユーザ アプリケーションで、ユーザがファイルを次回の HotSync 実施時にハンドヘルドに転送するためにインストール コンジットのためのキューに追加することを可能にします。ファイルをインストールのためのキューに追加するために、インストール ツールはインストール援助機能 API を呼び出します。インストール援助機能 API は、インストール ツールとサード-パーティ アプリケーションまたはコンジットがファイルをハンドヘルドに転送するインストール コンジットのためのキューに追加するために呼び出すデスクトップ ライブラリです。インストール援助機能 API は C/C++ Sync Suite Reference と COM Sync Suite Reference でドキュメント化されています。
HotSync マネージャは、インストール援助機能 API がインストール コンジットが扱うファイル拡張子を持つファイルをキューに追加するために呼び出されている場合にのみ、インストール コンジットを実行します。アプリケーションまたはコンジットがインストール援助機能を呼び出してファイルをインストールするとき、インストール援助機能は以下のアクションを実行します:
- 選択された HotSync ユーザのためのフラグ ビットを、どのインストール コンジットが指定されたファイルの拡張子を持つファイルを扱うために登録されているかを示すようにセットします。
- ファイルを HotSync ユーザのディレクトリの中のある特定の場所にコピーします; 例えば、PRC と PDB ファイルは HotSync ユーザの Install ディレクトリにコピーされます。
HotSync マネージャは以下のインストール コンジット共に出荷されます:
- インストール
- Palm OS データベースのイメージ ファイルをハンドヘルドの主記憶装置にインストールします。PRC, PDB, SDB, SSD, PQA ファイル タイプを扱うことができます。HotSync マネージャのすべてのバージョンに含まれます。
- インストール サービス テンプレート
- Palm OS ネットワーク コンフィグレーションとネットワーク スクリプトを主記憶装置にインストールします。PNC と SCP ファイル タイプを扱うことができます。HotSync マネージャのすべてのバージョンに含まれます。バージョン Palm OS Cobalt より前のPalm OS を実行しているハンドヘルドに対してのみ機能します。
- カードへのインストール
- すべてのタイプのファイルを拡張カードにインストールします。HotSync マネージャのバージョン 4.0 以降に含まれます。
- HotSync 交換
- ファイルを、そのファイルのタイプが Palm OS Cobalt HotSync 交換ライブラリに登録されている場合、主記憶装置にインストールします。デスクトップ側の HotSync 交換機能を実現します。HotSync マネージャのバージョン 6.0 以降で使用可能です。ユーザがすべてのタイプのファイルをデスクトップとハンドヘルド間で転送することを可能にします。更なる情報は、第 3 章 「HotSync 交換の使用」 を参照してください。
レストア実施はインストール コンジットの特別な使用方法です。このケースでは、HotSync マネージャはインストール コンジットに、これがハンドヘルドの現在のデスクトップ上に存在している HotSync ユーザとの最初の HotSync 実施であることを示す同期タイプ eInstall を渡して、さらに、Backup フォルダ名を渡します。(HotSync マネージャはこの情報を OpenConduit() (C/C++ Sync Suite) に渡される CSyncProperties 構造体経由または PDHotsyncInfo|COM Sync Suite Reference601/3 オブジェクト(COM Sync Suite)経由で提供します。応答として、インストール コンジットは以下のことをします:
- ハンドヘルドが Palm OS Cobalt を実行していて、かつ、デスクトップが信任されている場合、レストア時に保護されているデータベースを読み込むために必要とされるセキュリティ データをレストアします。
- より新しいデータベースがハンドヘルド上に無い場合、Backup フォルダの中の各データベース イメージ ファイルを Palm OS データベースとしてハンドヘルドに転送します。
同期コンジットの実行 ^TOP^
HotSync プロセスが初期化された後、HotSync マネージャは 「実行するコンジットのリストの作成」 で説明したようにコンパイルされたリストに載っている同期コンジットを実行します。これらのコンジットを優先順に 1 つずつ実行します - 優先値 0 を持つコンジットを最初に、優先値 4 を持つコンジットを最後に。
各コンジットを実行するために、HotSync マネージャはコンジットのメイン エントリ ポイント - C API-ベース コンジットでは OpenConduit()、COM-ベース コンジットでは IPDClientNotify->BeginProcess() - を呼び出します。このとき、HotSync マネージャは以下のものを含む現在の HotSync 実施の情報をコンジットに渡します:
- 同期のタイプ - ユーザの設定とハンドヘルドの最後の同期が現在のデスクトップとのものだったかどうかに基づきます(詳細は、「同期モードの決定」 を参照してください)。
- HotSync ユーザ名。
- 現在の HotSync 実施がそのハンドヘルドとの最初のものかどうか。
- ハンドヘルドがモデム経由で接続されているかどうか。
コンジットが実行されている間、そのコンジットは - それと同様のバイナリがバイナリが存在しているプラットフォーム上で実行することを許可されている - すべてのことを実行することができます。HotSync プロセスの間にコンジットだけが実行することができるアクションには以下のものが含まれます:
同期マネージャ API を呼び出すことによってハンドヘルド上のデータを読み書きします。
- 拡張マネージャ API と仮想ファイル システム マネージャ API を呼び出すことによってハンドヘルド上の拡張カードとファイル システムにアクセスします。
- HotSync ログ API を呼び出すことによってメッセージを現在の HotSync ユーザのログ ファイルに書き込むためのキューに追加します。
HotSync マネージャは、コンジットがそれのメイン エントリ ポイントから成功値または致命的ではないエラー コードを返してきた場合にのみ、次の同期コンジットを実行することができます。
インストール コンジットの再実行 ^TOP^
Windows のための HotSync マネージャ バージョン 3.01 以降は、インストール コンジットがインストールするためのキューに追加されたファイルを持つ場合、バックアップ コンジット以外のすべての同期コンジットが実行された後に、各インストール コンジットを再び実行します。この 2 回目のインストール フェイズは、つい先ほど実行された同期コンジットによってインストールするためのキューに追加されたファイルが同じ HotSync 実施の間にインストールされることを保証します。
詳細は、「インストール コンジットの実行」 を参照してください。
バックアップ コンジットの実行 ^TOP^
HotSync マネージャは、他のすべてのコンジットを実行した後に、バックアップ コンジットを実行します。バックアップ コンジットとしてただ 1 つのコンジットを登録することができます。この節では、PalmSource が HotSync マネージャと共に提供する Backup と名前を付けられているバックアップ コンジットの振る舞いについて説明します。
いずれかのコンジットに対してと同様に、HotSync マネージャはバックアップ コンジットに、ユーザがデータベースのバックアップをとることを望んでいるのか、データベースを Backup フォルダからハンドヘルドに転送することを望んでいるのか、それともどちらでもないのかを示す同期タイプを渡します。
同期タイプがバックアップの場合、バックアップ コンジットは以下のことをします:
- 「バックアップするデータベースのリストの作成」 で説明したように HotSync マネージャが作成したリストに載っている各データベースのデータベース イメージ ファイルを作成します。これらのバックアップ ファイルは現在の HotSync ユーザの Backup フォルダの中に置かれ、データベース作成者 ID、タイプ、名前を含む固有のファイル名を持ちます。[5]
- ハンドヘルドが Palm OS Cobalt を実行していて、かつ、デスクトップが信任されている場合、レストア時に保護されているデータベースを読み込むために必要とされるセキュリティ データをバックアップします。
- ファイルがもはやハンドヘルド上に無い場合、ファイルを Backup フォルダから Archive フォルダに移動します。例えば、ユーザが最後の HotSync 実施の後にデータベースを削除した場合、ユーザはハード リセット後にそのデータベースがレストアされることを望みません。
バックアップ コンジットはバックアップ ビットがセットされているすべてのデータベース(アプリケーション、データベース、設定など)をバックアップするため、HotSync マネージャはハード リセットされたハンドヘルドを元の状態にレストアすることができます。
- 重要
- PalmSource 社は、あなたが作成するすべてのアプリケーションとデータベース - レストアされることを望まないデータを除いて - のバックアップ ビットをセットすることを強く推奨します。あなたがアプリケーションのバックアップ ビットをセットした場合、バックアップ コンジットは必要があるときにだけそれをバックアップするので、ユーザはパフォーマンスの低下という不利益を受けないということに注意してください。
バックアップ コンジットは通常データベースをハンドヘルドからデスクトップ コンピュータ上の記憶装置にコピーします。あなたがデスクトップ コンピュータ コンポーネントを持たない Palm OS アプリケーションを開発している場合でも、バックアップ コンジットはあなたのコンジットの必要性をうまく処理します。つまり、あなたはあなた自身でコンジットを開発する必要がないということを意味します。
デスクトップ コンピュータ上で操作されることがないデータを使用するアプリケーションのいくつかのクラスがあります; これらのアプリケーションはバックアップ コンジットだけを頼りにします。例えば、ハイスコア データベースを維持するハンドヘルド ゲーム プログラムは、バックアップ コンジットがデータをコピーすることを当てにすることができます。ハンドヘルドの設定を調節するユーティリティ プログラムや、ユーザがハンドヘルド上で閲覧することができる電子ブックも同様です。これらのアプリケーション タイプはすべて専用に開発されたコンジットではなくバックアップ コンジットを使用することができます。
HotSync プロセスの終了 ^TOP^
コンジットを実行した後、HotSync マネージャは状態情報をクリーン アップ、保存します。以下に HotSync マネージャの最終ステップを示します:
- これがハンドヘルドの最初の HotSync 実施である場合、HotSync マネージャは HotSync ユーザの名前と ID をハンドヘルドに書き込みます。
- ハンドヘルドが Palm OS Cobalt より前の Palm OS を実行している場合、ハンドヘルド上のパスワードがデスクトップ上に保存されてるパスワードと一致しなければ、HotSync マネージャは現在の HotSync ユーザのためのデスクトップ上のパスワードを更新します。HotSync マネージャは Palm OS Cobalt を実行しているハンドヘルド上のユーザのパスワードにアクセスすることはできません。
- HotSync マネージャは現在のデスクトップ ユーザの PC ID をハンドヘルドに書き込みます。
- HotSync マネージャは実行した HotSync の日付と時刻をハンドヘルドに書き込みます。
- HotSync マネージャは登録されているすべての通知機能に HotSync 実施が成功裏にまたは不成功に完了したというメッセージを送ります。
- HotSync マネージャは現在の時刻を書き留め、それを現在の HotSync ユーザのための最後の HotSync 実施時刻としてデスクトップに保存します。
- HotSync マネージャは現在の HotSync ユーザのために HotSync ログをハンドヘルドとデスクトップに保存します。
- Palm OS は現在の HotSync 実施の間に変更されたデータベースを持つ各ハンドヘルド アプリケーションを副起動します。さらに、この HotSync 実施でインストールされたすべてのアプリケーションを副起動します。アプリケーションは必要なアクションを実行することができます - 例えば、レコードをソートします - または何もしません。
- HotSync クライアントは「同期完了」通知のために通知マネージャに登録されているすべてのハンドヘルド アプリケーションに通知を送ります。
- 最後に、いずれかのコンジットがログにメッセージを追加した場合、HotSync マネージャは通知メッセージをユーザに対して表示します。ユーザはデスクトップ上でそれらのログ エントリを検証することができます。
- [1]合衆国特許番号 6,000,000 (すごい、でしょ?)
- [2]コンジットは保護されているデータベースを削除することができます。しかし、作成することはできません。そのため、保護されているデータベースを上書きするためにコンジットはデータベースのすべてのデータを削除して、その代わりとしてデスクトップ データを書き込まなくてはなりません。
- [3]HotSync マネージャ バージョン 6.0 以降だけが、ハンドヘルド上に一致するアプリケーションが無くても実行されるべきコンジットを発見するための、コンジットへの問合せを行うことができます。
- [4]あなたは HotSync マネージャが登録されているコンジットを実行する正確な順番を予測することはできません; あなたは優先値経由で相対的な順番をセットすることができるだけです。
- [5]Windows のための HotSync マネージャ バージョン 6.0 以降と共に出荷されるバックアップ コンジットは、Palm OS Cobalt を実行しているハンドヘルドに対してだけ、作成者 ID、タイプ、名前を使ってバックアップ ファイル名を生成します。ハンドヘルドが Palm OS Cobalt を実行していない場合、データベース名だけに基づくファイル名を生成します。