Palm Programmer's Laboratory
Introduction to Conduit Development601/6
(訳者注: 通知機能の原文は Notifiers)
コンジットと通知機能の登録は、HotSync プロセスの外側で、コンジットまたは通知機能についての基本的な情報を持つ HotSync マネージャを提供するデスクトップ インストーラ アプリケーションによって実行される、1 度の操作です。この情報は HotSync マネージャが、コンジットと通知機能のエントリ ポイントのいずれかを呼び出す必要があるときに、一意にコンジットまたは通知機能を同定することを可能にします。
- NOTE
- コンジットが適切に機能しない最も一般的な理由は、それが適切に登録されていないからです。
コンジットと通知機能は、HotSync プロセスが始まる前に、HotSync マネージャに登録されなくてはなりません。この章は以下の節を含みます。
コンジットまたは通知機能の登録手法 ^TOP^
Windows のための HotSync と同期するコンジットを登録するには 2 つの基本的な方法があります。そのことを以下で説明します。
これらの 2 つの手法は等価です; HotSync マネージャは異なる手法で登録された同期コンジットを違うように扱いません。
- NOTE
- 通知機能、インストール コンジット、それにバックアップ コンジットは、通常、登録されるのみです; それらをフォルダ-登録することはできません。
通常の登録 ^TOP^
通常の登録は、インストーラが、インストール時に、コンフィグレーション エントリの中に登録情報を書き込むことを要求します。この手法は、Windows のための HotSync のすべてのバージョンによって、以下で説明されるコンジットと通知機能を登録するために、サポートされます。
- 重要:
- コンジット コンフィグレーション(CondCfg)ユーティリティは、開発とテストの間、コンジット マネージャを呼び出すためのコードを書くこと無しに、通常通りに同期コンジットまたは通知機能を登録することを可能にします。しかしながら、CondCfg はエンド-ユーザ ユーティリティではありませんので、PalmSource はこの開発者専用のユーティリティをコンジットまたは通知機能に付けて配布することを許可しません。
通常通りに同期コンジットを登録するために、インストーラは コンジット マネージャ API を呼び出していくつかのコンジット コンフィグレーション エントリ を書き込みます。要求されるエントリの最小セットは:
- Conduit
- C API-ベース コンジット DLL のファイル名(またはフル パス)
- Creator
- 作成者 ID。通常、コンジットに関連付けられるハンドヘルド上のアプリケーションに付けられます。これは HotSync マネージャが登録されたコンジットを一意に同定するためのキーです。いずれかの Sync Suite で作成されるコンジットのために要求されます。
- COMClient
- COM-ベース コンジットの名前または ProgID。他のタイプのコンジットのためには要求されません。
- ClassName と ClassPath13
- Java-ベース コンジットによって使用されるすべてのクラスのクラス名とパス。他のタイプのコンジットのためには要求されません。
他の標準、オプションのコンジット コンフィグレーション エントリのための値を指定できます -- 例えば、Priority、これの値は 0 から 4、は HotSync マネージャがコンジットを実行する相対的な順番を指定します。また、自分自身が使うための自分自身の追加エントリを作成、セットすることができます。コンジットを登録するためのこの手法をどのように使うかについてのより詳細な説明は、Sync Suite のための Sync Suite Companion 文書を参照してください。
- NOTE
- HotSync マネージャ バージョン 6.0 より前のものは、コンジットの登録後に新たに登録されたコンジットを識別するために、リフレッシュまたは再開されなくては
なりません。しかしながら、バージョン 6.0 以降のものは自動的に登録されたコンジットのリストをリフレッシュするため、HotSync マネージャをリフレッシュまたは再開する必要はありません。
通常通りにインストール コンジットを登録するために、インストーラは インストール コンジット マネージャ API を呼び出していくつかのインストール コンジット コンフィグレーション エントリを書き込みます。要求されるエントリの最小セットは:
- Mask
- 現在のデスクトップ コンピュータ上のインストール コンジットを一意に同定するビット マスク値
- CreatorID
- インストール コンジットに関連付けられる固有の ID
- Extensions
- インストール コンジットがインストールできるファイルのファイル タイプ拡張子
- Directory
- インストール ディレクトリの名前。ここから、ある特定のインストール コンジットがデスクトップからハンドヘルドへファイルを転送します。
- Module
- インストール コンジットのファイル名
通常通りにバックアップ コンジットを登録するために、インストーラはコンジット マネージャ API を呼び出して 1 つの HotSync マネージャ コンフィグレーション エントリを書き込みます:
- HotSync Manager\BackupConduit
- HotSync マネージャが HotSync プロセスの終了近くでバックアップ コンジットとして呼び出すコンジットのファイル名
通常通りに通知機能を登録するために、インストーラは 通知機能インストール マネージャ API を呼び出して 1 つの HotSync マネージャ コンフィグレーション エントリを書き込みます:
- HotSync Manager\NotifierN
- HotSync マネージャが HotSync プロセスの開始時と終了時に呼び出す通知機能のファイル名
フォルダ-ベースのコンジット登録 ^TOP^
フォルダ-ベースのコンジット登録が要求するのは:
- HotSync マネージャの、実行時の、登録情報の要求に応答するためのコンジットの GetConduitInfo() エントリ ポイントの中のロジックの実装すること
- インストール時に、コンジットを現在の Windows ユーザ(またはシステム)の Conduits フォルダにコピーすること
- NOTE
- フォルダ-ベースのコンジット登録は、C API-ベース同期コンジットと Windows のための バージョン 6.0 以降の HotSync マネージャのためにのみ、サポートされます。
HotSync マネージャは、Conduits フォルダ内を探索し、それから各コンジットの GetConduitInfo() エントリ ポイントを呼び出すことによって、フォルダ-ベース コンジットを発見します。コンジット DLL が存在しない、または、HotSync マネージャがコンジット DLL を要求したときにコンジット DLL が登録情報を返さなかった場合、コンジットはフォルダ登録されたものではなく、HotSync マネージャによって呼び出すことはできません。
Conduits フォルダは Disabled サブフォルダを保持します。コンジット マネージャ API はフォルダ登録されたコンジットを使用不可にすることを可能にします。それは、単純にファイルを Conduits フォルダから Disabled サブフォルダに移動させるだけです。ユーザもまた、コンジット ファイルをあるフォルダから他のフォルダに移動させることによって、フォルダ登録されたコンジットを使用不可にすることも使用可能にすることもできます。
システム登録コンジットとユーザ登録コンジット両方のための Conduits と Disabled フォルダのパスについては、図 5.5 を参照してください。
コンジットの登録手法の比較 ^TOP^
フォルダ-ベース コンジット登録は、通常の手法と比べて以下の利点があります。
- コンジットの登録情報をコンパイル時にセットできます。そのため、インストーラは、登録情報をインストール時に書き込むために、複数のコンジット マネージャを作成する必要がありません。
- インストーラをより単純にすることができます。インストーラはフォルダを見つけ、そこにファイルをコピーすることだけを求められます。
- コンジットを開発、テストしている間、より短時間で HotSync マネージャにコンジットを実行させることができます。コンジットを登録するために、インストーラを書いたり、CondCfg ユーティリティを使用する必要はありません。
しかしながら、インストール時にインストーラにコンジットの登録情報をセットさせることを望む場合、通常のコンジット登録を使用することを望むかもしれません。この方法だと、登録情報をカスタマイズすることができ、また、その後にコンジット マネージャを呼び出すことによってそれを変更することができます。フォルダ登録コンジットでは、コンジットをコンパイルした後、登録情報は Read-only になります。
もちろん、両方の手法の利点をとることもできます: 開発とテスト期間中はコンジットをフォルダによって登録します。なぜなら、その方が簡単だからです。それから、インストール時にコンジットの登録情報をカスタマイズまたは変更する必要がある場合、コンジットを展開するときに通常通りにコンジットを登録するインストーラを書きます。
ユーザ登録コンジットと通知機能と、システム登録コンジットと通知機能 ^TOP^
Windows のための HotSync マネージャのバージョン 6.0 以降のものは、現在の Windows ユーザのために登録されるコンジットと通知機能と、システムのために登録されるコンジットと通知機能を区別します。HotSync プロセスの開始時に、コンジット マネージャは、すべての衝突しあわない、登録されたコンジットの作成者 ID のリストをコンパイルします。コンジット マネージャはこのリストを HotSync マネージャに渡します。HotSync マネージャは、現在の Windows ユーザが HotSync 操作を実行するときに、実際にリストが呼び出すコンジットを決定するために、リストを使用します。コンジット マネージャはすべての登録されたコンジットを調べます。コンジット マネージャはコンジットがどのように登録されたのか(通常の登録またはフォルダ-ベース)を区別しませんが、コンジットが誰のために登録されたのかを調べます。システム登録コンジットとユーザ登録コンジットが同じ作成者 ID を持つ場合、コンジット マネージャはユーザ登録コンジットのみをコンジットのリストに載せます。
- NOTE
- ユーザ登録コンジットは常に、同じ作成者 ID を持つシステム登録コンジットに対して優先されます。
表 6.1 は、コンジット マネージャがユーザ登録コンジットと通知機能のリストと、システム登録コンジットと通知機能のリストを調和させるとき、コンジット マネージャは何を比較するのかを示しています。
表 6.1 コンジットマネージャはどのようにユーザ登録コンジットと通知機能 対 システム登録コンジットと通知機能を調和させるか
2 つは何のためのものか | ユーザ登録がシステム登録に対して優先されるのは、... |
---|---|
同期コンジット | 同じ作成者 ID を持つ |
インストール コンジット | 同じ登録されたファイル拡張子を持つ(「インストール コンジットの実行」を参照してください。) |
バックアップ コンジット | 常に。Windows ユーザごとにただ 1 つのバックアップ コンジットのみを実行されることができるため。 |
通知機能 | 同じパスとファイル名を持つ |
図 6.1 は、コンジット マネージャ(注1)がどのコンジットと通知機能をリストに載せるかをどのように決定するのかの例を示しています。
図 6.1 例: ユーザ登録コンジットと通知機能をシステム登録コンジットと通知機能に対して優先させる
システムのためのコンジットまたは通知機能の登録は、それらに対応する登録されたコンジットまたは通知機能をまだ持っていないすべての Windows ユーザのために登録を行います。これは、システム上のすべての Windows ユーザのために、各 Windows ユーザがインストーラを実行することなしに、インストーラがコンジットまたは通知機能を登録することを可能にします。これはまた、各 Windows ユーザが異なるコンジットと通知機能のセットを登録することも可能にします。しかしながら、ある Windows ユーザ ログイン内で作成されたすべての HotSync ユーザは同じコンジットと通知機能のセットを共有します(各 HotSync ユーザはこれらのコンジットを異なるようにコンフィグレーションできますが)。HotSync ユーザと Windows ユーザの違いについての更なる情報は、「マルチ ユーザのサポート」 を参照してください。
コンジット衝突の解決 ^TOP^
HotSync プロセスは、HotSync 操作の間にただ 1 つのコンジットのみがあるアプリケーションのデータと同期をとることができるという原則に基づきます; そうでなければ、同じ HotSync 操作の中の同じデータと同期をとる 2 番目のコンジットは、データベースとレコードの変更フラグの状態を信用することができません。コンジット登録はこのシチュエーションを防ごうと試みます。
通常のコンジット登録は、現在の Windows ユーザのために登録されているユーザ コンジットと同じ作成者 ID を持つ 2 番目のユーザ コンジットを登録することを許可しません; システムのために 2 つのシステム登録コンジットを登録しようとする場合も同様です。コンジット マネージャはそのような二重登録を防ぎ、2 番目のコンジットを同じ作成者 ID を使って通常通りの登録をしようとするとエラーを返します。コンジット マネージャは、1 つのコンジットは現在の Windows ユーザのために登録され、かつ、もう 1 つのコンジットはシステムのために登録される場合にのみ、同じ作成者 ID を持つ 2 つのコンジットを登録することを許可します。「ユーザ登録コンジットと通知機能と、システム登録コンジットと通知機能」 で説明されているように、ユーザ登録コンジットは常に優先され、そのため、相互関係にあるユーザ登録コンジットとシステム登録コンジットは決して衝突しません。
しかしながら、あるフォルダ登録コンジットが、もう 1 つのフォルダ登録コンジットまたは通常通りに登録されたコンジットと同じ作成者 ID を持つことはあり得ます。その理由は、コンジット マネージャは、すべての登録されたコンジットのリストを作成するときにフォルダ登録コンジットが呼び出されるまで、フォルダ登録コンジットを検証しないからです。コンジット マネージャは、以下のことが起こるといつでも、このリストを作成します。
- ユーザが HotSync 操作を開始する。
- ユーザまたは HotSync マネージャ API が以下のいずれかを行う。
- HotSync マネージャを開始または再開するか、コンジットのリストのリフレッシュを引き起こす。
- HotSync マネージャのCustom メニュー項目を選択する。
- インストーラまたはアプリケーションがコンジット マネージャを呼び出して以下のことを行う。
- 通常通りのコンジットの登録。
- 使用不可のフォルダ登録コンジットを使用可能にする。
- 登録されたコンジットのリストを返す。
これらのイベントのいずれも、コンジット マネージャが同じ作成者 ID を持つ 2 つ以上のコンジットを発見するという結果を引き起こす可能性があります。これが起こると、コンジット マネージャ API はエラーを返します。
HotSync マネージャが、与えられた HotSync ユーザとコンジット作成者 ID に対して、初めてコンジット マネージャからのエラーを受け取ると、HotSync マネージャは 図 6.2 のような Choose Conduit ダイアログ ボックスを表示します。
図 6.2 HotSync マネージャが行うコンジット衝突を解決するためのユーザへの問い合わせ
ユーザが実行するコンジットを選択して OK をクリックすると、HotSync マネージャは、この現在の HotSync ユーザのための設定を、デスクトップ上に保存されているユーザ データに保存します。これにより、HotSync マネージャは同じ衝突を解決するために再度ユーザに問い合わせをすることはありません。リスト上の他のすべてのコンジット衝突は結果的に登録されず、その結果、HotSync マネージャはそれらを実行したり、Custom ダイアログ ボックスの中に表示したりしません。
しかしながら、ユーザが Ignore をクリックした場合、衝突は未解決のままです。HotSync マネージャはすべてのコンジット衝突をコンジットを実行するためのコンジット リストから削除し(注2)、ユーザが HotSync マネージャの Custom メニュー項目を選択するときにそれらをリストに載せません。HotSync マネージャが、登録されたコンジットのリストを作成するために、コンジット マネージャに問い合わせをするたびに、前に説明したように HotSync マネージャはユーザに衝突を解決してもらうために再度 Choose Conduit ダイアログ ボックスを表示します。
HotSync マネージャは Choose Conduit ダイアログ ボックスを最後の手段として提供します。PalmSource は、作成したフォルダ-ベース コンジットを Conduits フォルダにコピーする前に、同じ作成者 ID を持つコンジットがすでに登録されていないかをチェックすることを推奨します。登録されている場合、ユーザに存在しているコンジットの登録を解除するかどうか選択してもらうために問い合わせを行い、それにより、作成したコンジットを Conduits フォルダに追加するか、追加せずに終了します。作成した製品に存在する潜在的なコンジット衝突を処理することは、HotSync マネージャの一般的な Choose Conduit ダイアログ ボックスを当てにするよりも、ユーザにとって意味があります。
注1. ここでは、「コンジット マネージャ」はインストール コンジット マネージャと通知機能インストール マネージャを含みます。
注2. 衝突しているコンジットは実行されないため、衝突している作成者 ID を持つバックアップ コンジットが通常通りハンドヘルド上のデータベースをバックアップすることができます。それゆえ、データベースは、衝突により同期されないにもかかわらず、少なくともバックアップはされます。