以前のバージョンをお使いの方へのご注意
Caché Direct は、下位互換性を持つように設計されていますが、場合によっては動作が変更することがあります。アーキテクチャの変更の中には、以前のバージョンをお使いの方に特にお知らせしておきたいものが含まれています。この情報は、新しい機能を活用できるようにアプリケーションを順応させる場合に役立ちます。
Caché Direct での IPv6 に関する問題
Caché Direct の現在のリリースでは、IPv6 のアドレス形式が全面的にサポートされています。特に、VisM.ocx の Server/MServer プロパティにより、以前と同じ一般的な接続文字列形式で IPv6 アドレスを使用できます。
ただし、アプリケーションで使用している方法によっては、不可避な障害が発生することも考えられます。具体的には、Caché Direct の接続文字列は、以下の一般的な形式のコロン区切り表現となっています。
CN_IPTCP:server_address[port]
server_address はマスタ・サーバで、これには IP アドレス、サーバの DNS 名、または特別な名前 localhost を指定できます。
Server プロパティ (指定されたサーバへの接続を要求するメカニズム) の設定から戻ると、接続を試みた結果を反映してこのプロパティは再設定されます。接続に成功していると、スレーブ・サーバ・アドレスを指定した最後の部分が追加されます。最近のリリース (スーパーサーバの導入以降) では、この部分は必ず 2 番目の部分と同じになるので重複した指定となります。接続に失敗していると、プロパティの値は空の文字列 "" に変更されます。
server_address でコロンを使用する IPv6 アドレスでは、混乱が発生する可能性があります。IPv6 では、複数のループバック・アドレス形式を使用できます。Caché Direct では、これらすべての形式をサポートしています。ただし、アプリケーション・コードで設定した前提条件によっては、新しいアドレスを使用すると不適切な動作になる可能性があります。以下では、Caché Direct で IPv6 アドレスがどのように扱われるかについて説明します。
-
接続文字列は、上記と同じ一般的な形式です。これは、ポート番号を囲む角括弧を検索することによって、server_address のエクステントを認識します。
-
IPv6 は独自のループバック形式 (::1) を持ち、IPv4 スタイルおよび “射影 IPv4” アドレス形式もサポートします。これらは ::a.b.c.d および ::FFFF.a.b.c.d のようになります。ここで a.b.c.d は IPv4 アドレスの 10 進バイト、FFFF はすべて 1 の 2 バイト・シーケンスです。したがって、IPv4 のループバックは、::127.0.0.1、::FFFF.127.0.0.1、::FFFF:007F:0100 のように、アドレスの下位バイトから順に記述して表現できます。これらのループバックはすべて同等で、実際のアドレスを表すものではありません。意味のある比較を行うため、Caché Direct では、これらすべてのアドレスを、接続ソフトウェアで認識して適切に処理できる名前 localhost に変換します。これは、そのアドレスがレジストリから取得したものであるか、明示的にアプリケーション・コードから取得したものであるかには関係ありません。
-
Caché Direct では、アドレスが IPv6 形式 (コロンを使用した形式) の場合、3 番目の部分が接続文字列に付加されなくなりました。接続に成功すると、Server プロパティは接続先のサーバを表す値に設定されます。IPv6 形式のアドレスの場合は、指定した文字列を簡潔にしたような形式になります。IPv4、DNS 名、または localhost を使用している場合は、5.1 以前の Caché のバージョンとの後方互換性を維持するため、重複指定となる 3 番目の部分が引き続き使用されます。
-
IPv6 環境での区切り文字としてコロンのみを扱うアプリケーション・コードは適切に機能しない可能性があります。
一般的な考え方として、接続文字列が意味する内容を人間が容易に認識できれば、ソフトウェアでも容易に認識できます。接続文字列の解析ルールは以下のとおりです。
-
最初の部分は必ず CN_IPTCP: と同じになります。
-
次の部分 (IPv4 形式または IPv6 形式ではサーバとポート) は、ポート番号の後の閉じ角括弧で終了します。これにより、アドレスにあるコロンにより生じる混乱を避けることができます。
-
Cache セキュリティの導入により、ユーザ名とパスワードは接続文字列では指定しないようになりました。ただし、Caché Direct ではどちらのパラメータも、拡張した IPv6 形式で引き続き正しく認識および処理できます。
以前の共有接続の動作
従来の VisM コントロールは、シングル・スレッドの共有接続メカニズムでした。これは、プロセス中に VisM コントロールすべてで共有される MServer プロパティを持っていました。実際、このプロパティは、サーバへの接続を反映した計算値でした。VisM で変更すると、このプロパティは現在のサーバから切断され、新しいサーバ・プロセスへの新しい接続が作成されます。このプロパティに空の文字列が設定されている場合、サーバから切断されます。
通信は、別のスレッドで行われました。
新しいアーキテクチャ
新しい VisM コントロールの新しい内部構造は、VisM オブジェクト、これらが接続されている CDConnects、およびその下で CDConnects にアタッチされているサーバ・プロセスの 3 層から構成されています。CDConnect には、特にこの説明に関連する次のような性質があります。
-
CDConnect は、複数の呼び出し元に接続できます。これは、複数の VisM クライアントが同じサーバ・プロセスを共有できることを示します。
-
CDConnect をあるサーバ・プロセスから切断し、すべての呼び出し元と共に別のサーバ・プロセスに接続することができます。
-
CDConnect をサーバ・プロセスに接続する必要はありません。
-
CDConnects は複数存在することがあります。これらの CDConnects はそれぞれ、専用のサーバと VisM クライアントを持ちます。
現在の 3 層と、CDConnect 層の設計方法により、Caché Direct アプリケーションの柔軟性はさらに高まっています。これまでは不可能だったクライアント/サーバ関係を作成できます。また、同時に別々の接続が可能なので、マルチスレッド・アプリケーションを作成できます。接続はそれぞれ、独立した通信スレッドを持ち、これを管理します。それでも、各接続の同期がとられている必要があります。これは、サーバ・ジョブ自体はシングルスレッドで、一度に処理できるメッセージは 1 つのみだからです。
動作に関する注意
ここで説明する変更により、下位互換性の問題が発生する場合があります。新しい VisM は、ほとんどの一般的な場合と同じ動作を試みます。それができない場合、最も予期される動作を試みます。
このバージョンの VisM には、Server というプロパティがあり、これは Caché への接続に使用されます。下位互換性のために、VisM には、古い名前の MServer というプロパティもあります。ほとんどの場合、どちらのプロパティでも使用できますが、VisM コントロールがサーバに接続されていない場合は、プロパティによって動作が異なります。
-
アプリケーションが MServer プロパティを取得していても、VisM はまだ接続されていないという場合、最新の接続が存在する場合にはこれを共有し、その接続を MServer プロパティとして返します。
-
同じ状況で、アプリケーションが Server プロパティを取得した場合、VisM は接続されず、Server プロパティは空の文字列のまま残ります。
アプリケーションで Server プロパティまたは MServer プロパティが設定されている場合の動作は次のとおりです。
-
VisM が接続されていなかった場合、新しい接続が作成されます。既存の VisM やその接続には影響はありません。この動作は、Caché Direct の前のバージョンの動作とは異なります。
-
VisM が接続されていた場合、VisM が使用している (他の VisM と共有している可能性のある) 接続オブジェクトがサーバから切断されます。接続文字列が空ではない場合、新しいサーバに接続されます。この影響を受けるのは、このチャネルを共有している VisM のみです。これは、他の VisM すべてのサーバを変更する、Caché Direct の従来のバージョンとの互換性を持ちます。
また、このバージョンの VisM には新しいメソッドも用意されています。詳細は、"VisM コントロールの使用に関する基本" の章を参照してください。これらのメソッドは、Connect()、SetServer()、および DeleteConnection() です。
Caché バージョン 2007.1 以降、SetServer() の最初の引数として、接続タグを使用できるようになりました。また、Server プロパティ (または、MServer プロパティ) に接続タグを設定することもできます。
その他のアーキテクチャの変更
-
このバージョンから、Caché スーパーサーバが従来の Caché Direct マスタ・サーバ・ルーチンに取って代わります。従来、マスタ・サーバは接続から要求を受信し、新しいポートにスレーブ・サーバ・プロセスを生成し、呼び出し元を新しいポートにリダイレクトしていました。呼び出し元はマスタ・サーバから切断され、正しいポート上のスレーブ・サーバに接続されました。
今バージョンから、スーパーサーバは接続要求を受信し、スレーブ・サーバ・プロセスを生成してから、途中で切断されずに、呼び出し元を直接このプロセスに転送します。その他のポートは使用されません。
-
Caché Direct サーバが Unicode サーバの場合、メッセージはすべて Unicode で送信されるため、ロケールの問題が解消されます (ただし、これは 8 ビット・サーバには当てはまりません。詳細は、"Unicode とロケールの問題" を参照してください)。
-
使用している Caché Direct のバージョンによっては、メッセージの処理や、クライアントとサーバの相互作用の制御などを行うフックが追加されていることもあります。
-
Caché Direct では、Caché セキュリティが透過的にサポートされるようになったため、NewTask 処理にログイン・フック (^%CDSwitch("SecHook")) はほとんど必要なくなりました。このフックは引き続きサポートされますが、マニュアルには記載されません。