13.07.2015 Views

Caché Direct の使用法

Caché Direct の使用法

Caché Direct の使用法

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

<strong>Caché</strong> <strong>Direct</strong> の 使 用 法<strong>Caché</strong> Version 2013.1 2013 年 07 月 02 日Copyright © 2012 InterSystems CorporationAll rights reserved.このドキュメントは、 Sun Microsystems、RenderX Inc.、 アドビ システムズ および ワールドワイド・ウェブ・コンソーシアム(www.w3c.org)のツールと情 報 を 使 用 して、 Adobe Portable Document Format (PDF)で 作 成 およびフォーマットされました。 主 要 ドキュメント 開 発 ツールは、InterSystemsが 構築 したCacheéと Javaを 使 用 した 特 別 目 的 のXML 処 理 アプリケーションです。, ,<strong>Caché</strong> WEBLINK, Distributed Cache Protocol, M/SQL, M/NET および M/PACT は InterSystems Corporation の 登 録 商 標 です。, , and ,InterSystems TrakCare, InterSystems Jalapeño Technology, Enterprise Cache Protocol, ECP および InterSystems Zen は InterSystems Corporation の登 録 商 標 です。ここで 使 われている 他 の 全 てのブランドまたは 製 品 名 は、 各 社 および 各 組 織 の 商 標 または 登 録 商 標 です。このドキュメントは、インターシステムズ 社 ( 住 所 :One Memorial Drive, Cambridge, MA 02142)あるいはその 子 会 社 が 所 有 する 企 業 秘 密 および 秘 密情 報 を 含 んでおり、インターシステムズ 社 の 製 品 を 稼 動 および 維 持 するためにのみ 提 供 される。この 発 行 物 のいかなる 部 分 も 他 の 目 的 のために 使用 してはならない。また、インターシステムズ 社 の 書 面 による 事 前 の 同 意 がない 限 り、 本 発 行 物 を、いかなる 形 式 、いかなる 手 段 で、その 全 てまたは一 部 を、 再 発 行 、 複 製 、 開 示 、 送 付 、 検 索 可 能 なシステムへの 保 存 、あるいは 人 またはコンピュータ 言 語 への 翻 訳 はしてはならない。かかるプログラムと 関 連 ドキュメントについて 書 かれているインターシステムズ 社 の 標 準 ライセンス 契 約 に 記 載 されている 範 囲 を 除 き、ここに 記 載 された 本 ドキュメントとソフトウェアプログラムの 複 製 、 使 用 、 廃 棄 は 禁 じられている。インターシステムズ 社 は、ソフトウェアライセンス 契 約 に 記 載 されている 事 項 以 外 にかかるソフトウェアプログラムに 関 する 説 明 と 保 証 をするものではない。さらに、かかるソフトウェアに 関 する、あるいはかかるソフトウェアの 使 用 から 起 こるいかなる 損 失 、 損 害 に 対 するインターシステムズ 社 の 責 任 は、ソフトウェアライセンス 契 約 にある 事 項 に 制 限 される。前 述 は、そのコンピュータソフトウェアの 使 用 およびそれによって 起 こるインターシステムズ 社 の 責 任 の 範 囲 、 制 限 に 関 する 一 般 的 な 概 略 である。 完全 な 参 照 情 報 は、インターシステムズ 社 の 標 準 ライセンス 契 約 に 記 され、そのコピーは 要 望 によって 入 手 することができる。インターシステムズ 社 は、 本 ドキュメントにある 誤 りに 対 する 責 任 を 放 棄 する。また、インターシステムズ 社 は、 独 自 の 裁 量 にて 事 前 通 知 なしに、 本 ドキュメントに 記 載 された 製 品 および 実 行 に 対 する 代 替 と 変 更 を 行 う 権 利 を 有 する。インターシステムズ 社 の 製 品 に 関 するサポートやご 質 問 は、 以 下 にお 問 い 合 わせください:Tel:Fax:Email:InterSystems Worldwide Customer Support+1 617 621-0700+1 617 374-9391support@InterSystems.com


目 次このドキュメントについて ................................................................................................... 11 <strong>Caché</strong> <strong>Direct</strong> 入 門 ........................................................................................................ 31.1 概 念 .................................................................................................................. 31.1.1 用 語 .......................................................................................................... 41.1.2 コミュニケーション・モデル ............................................................................. 51.2 使 用 可 能 なツールと 方 法 ....................................................................................... 52 VisM コントロールの 使 用 に 関 する 基 本 ............................................................................ 72.1 VisM コントロールへのアクセス ............................................................................... 72.2 接 続 と 切 断 ......................................................................................................... 82.2.1 接 続 文 字 列 と 接 続 タグ ................................................................................. 82.2.2 <strong>Caché</strong> への 接 続 .......................................................................................... 92.2.3 CDConnect のチャネルの 変 更 ..................................................................... 102.2.4 <strong>Caché</strong> からの 切 断 ...................................................................................... 102.2.5 CDConnect の 破 棄 .................................................................................... 102.2.6 方 法 の 概 要 .............................................................................................. 102.3 ネームスペースの 設 定 ........................................................................................ 122.4 コードの 実 行 ..................................................................................................... 132.5 ミラーリングされたプロパティの 使 用 ....................................................................... 132.5.1 ミラーリングされた 基 本 的 な 値 の 使 用 ............................................................. 142.5.2 PLIST の 使 用 ........................................................................................... 142.6 Visual Basic ユーザ・インタフェースへのコールバック ................................................ 152.6.1 Visual Basic コールバックをサポートするための 要 件 ........................................ 162.6.2 コントロールのプロパティの 参 照 ................................................................... 162.6.3 コントロールのメソッドの 実 行 ........................................................................ 162.7 Windows 関 数 や <strong>Caché</strong> ユーティリティ 機 能 の 使 用 ................................................... 162.8 メッセージ 制 約 の 理 解 ......................................................................................... 172.8.1 Unicode とロケールの 問 題 ........................................................................... 172.8.2 メッセージのサイズ ..................................................................................... 182.9 例 .................................................................................................................... 182.9.1 簡 単 な 例 : Lightweight <strong>Caché</strong> ターミナル ...................................................... 182.9.2 その 他 の 例 ............................................................................................... 193 その 他 の 機 能 ............................................................................................................. 213.1 概 要 ................................................................................................................. 213.2 エラー・トラップ ................................................................................................... 223.2.1 %cdEHOOK ローカル 変 数 ........................................................................... 223.3 キープ・アライブ 機 能 ........................................................................................... 223.3.1 初 期 のキープ・アライブ 間 隔 ........................................................................ 233.3.2 キープ・アライブ 設 定 (クライアント) ................................................................ 233.3.3 キープ・アライブ・エラーのシャットダウン・イベント (クライアント) .......................... 233.4 サーバの 読 み 取 りループと 終 了 確 認 ..................................................................... 243.4.1 サーバの 終 了 確 認 手 順 .............................................................................. 243.4.2 %cdPULSE ローカル 変 数 ............................................................................. 243.5 フックの 読 み 取 りと 書 き 込 み .................................................................................. 253.5.1 サーバ 側 の 読 み 取 りフックと 書 き 込 みフック ..................................................... 253.5.2 クライアント 側 の 読 み 取 りフックと 書 き 込 みフック ............................................... 253.6 その 他 のサーバ 側 フック (グローバル 変 数 ) ............................................................. 26<strong>Caché</strong> <strong>Direct</strong> の 使 用 法iii


3.6.1 BeginTaskHook ......................................................................................... 263.6.2 IdleHook .................................................................................................. 273.6.3 EndTaskHook ............................................................................................ 273.6.4 ShutDownHook .......................................................................................... 273.7 ユーザ・キャンセル・オプション .............................................................................. 274 最 善 の 使 用 方 法 ......................................................................................................... 294.1 必 要 のないプロパティを 削 除 する .......................................................................... 294.2 アプリケーションをシャットダウンしたときに 明 示 的 に 切 断 する ..................................... 294.3 再 帰 的 、または 非 同 期 的 なサーバ 呼 び 出 し ............................................................ 304.3.1 クライアント 上 のタイマ ................................................................................. 304.3.2 Visual Basic の DoEvents 関 数 .................................................................... 305 VisM.ocx コントロールの 詳 細 ........................................................................................ 315.1 VisM 拡 張 接 続 文 字 列 の 構 文 .............................................................................. 315.1.1 実 行 時 の 接 続 文 字 列 の 形 式 ....................................................................... 315.1.2 その 他 の 接 続 文 字 列 の 形 式 ........................................................................ 325.2 VisM プロパティ ................................................................................................. 325.2.1 ミラーリングされた VisM プロパティ ............................................................... 325.2.2 その 他 の VisM プロパティ ........................................................................... 335.3 VisM メソッド ...................................................................................................... 375.3.1 接 続 メソッドの 比 較 ..................................................................................... 385.4 VisM イベント ..................................................................................................... 396 非 ActiveX アプリケーションでの <strong>Caché</strong> <strong>Direct</strong> の 使 用 法 .................................................. 416.1 一 般 的 な 手 順 .................................................................................................... 416.2 推 奨 事 項 .......................................................................................................... 416.3 メモ .................................................................................................................. 427 ログ .......................................................................................................................... 437.1 クライアントでのログ ............................................................................................ 437.1.1 VisM LogMask プロパティ ........................................................................... 437.1.2 レジストリ・スイッチ ...................................................................................... 437.1.3 レジストリ 値 の 取 得 と 設 定 ............................................................................ 447.1.4 ログ・ファイルのサイズの 制 限 ....................................................................... 447.2 サーバでのログ .................................................................................................. 457.3 サーバ・エラー・グローバル .................................................................................. 45付 録 A: インストールとアップグレード ................................................................................. 47A.1 <strong>Caché</strong> <strong>Direct</strong> サーバのアップグレード ................................................................... 47A.2 新 規 マシンへの VisM のインストール .................................................................... 47付 録 B: 以 前 のバージョンをお 使 いの 方 へのご 注 意 ............................................................. 49B.1 <strong>Caché</strong> <strong>Direct</strong> での IPv6 に 関 する 問 題 ................................................................... 49B.2 以 前 の 共 有 接 続 の 動 作 ...................................................................................... 50B.3 新 しいアーキテクチャ ......................................................................................... 50B.4 動 作 に 関 する 注 意 ............................................................................................. 51B.5 その 他 のアーキテクチャの 変 更 ............................................................................ 51付 録 C: 例 : Visual Basic でのプリンタのサポート ................................................................ 53C.1 概 要 ................................................................................................................ 53C.2 内 部 コマンドの 構 文 ........................................................................................... 53C.2.1 プロパティの 設 定 ...................................................................................... 54C.2.2 プロパティの 取 得 ...................................................................................... 54C.2.3 メソッドの 実 行 ........................................................................................... 54iv<strong>Caché</strong> <strong>Direct</strong> の 使 用 法


このドキュメントについてこのドキュメントでは、プログラマを 対 象 に、ActiveX コントロールや C++ API を 使 用 して <strong>Caché</strong> サーバと 通 信 するクライアントを 作 成 するために <strong>Caché</strong> <strong>Direct</strong> を 使 用 する 方 法 について 説 明 します。このドキュメントの 内 容 は 以 下 のとおりです。• "<strong>Caché</strong> <strong>Direct</strong> 入 門 " では、<strong>Caché</strong> <strong>Direct</strong>、その 主 な 概 念 、およびユーザに 提 供 されるツールについて 説 明 します。• "VisM コントロールの 使 用 に 関 する 基 本 " では、VisM コントロールの 一 般 的 な 使 用 方 法 について 説 明 します。• "その 他 の 機 能 " では、カスタム・プロセスを 指 定 して、 多 様 な 場 合 に 全 体 的 なクライアントとサーバの 相 互 作 用 を 実行 する 方 法 について 説 明 します。• " 最 善 の 使 用 方 法 " では、<strong>Caché</strong> <strong>Direct</strong> での 最 善 のプログラミング 方 法 について 説 明 します。• "VisM.ocx コントロールの 詳 細 " では、<strong>Caché</strong> <strong>Direct</strong> ActiveX コントロール (VisM.ocx) に 関 する 参 考 情 報 について説 明 します。• " 非 ActiveX アプリケーションでの <strong>Caché</strong> <strong>Direct</strong> の 使 用 法 " では、ActiveX を 使 用 していない (VisM.ocx のない)C++ などのアプリケーションから <strong>Caché</strong> <strong>Direct</strong> のプロパティやメソッドを 使 用 する 方 法 について 説 明 します。• "ログ" では、クライアントやサーバのログを 可 能 にする 方 法 について 説 明 します。これは 特 に 問 題 の 診 断 に 役 立 ちます。また、このドキュメントには 以 下 の 付 録 も 付 いています。• "インストールとアップグレード" では、<strong>Caché</strong> を 再 インストールせずにサーバをアップグレードする 方 法 、および<strong>Caché</strong> がインストールされていないマシンにクライアント 側 ソフトウェアをインストールする 方 法 について 説 明 します。• " 以 前 のバージョンをお 使 いの 方 へのご 注 意 " では、 以 前 のバージョンをお 使 いの 方 に 特 にお 知 らせしておきたいアーキテクチャの 変 更 について 説 明 します。この 情 報 は、 新 しい 機 能 を 活 用 できるようにアプリケーションを 適 応 させる 場 合 に 役 立 ちます。• " 例 :Visual Basic でのプリンタのサポート" では、<strong>Caché</strong> ObjectScript から Windows の 既 定 のプリンタ (VB Printerオブジェクト) を 使 用 したコールバックの 例 を 示 すサンプルについて 説 明 します。また、 完 全 な 目 次 もあります。<strong>Caché</strong> <strong>Direct</strong> の 使 用 法 1


1<strong>Caché</strong> <strong>Direct</strong> 入 門<strong>Caché</strong> <strong>Direct</strong> はクライアント/サーバ 接 続 メカニズムで、TCP 接 続 を 経 由 して、Windows COM/OLE または C++ クライアント・プログラムからサーバ 操 作 を 通 じて 直 接 制 御 を 提 供 します。この 接 続 は、 非 常 に 高 速 な、オーバヘッドの 低 いメカニズムを 経 由 して 実 行 されます。<strong>Caché</strong> <strong>Direct</strong> には、<strong>Caché</strong> セキュリティ、Citrix/Windows Terminal サービスなどに 対 する 透 過 的 なサポートが 組 み 込 まれています。名 前 からもわかるように、<strong>Caché</strong> <strong>Direct</strong> は、クライアントから <strong>Caché</strong> サーバに 対 して、できる 限 り 最 も 直 接 的 なアクセスを提 供 します。つまり、<strong>Caché</strong> ObjectScript コマンドはクライアントからサーバに 送 信 され、そこで 実 行 されて、 結 果 がクライアントに 返 されます。<strong>Caché</strong> <strong>Direct</strong> は、アプリケーションの 2 つの 部 分 の 間 に 1 つまたは 複 数 の TCP チャネルをセットアップし、これらの 間 でメッセージを 管 理 します。<strong>Caché</strong> オブジェクトと 埋 め 込 み SQL のすべての 機 能 は、<strong>Caché</strong> <strong>Direct</strong>を 通 じて 使 用 することもできます。クライアントはサーバのすべての 機 能 にアクセス 可 能 で、これを 制 約 できるのは <strong>Caché</strong>セキュリティ 設 定 のみです。複 数 のサーバ・ジョブ/チャネルを 作 成 し、1 つのクライアント・プロセスから 同 時 に 管 理 し、クライアント・マルチスレッドと1 つのクライアントから 複 数 のサーバへの 接 続 を 同 時 に 実 現 することができます。<strong>Caché</strong> <strong>Direct</strong> には、サーバからクライアントへのコールバック、クライアントとサーバの 両 方 での 制 御 フローおよび 通 信 トラフィックのログ、メッセージ 変 換 ( 圧 縮 など) のための 各 種 フック、エラー 処 理 、シャットダウン・タスクなどの 機 能 も 用 意されています。注 釈<strong>Caché</strong> <strong>Direct</strong> の 目 的 は、Web ベースのアプリケーションの 構 築 に 使 用 することではなく、<strong>Direct</strong> クライアント/サーバ・アプリケーションでの 使 用 を 想 定 しています。1.1 概 念<strong>Caché</strong> <strong>Direct</strong> には、Visual Basic プロジェクトや、C++ クライアント 対 応 の C++ インタフェースで 最 も 頻 繁 に 使 用 されるActiveX control (VisM.OCX) が 用 意 されています。VisM コントロールには、<strong>Caché</strong> への 接 続 や 送 信 するコマンドを 指 定するためのプロパティやメソッドがあります。内 部 的 には、VisM コントロールは <strong>Caché</strong> とは 直 接 通 信 しません。その 代 わりに、 起 動 されたコントロールは CDConnectと 呼 ばれるオブジェクトにアタッチされます。その 後 、<strong>Caché</strong> に 接 続 し、サーバでスレーブ・サーバ・プロセスを 起 動 し、 通信 チャネルの 管 理 を 行 います。CDConnect は 複 数 の VisM インスタンスにアタッチ 可 能 で、すべての VisM インスタンスから 分 離 されたとしても 存 在 することができ、 別 のサーバ・プロセスにリダイレクトできます。この 柔 軟 性 は、<strong>Caché</strong> <strong>Direct</strong>が 次 のようにさまざまなアーキテクチャをサポートできることを 意 味 しています。• 各 クライアント VisM が 専 用 のサーバを 持 っている 設 定 。• すべてのクライアント VisM が 1 つのサーバを 共 有 している 設 定 。<strong>Caché</strong> <strong>Direct</strong> の 使 用 法 3


<strong>Caché</strong> <strong>Direct</strong> 入 門• クライアント VisM の 集 まりが、サーバの 集 まりを 共 有 し、これらの 間 を 移 動 して、 現 在 空 きのあるものを 使 用 できる 設定 。• 選 択 されたサーバがアクセスできる 特 定 のデータベースに 基 づいて、 選 択 されたクライアント VisM がこれらのサーバを 共 有 する 設 定 。<strong>Caché</strong> <strong>Direct</strong> クライアントは、<strong>Caché</strong> クライアントをサポートしているすべての Windows プラットフォームでサポートされています。<strong>Caché</strong> <strong>Direct</strong> サーバは、<strong>Caché</strong> サーバ、および DSM をサポートしているすべてのプラットフォームでサポートされています。これらのサーバの 存 在 するマシンやデータベースは 同 じものでも、 異 なるものでもかまいません。 都 合 に 合 わせて 自 由に 配 置 できます。1.1.1 用 語<strong>Caché</strong> <strong>Direct</strong> コミュニケーション・モデルで 使 用 される 用 語 は 以 下 のとおりです。• 呼 び 出 し 元 は <strong>Caché</strong> を 呼 び 出 すクライアント・コードです。これらは 通 常 VisM インスタンスで、このドキュメントではVisM と 呼 ばれています。これらは C++ コードでもあることもあります。• CDConnect は VisM クライアントとサーバの 間 の 中 間 オブジェクトです。CDConnect は 必 要 に 応 じて 作 成 され、クライアント・マシンで 実 行 されます。• VisM と CDConnect の 間 の 連 結 は、 接 続 と 呼 ばれます。• CDConnect と <strong>Caché</strong> サーバ・プロセスの 間 の TCP 連 結 はチャネルと 呼 ばれます。次 の 図 は、<strong>Caché</strong> <strong>Direct</strong> アプリケーションのさまざまな 状 態 を 表 しています。 上 の 領 域 ( 二 重 線 の 上 ) にある 項 目 はすべて、クライアント 側 の 単 一 プロセス 内 で 実 行 されています。 二 重 線 の 下 にある 項 目 は、1 つまたは 複 数 の <strong>Caché</strong> サーバ・マシンで 実 行 されます。4 <strong>Caché</strong> <strong>Direct</strong> の 使 用 法


使 用 可 能 なツールと 方 法1.1.2 コミュニケーション・モデル<strong>Caché</strong> <strong>Direct</strong> コミュニケーション・モデルは 以 下 の 規 則 に 従 います。• 1 つの VisM が 所 有 できる 接 続 の 数 は、どのような 場 合 でも、 一 度 に 1 つのみです。つまり、VisM は 1 つのCDConnect にアタッチされているか、 切 断 されているかのどちらかです。• 1 つの CDConnect が 所 有 できるチャネルの 数 は、どのような 場 合 でも、 一 度 に 1 つのみです。つまり、CDConnectは 1 つの <strong>Caché</strong> サーバ・プロセスにアタッチされているか、 切 断 されているかのどちらかです。• 1 つの CDConnect が 所 有 できる 接 続 の 数 に 制 限 はありません。つまり、どのような CDConnect でも、0、1、またはそれ 以 上 の VisM にアタッチできます。これは、 複 数 の VisM が 同 じサーバ・コンテキストを 共 有 できることを 表 します。これらの VisM は、 各 メッセージにより 再 初 期 化 される 変 数 を 除 き、 同 じサーバ・ローカル 変 数 にアクセスします。次 の 章 の "ミラーリングされた VisM プロパティ" を 参 照 してください。• CDConnect を Cache サーバ・プロセスにアタッチする 必 要 はありません。これは、CDConnect が VisM やサーバ・プロセスから 独 立 しているからです。CDConnect は 破 棄 されるまで 存 続 します。アクセスできなくなった 場 合 ( 接 続およびタグがない 場 合 )、または DeleteConnection() メソッドを 使 って 明 示 的 に 破 棄 した 場 合 、CDConnect は 自 動的 に 破 棄 されます。注 釈ISCDLink バージョン 220 以 前 では、CDConnect にアクセスできなくなっても、これが 自 動 的 に 破 棄 されることはありませんでした。• CDConnect は 異 なる <strong>Caché</strong> サーバにリダイレクトできます。これはもちろん、この CDConnect にアタッチされている VisM はすべて、 新 しく 選 択 されたサーバにも 効 果 的 にアタッチできるという 意 味 です。• <strong>Caché</strong> サーバ・ジョブはそれぞれ 1 つのスレッドです。したがって、 各 チャネルでの 通 信 は 同 期 がとられている 必 要があります。つまり、1 つのクライアント・メッセージを 処 理 し、これに 応 答 するまで、 次 のメッセージを 読 み 取 ることはできません。これは、 複 数 の VisM が 1 つの CDConnect を 共 有 している 場 合 、これらの VisM は 同 時 に 通 信 を 試行 できないように 制 約 されていることを 意 味 します。 通 信 しようとした 場 合 、“nonsynchronous communication” エラーが 発 生 します。• <strong>Caché</strong> サーバ・ジョブには、 必 ず、チャネルが 1 つ 必 要 です。CDConnect からのチャネルを 閉 じると、 対 応 する<strong>Caché</strong> サーバ・ジョブも 終 了 します。わかりやすいように、たとえ 話 を 使 って 説 明 します。CDConnect は 1 本 の 電 話 回 線 につながっているスピーカーフォンのような 動 作 をします。 部 屋 にいて、 電 話 を 聞 いている 人 が VisM で、 全 員 、 同 じ 会 話 を 聞 きます。 電 話 の 相 手 は 1 人で、これが <strong>Caché</strong> サーバです。この 電 話 を 他 のサーバに 転 送 すると、すべての VisM がこの 新 しい 相 手 に 接 続 されます。1.2 使 用 可 能 なツールと 方 法クライアント 側 では、<strong>Caché</strong> <strong>Direct</strong> は 階 層 化 された C++ クラスの 集 まりで、VisM コントロールにラップされ、 必 要 なプロパティやメソッドをすべて 公 開 します。<strong>Caché</strong> クライアント・ソフトウェアをインストールすると、このコントロールがインストールされ、 登 録 されるので、Visual Basic などの ActiveX ホストで 使 用 できるようになります。この 結 果 、<strong>Caché</strong> <strong>Direct</strong> をいろいろなレベルで 使 用 できます。• <strong>Caché</strong> <strong>Direct</strong> ActiveX コントロールを Visual Basic プロジェクトに 組 み 込 むことができます。これにより、アプリケーションは ( 場 合 によってはユーザとの 対 話 を 通 じて) プロパティの 値 を 設 定 し、<strong>Caché</strong> サーバにコードを 送 信 するメソッドを 実 行 して、 結 果 を 表 示 することが 可 能 です。このドキュメントでは、このテクニックが 最 も 多 く 使 用 されることを前 提 にしています。• C++ プロジェクトで <strong>Caché</strong> <strong>Direct</strong> C++ クラスを 使 用 できます。その 後 、<strong>Caché</strong> サーバと 対 話 するには、 必 要 に 応 じて、これらのクラスのインスタンスを 作 成 し、プロパティを 設 定 し、メソッドを 実 行 します。<strong>Caché</strong> <strong>Direct</strong> の 使 用 法 5


<strong>Caché</strong> <strong>Direct</strong> 入 門サーバ 側 では、<strong>Caché</strong> <strong>Direct</strong> は <strong>Caché</strong> サーバ 環 境 の 透 過 的 な 部 分 です。 最 新 バージョンの <strong>Caché</strong> 自 体 をインストールせずに、<strong>Caché</strong> <strong>Direct</strong> サーバをアップグレードする 必 要 がある 場 合 には、 使 用 している <strong>Caché</strong> 環 境 に 最 新 の <strong>Caché</strong><strong>Direct</strong> のサーバ・コードを 簡 単 にロードする 方 法 があります。 詳 細 は、このマニュアル 末 尾 の "<strong>Caché</strong> <strong>Direct</strong> サーバのアップグレード" を 参 照 してください。6 <strong>Caché</strong> <strong>Direct</strong> の 使 用 法


2VisM コントロールの 使 用 に 関 する 基 本この 章 では、VisM コントロールの 使 用 に 関 する 基 本 事 項 について 説 明 します。• コントロールへのアクセスと、プロジェクトへのコントロールの 追 加 。• <strong>Caché</strong> への 接 続 と 切 断 。• サーバ 側 コードが 実 行 される <strong>Caché</strong> ネームスペースの 設 定 。• VisM クライアントからのサーバ 上 のコードの 実 行• クライアントとサーバの 間 で VisM プロパティをミラーリング。これにより、コードはサーバとクライアントの 間 で 容 易 にデータを 受 け 渡 しできます。• コールバック 経 由 で、サーバから、 他 のクライアント・ユーザ・インタフェース・プロパティやメソッドを 参 照 。• Windows の 関 数 や <strong>Caché</strong> <strong>Direct</strong> ユーティリティの 呼 び 出 し。この 章 では、 両 側 のコードに 影 響 を 与 える 可 能 性 のある <strong>Caché</strong> <strong>Direct</strong> メッセージの 制 限 についても 説 明 します。 最 後に、いくつかの 簡 単 な 使 用 例 を 掲 載 します。注 釈 先 頭 の 下 線 は、Visual Basic ユーザ・リファレンスへのコールバック 参 照 を 表 しています。このような 使 用 は、<strong>Caché</strong> ではどのような 場 合 でもできませんので、 注 意 してください。2.1 VisM コントロールへのアクセス<strong>Caché</strong> クライアント・ソフトウェアをインストールすると、VisM コントロールがインストールされ、 登 録 されるので、Visual Basicなど、どのような ActiveX ホストでも 使 用 できるようになります。注 釈<strong>Caché</strong> クライアントがインストールされていないマシンでは、<strong>Caché</strong> <strong>Direct</strong> クライアント・ファイルを 手 作 業 でコピーし、 登 録 します。 詳 細 は、このマニュアル 後 半 にある、" 新 規 マシンへの VisM のインストール" のセクションを 参 照 してください。Visual Basic の 場 合 、このコントロールをプロジェクトに 追 加 するには、[プロジェクト]→[コンポーネント] をクリックし、VisMにスクロールして、チェック・ボックスにチェックを 付 けます。 次 に、 他 のコントロールの 場 合 と 同 様 に、フォームにこのコントロールのインスタンスを 追 加 します。<strong>Caché</strong> <strong>Direct</strong> の 使 用 法 7


VisM コントロールの 使 用 に 関 する 基 本2.2 接 続 と 切 断サーバへの <strong>Caché</strong> <strong>Direct</strong> クライアントの 接 続 またはサーバからの 切 断 を 実 行 するには、Server プロパティ、ConnTagプロパティ、SetServer() メソッド、Connect() メソッド、および DeleteConnection() メソッドを 使 用 できます。これらのツールにはそれぞれ 特 有 の 用 途 がありますが、 重 複 している 部 分 もあります。SetServer() メソッドと Connect() メソッドは 似 ていますが、これまでの 経 緯 と 下 位 互 換 性 保 持 のため、 多 少 の 違 いがあります。SetServer() の 2 つ 目 の 引 数 を 除 き、Serverプロパティと SetServer() メソッドは 同 じです。付 録 " 以 前 のバージョンをお 使 いの 方 へのご 注 意 " も 参 照 してください。2.2.1 接 続 文 字 列 と 接 続 タグ<strong>Caché</strong> に 接 続 するための 構 文 を 記 述 する 前 に、その 構 文 で 使 用 される 接 続 文 字 列 と 接 続 タグについて 知 っておくと 役立 ちます。2.2.1.1 基 本 的 な 接 続 文 字 列接 続 文 字 列 は、 次 の 形 式 を 持 つ 文 字 列 です。"CN_IPTCP:server[port]"この 引 数 の 最 初 にある CN_IPTCP は 接 続 メソッドで、 必 ず TCP です。2 つ 目 は <strong>Caché</strong> スーパーサーバが 稼 動 しているサーバの 名 前 、または IP アドレスとポートです。 例 えば、VisM1 という VisM の 接 続 を 設 定 するには、 次 の 構 文 を 使 用します。VisM1.Server="CN_IPTCP:127.0.0.1[57772]"この 基 本 文 字 列 を 拡 張 することもできます ( 詳 細 は、"VisM.ocx コントロールの 詳 細 " の 章 にある "VisM 拡 張 接 続 文 字列 の 構 文 " で 説 明 しています)。この 拡 張 機 能 は、 一 般 には 使 用 されません。2.2.1.2 間 接 参 照 を 使 用 した 接 続代 わりに、ローカルに 定 義 されたデータベースのエイリアスに 対 する 間 接 参 照 を 使 用 することもできます。この 場合 、"@servername" という 形 式 の 文 字 列 を 使 用 します。ここでは、servername は <strong>Caché</strong> Server Manager 内 で 指 定 されたものです (<strong>Caché</strong> サーバ・マネージャの 使 用 法 の 詳 細 は、"<strong>Caché</strong> システム 管 理 ガイド" の "リモート・サーバ 接 続 の定 義 " を 参 照 してください)。これらのエイリアスは、クライアント・マシンに 対 してローカルなものです。クライアント・マシンが、 対 応 する <strong>Caché</strong> サーバのエイリアスに 対 する 名 前 付 け 規 約 に 従 っている 場 合 のみ、この 方 法 でハード・コーディングすることができます。例 えば、サーバ 名 unix1 への VisM オブジェクト VisM1 の 接 続 を 設 定 するには、 次 の 構 文 を 使 用 します。VisM1.Server="@unix1"注 釈Kerberos 認 証 を 使 用 する 接 続 を 開 くときには、 間 接 参 照 を 使 用 することをお 勧 めします。<strong>Caché</strong> サーバ・マネージャでは、 認 証 方 法 としての Kerberos の 設 定 、 接 続 のセキュリティ・レベルの 指 定 、およびサービス・プリンシパル 名 の 定 義 を 行 えます。2.2.1.3 ユーザ・プロンプト接 続 文 字 列 を 使 用 できる 任 意 の 場 所 で、この 文 字 列 の 代 わりに 二 重 引 用 符 で 囲 まれた 疑 問 符 ("?") を 使 用 することができます。この 場 合 、クライアント・マシンで 定 義 されているサーバ・エイリアスを 1 つ 選 択 するように 求 めるプロンプトが表 示 されます。例 えば、 次 の 構 文 を 使 用 すると、ユーザに 対 して VisM1 という VisM の 接 続 を 求 めるプロンプトが 表 示 されます。8 <strong>Caché</strong> <strong>Direct</strong> の 使 用 法


接 続 と 切 断VisM1.Server="?"2.2.1.4 接 続 タグ場 合 によっては、<strong>Caché</strong> への 新 しい 接 続 を 作 成 するときに、オプションの 接 続 タグを 提 供 できることがあります。これは、作 成 中 の CDConnect とそのチャネルに 対 する 名 前 となります。 特 定 のクライアント・プロセス 内 で、すべてのタグが 一 意であることを 確 認 するのはユーザの 責 任 です。その 後 、VisM に 接 続 したときに、 接 続 文 字 列 ではなく、 既 存 の CDConnect の 接 続 タグを 指 定 することができます。 明示 的 にチャネルを 共 有 するには、この 方 法 が 主 に 使 用 されます。 例 えば、VisM1 という VisM の 接 続 を 設 定 するには、次 の 構 文 を 使 用 します。VisM1.Server="TagA"また、VisM2 が 接 続 され、タグが 割 り 当 てられている CDConnect に VisM1 を 接 続 するとします。 接 続 タグ 自 体 を 使 用したくない 場 合 は、 次 のように ConnTag プロパティを 使 用 できます。VisM1.Server=VisM2.ConnTag2.2.2 <strong>Caché</strong> への 接 続接 続 は VisM を CDConnect にアタッチする 動 作 です ( 必 要 に 応 じて、CDConnect を 作 成 します)。 現 在 、VisM がCDConnect オブジェクトにアタッチされている 場 合 、まず、これが CDConnect から 切 断 されます。2.2.2.1 まだ 接 続 されていない 場 合VisM がまだ <strong>Caché</strong> に 接 続 されていない 場 合 、 次 のいずれかの 方 法 で、<strong>Caché</strong> に 接 続 します。なお、 以 下 の 方 法 は、 一般 的 によく 使 用 される 順 に 一 覧 しています。• Server プロパティに、 接 続 文 字 列 (またはそれに 相 当 するもの) と 同 じ 値 を 設 定 します。 次 に 例 を 示 します。VisM1.Server="CN_IPTCP:127.0.0.1[57772]"• 最 初 の 引 数 として、 接 続 文 字 列 (またはそれに 相 当 するもの) を 使 用 して、SetServer() メソッドを 呼 び 出 します。これは 前 の 方 法 と 同 じです。 次 に 例 を 示 します。VisM1.SetServer("CN_IPTCP:127.0.0.1[57772]")• 最 初 の 引 数 として、 接 続 文 字 列 (またはそれに 相 当 するもの) を 使 用 して、Connect() メソッドを 呼 び 出 します。 次 に例 を 示 します。VisM1.Connect("CN_IPTCP:127.0.0.1[57772]")どの 場 合 も、<strong>Caché</strong> <strong>Direct</strong> により CDConnect が 作 成 され、VisM から CDConnect オブジェクトへの 接 続 が 作 成 されます。また、サーバ・プロセスが 開 始 され、CDConnect からサーバ・プロセスへのチャネルが 作 成 されます。SetServer() または Connect() を 使 う 方 法 を 使 用 する 場 合 、2 つ 目 の 引 数 として、 接 続 タグを 指 定 することができます。 次に 例 を 示 します。VisM1.SetServer("CN_IPTCP:127.0.0.1[57772]","tagA")2.2.2.2 既 に 接 続 されている 場 合VisM が 既 に <strong>Caché</strong> に 接 続 されている 場 合 、CDConnect は 既 に 作 成 されています。また、 関 連 するサーバ・プロセスも既 に 存 在 する 可 能 性 があります。この VisM を 元 の CDConnect から 切 断 し、 新 しい CDConnect のためのサーバを 作成 して、 別 の CDConnect に 接 続 することができます。 別 の CDConnect に 接 続 するには、 次 の 方 法 のいずれかを 使 用します。<strong>Caché</strong> <strong>Direct</strong> の 使 用 法 9


VisM コントロールの 使 用 に 関 する 基 本• 新 しい CDConnect を 作 成 し、これに 接 続 するには、 接 続 文 字 列 を 1 つ 目 の 引 数 として 使 用 して、Connect() メソッドを 呼 び 出 します。• 最 後 に 開 かれた CDConnect に 接 続 するには、 空 の 文 字 列 を 1 つ 目 の 引 数 として 使 用 して、Connect() メソッドを 呼び 出 します。• 既 存 の CDConnect に 接 続 するには、 次 のいずれかを 実 行 します。– Server プロパティに 接 続 タグと 等 しい 値 を 設 定 します (<strong>Caché</strong> 2007.1 以 降 で 可 能 )。– 1 つ 目 の 引 数 として 接 続 タグを 使 用 し、SetServer() メソッドを 呼 び 出 します (<strong>Caché</strong> 2007.1 以 降 で 可 能 )。– 最 初 の 引 数 として、 接 続 タグを 使 用 して、Connect() メソッドを 呼 び 出 します。次 に 例 を 示 します。VisM1.Server="tagA"このような 操 作 の 結 果 、 元 の CDConnect が 破 棄 されることはありません。また、サーバ・チャネルが 存 在 する 場 合 、これが 影 響 を 受 けることもありません。"CDConnect の 破 棄 " で 説 明 されているとおり、CDConnect は、アクセスが 不 可 能 になるまで ( 自 動 的 に 破 棄 されたとき)、または 明 示 的 に 破 棄 されるまで 存 在 します。2.2.3 CDConnect のチャネルの 変 更既 存 の CDConnect のチャネルを 変 更 するには、 次 の 方 法 のいずれかを 使 用 します。• Server プロパティに、 接 続 文 字 列 と 同 じ 値 を 設 定 します。• 最 初 の 引 数 として、 接 続 文 字 列 を 使 用 して、SetServer() メソッドを 呼 び 出 します。どちらの 場 合 も、CDConnect により、 現 在 接 続 中 のサーバ・プロセスが 停 止 、 切 断 され、その 後 、 新 しいサーバ・プロセスが 開 始 、 接 続 されます。2.2.4 <strong>Caché</strong> からの 切 断<strong>Caché</strong> サーバから 切 断 するには、 次 の 方 法 のいずれかを 使 用 します。• Server プロパティに、 空 の 文 字 列 と 同 じ 値 を 設 定 します。• 最 初 の 引 数 として、 空 の 文 字 列 を 使 用 して、SetServer() メソッドを 呼 び 出 します。このような 操 作 の 結 果 、CDConnect が 破 棄 されることはありません。また、サーバ・チャネルが 存 在 する 場 合 、これが 影響 を 受 けることもありません。 次 のセクションで 説 明 するとおり、CDConnect は、アクセスが 不 可 能 になるまで ( 自 動 的 に破 棄 されたとき)、または 明 示 的 に 破 棄 されるまで 存 在 します。2.2.5 CDConnect の 破 棄CDConnect とそのチャネルを 破 棄 するには、DeleteConnection() メソッドを 呼 び 出 します。もちろん、このメソッドによりサーバ・プロセスも 停 止 します。 次 に 例 を 示 します。VisM1.DeleteConnection()2.2.6 方 法 の 概 要以 下 のテーブルは、<strong>Caché</strong> との 接 続 および 切 断 方 法 をまとめたものです。どんな 場 合 でも、Server プロパティを 設 定 することには、SetServer() メソッドの 呼 び 出 しと 同 じ 効 果 があります。10 <strong>Caché</strong> <strong>Direct</strong> の 使 用 法


コードの 実 行必 要 がある 場 合 は、それぞれ 専 用 のネームスペースで 稼 動 する 2 つのサーバ・ジョブに 接 続 を 設 定 します。これにより、個 々のジョブがバッファの 効 率 性 を 利 用 できるようになります。2.4 コードの 実 行通 常 、<strong>Caché</strong> <strong>Direct</strong> を 使 用 して、<strong>Caché</strong> ObjectScript を 実 行 する 方 法 には 次 の 2 とおりがあります。• 1 つ 目 は、Execute() メソッドを 使 用 する 方 法 です。このメソッドの 引 数 は 1 行 のコードです。これはコントロールを 使用 するための 最 も 一 般 的 で 簡 単 な 方 法 で、コマンド 上 で ObjectScript コードの 行 が 実 行 されます。 詳 細 は、この 章の 後 半 にある 例 を 参 照 してください。• 2 つ 目 は、あまり 一 般 的 ではない 方 法 ですが、Code プロパティにコードを、ExecFlag プロパティに 1 (すぐに 実 行するという 意 味 ) を 設 定 することもできます。ExecFlag プロパティを 1 に 設 定 すると 同 時 に、 仮 想 実 行 ボタンが 効 果的 に 押 されます。VisM は 即 座 にメッセージをアセンブルしてサーバに 送 り、 応 答 を 受 け 取 ります。 応 答 が 到 着 すると、ExecFlag の 設 定 は 0 (アイドル) に 戻 され、 仮 想 実 行 ボタンが 解 放 されます。ExecFlag にその 他 の 設 定 をして、 特 別 な 状 況 で 使 用 することもできます。 詳 細 は、VisM.ocx プロパティの 参 照 セクションを 参 照 してください。これらの 方 法 の 最 終 的 な 効 果 はまったく 同 じです (Execute() を 呼 び 出 すと、クライアントは 文 字 列 を 一 時 的 に Code プロパティに 格 納 し、 内 部 的 に ExecFlag の 設 定 を 1 に 変 更 します)。どちらのメソッドを 選 択 するかは、 用 途 によって 異 なります。コード 文 字 列 が 変 化 しない、または 別 の 計 算 によって 選 択 される 場 合 、ExecFlag を 使 用 する 方 法 のほうが 便 利です。1 行 のコードを 実 行 する 必 要 があるだけであれば、Execute() を 使 用 する 方 法 のほうが 便 利 で、 直 接 的 です。実 行 されるコードの 行 は、 正 当 なコード 行 または 式 であればどれでも 使 用 できます。式 の 評 価 には 一 般 的 ですが、この 場 合 も、サーバはコード 行 の 先 頭 を 見 て、この 行 が 式 の 形 を 取 っているかどうかを 判断 するという 便 利 な 規 則 があります。 具 体 的 には、 行 の 先 頭 に 等 号 が 1 つと、 少 なくとも 1 つのドル 記 号 が 付 いているかどうかがチェックされます。 付 いている 場 合 、サーバ・コードは "Set VALUE " または "Set VALUE = " のどちらかを 先 頭 に 追 加 して、VALUE プロパティに 式 の 結 果 を 設 定 するコマンドを 作 成 します。 例 えば、クライアント 側 の "$zv"は、サーバ 側 では "Set VALUE=$zv" に 拡 張 されます。この 特 別 な 処 理 を 除 き、VALUE プロパティはその 他 のミラーリングされたプロパティと 変 わりありません。 詳 細 は、 次 のセクションを 参 照 してください。2.5 ミラーリングされたプロパティの 使 用<strong>Caché</strong> <strong>Direct</strong> では、 次 のように、クライアントとサーバの 間 で 特 定 の VisM プロパティの 値 がミラーリングされます。1. クライアントはサーバと 通 信 するときに、その 他 の 必 要 な 情 報 と 共 に、ミラーリングされたプロパティの 値 を 含 むメッセージを 作 成 します。サーバはメッセージを 受 信 すると、 同 じ 名 前 を 持 つローカル 変 数 を 作 成 し、 設 定 します。2. サーバ 側 では、このローカル 変 数 を、その 他 のローカル 変 数 を 使 用 する 場 合 と 同 じ 方 法 で 使 用 できます。 例 えば、間 接 指 定 など、この 変 数 の 使 用 方 法 に 制 限 はありません。3. サーバは 応 答 すると、ミラーリングされたプロパティが 変 更 されているかどうかに 関 係 なく、これらすべての 値 と、その他 の 情 報 を 含 むメッセージを 作 成 し、 送 信 します。4. 次 に、サーバは ($KILL を 使 用 して) これらのローカル 変 数 を 破 棄 します (ただし、その 他 のローカル・サーバ 変 数はそのまま 残 されます)。したがって、 呼 び 出 しと 呼 び 出 しの 間 で、ミラーリングされた 変 数 がサーバに 残 されることはありません。これらの 変数 はサーバがクライアント・コマンドを 実 行 している 間 のみ 存 在 します。<strong>Caché</strong> <strong>Direct</strong> の 使 用 法 13


VisM コントロールの 使 用 に 関 する 基 本2.5.1 ミラーリングされた 基 本 的 な 値 の 使 用ミラーリングされた 基 本 的 な VisM プロパティは、 文 字 列 プロパティ P0、P1、P2、P3、P4、P5、P6、P7、P8、P9、およびVALUE です。サーバがクライアント・コマンドを 実 行 しているときに、サーバ・プロセスは、VisM のプロパティと 同 じ 値 を持 つ、 同 じ 名 前 のローカル 値 を 持 っています。サーバでの 変 更 に 続 いて、クライアントがサーバから 応 答 メッセージを 受信 したときに、クライアントでプロパティが 変 更 されます。VALUE プロパティにはもう 1 つ 機 能 が 用 意 されています。"コードの 実 行 " に 説 明 されているとおり、Code プロパティの値 が 式 である (つまり、 先 頭 にドル 記 号 または 等 号 が 付 いている) 場 合 、サーバは、VALUE プロパティに 指 定 されている 式 の 結 果 を 返 します。2.5.2 PLIST の 使 用もう 1 つミラーリングされる VisM プロパティがあります。それは PLIST プロパティです。<strong>Caché</strong> <strong>Direct</strong> はこのプロパティを 使 用 して、 配 列 上 の 値 をサーバとクライアントの 間 で 受 け 渡 します。クライアントと <strong>Caché</strong> では 配 列 の 表 現 方 法 が 異 なるため、サーバからクライアント、およびクライアントからサーバへの 両 方 向 での 変 換 を 理 解 することが 重 要 です。PLISTプロパティの 形 式 は、これら 2 種 類 の 環 境 に 応 じて 異 なります。• クライアントでは、PLIST は、すべての “ 配 列 ” 要 素 を 持 つリストで、 要 素 と 要 素 は 区 切 り 文 字 で 連 結 されています。この 区 切 り 文 字 は、クライアントでのみ 使 用 されている PDELIM プロパティで 指 定 されています。 例 えば、PDELIMが "^" である 場 合 、PLIST は、"first^second^third" のようになります。• サーバでは、PLIST は 1 次 元 配 列 で、 次 の 形 式 を 取 ります。– PLIST には、クライアントのリストに 含 まれる 項 目 数 を 表 す 数 値 が 入 ります。– PLIST(1) には、リストの 先 頭 項 目 が 含 まれます。– PLIST(2) には、リストの 2 番 目 の 項 目 が 含 まれます。– 以 降 、 同 様 に 繰 り 返 されます。PDELIM プロパティが 空 の 文 字 列 である 場 合 、PLIST は 単 一 の 文 字 列 と 見 なされます。サーバは、 応 答 メッセージをアセンブルするときに、PLIST を 次 のように 扱 います。• PLIST が、 現 在 リストに 含 まれている 要 素 の 数 と 同 じである 場 合 、サーバは、そのまま PLIST 配 列 を 返 します。• PLIST が 現 在 リストに 含 まれている 要 素 の 数 を 下 回 る 場 合 は、サーバは、リストの 末 尾 から 要 素 を 削 除 して、PLIST配 列 を 調 整 します。例 えば、クライアントに 次 のコードがあるとします。VisM1.PDELIM = "^"VisM1.PLIST = "armadillo^beaver^cobra"サーバには 次 のように 表 示 されます。– PLIST=3– PLIST(1)="armadillo"– PLIST(2)="beaver"– PLIST(3)="cobra"その 後 、サーバで 次 のコードを 実 行 するとします。Set PLIST(3)="cat"Set PLIST(4)="donkey"14 <strong>Caché</strong> <strong>Direct</strong> の 使 用 法


Visual Basic ユーザ・インタフェースへのコールバッククライアントに 戻 ったときの、PLIST プロパティは "armadillo^beaver^cat" です。3 つめのリスト 要 素 は 更 新 されていますが、4 つめのリスト 要 素 は 返 されません。これは、リストの 個 数 が 更 新 されていないからです。• PLIST が 現 在 リストに 含 まれている 要 素 の 数 を 上 回 る 場 合 は、サーバは、 空 の 文 字 列 を 要 素 として PLIST 配 列 に追 加 し、これらを 空 のリスト 位 置 に 追 加 して 調 整 します。前 の 例 を 使 って、 今 度 は、サーバ・コードが 次 のようになっている 場 合 を 考 えてみましょう。Set PLIST=5Set PLIST(5)="eagle"この 場 合 、クライアント・プロパティは "armadillo^beaver^cobra^^eagle" になります。• PLIST が 正 の 整 数 ではない 場 合 、サーバは、 数 値 以 外 の 添 え 字 を 持 つ 要 素 を 含 め、リスト 内 の 要 素 の 数 を 数 え、この 個 数 を PLIST に 設 定 します ( 対 照 的 に、ここまでに 挙 げたすべての 例 では、サーバは 数 値 の 添 え 字 を 持 つ 配 列要 素 のみを 返 します)。ただし、 個 数 と 返 される 値 の 両 方 とも $Order を 使 って 計 算 されます。これには、 配 列 には 連 続 する 番 号 の 付 いたエントリが 必 要 であるという 要 件 を 排 除 する 効 果 があります。つまり、<strong>Caché</strong> に 用 意 されている 文 字 列 の 添 え 字 と 自 動ソートを 使 用 できます。したがって、 次 のコードはどちらも、 上 記 の 4 要 素 の 例 と 同 じ 結 果 となります。Set PLIST=""Set PLIST(10)="donkey"またはSet PLIST=""Set PLIST("don")="donkey"前 述 の 動 作 は、 一 般 に、サーバでリスト 要 素 の 数 が 変 わると、PLIST が 新 しい 個 数 に 更 新 されるか、PLIST がクリアされる (その 後 、サーバにリスト 要 素 の 個 数 を 数 えさせる) ことを 意 味 しています。2.6 Visual Basic ユーザ・インタフェースへのコールバックVisual Basic を 使 用 する 場 合 、VisM には、<strong>Caché</strong> ObjectScript コードがクライアント・ユーザ・インタフェースの 要 素 を 参照 できるようにする 特 別 な 機 能 が 用 意 されています。このようなプロパティやメソッドの 参 照 は コールバック と 呼 ばれます。これは、 参 照 するときに、サーバからクライアントにメッセージが 送 信 されるからです。クライアントはフォームとコントロールを 検 索 し、OLE 呼 び 出 しを 発 行 して、 結 果 をサーバに 返 します。特 に、getter および setter メソッドを 使 用 して、クライアント・ユーザ・インタフェース 上 のどのコントロールのプロパティにでもアクセスできます。また、フォームに 次 の Visual Basic メソッドを 提 供 するコントロールが 含 まれている 場 合 、ObjectScriptでこれらのメソッドを 使 用 することができます。• AddItem()• RemoveItem()• Refresh()• Move()• Clear()• Hide()• Show()• SetFocus()<strong>Caché</strong> <strong>Direct</strong> の 使 用 法 15


VisM コントロールの 使 用 に 関 する 基 本2.6.1 Visual Basic コールバックをサポートするための 要 件特 定 のフォームでコールバックを 使 用 できるようにするための 要 件 は 次 の 2 つです。• このフォームには VisM コントロールが 含 まれていなければなりません。• そのフォーム 上 のコントロールへの 最 初 のサーバ 参 照 をする 前 に、( 通 常 は、Form_Load イベント・コールで) 次 のような 呼 び 出 しを 行 います。CreateDispatch Me, VisM1ここで、Me は 現 在 のフォームへの Visual Basic 参 照 で、VisM1 はそのフォーム 上 での VisM 名 です。CreateDispatch関 数 は \dev\cdirect\VBRUN.BAS モジュールの 一 部 です。プロジェクト 内 にこのモジュールが含 まれていなければなりません。この 関 数 は、フォーム 上 にコントロールのリストを 作 成 し、 将 来 の 参 照 に 備 えて、これらのコントロールを VisM の 非 表 示 プロパティに 格 納 します。2.6.2 コントロールのプロパティの 参 照コントロールのプロパティを 参 照 するには、 以 下 の 特 別 な ObjectScript 構 文 を 使 用 します。_[formname!]controlname[(controlindex)].propertyname[(propertyindex)]角 かっこ 内 の 要 素 は 省 略 可 能 です。また、かっこ 類 は 構 文 の 一 部 ではありません。 先 頭 の 下 線 は 必 須 です。formnameを 省 略 した 場 合 、このフォームは、VisM から 現 在 のメッセージが 送 信 されているフォームであると 見 なされます。controlnameと propertyname は 省 略 できません。コントロールがコレクションの 1 つである 場 合 、controlindex を 指 定 する 必 要 があります。プロパティがコレクションである 場 合 は、propertyindex は 必 須 です。 例 えば、 現 在 のフォームにあるテキスト・コントロール txt1 のテキスト・プロパティを 取 得 するには、 次 のコードを 使 用 します。Set x=_txt1.Textテキスト・プロパティを 設 定 するには、 次 のコードを 使 用 します。Set _txt1.Text="something"ObjectScript では、 下 線 も 連 結 演 算 子 なので、その 意 味 が 不 明 確 な 場 合 には、かっこを 使 用 してください。2.6.3 コントロールのメソッドの 実 行コントロールのメソッドを 実 行 するには、 以 下 の 構 文 を 使 用 します。Do _[formname!]controlname[(controlindex)].method[(args)]例 えば、リスト・ボックス list1 に 項 目 を 追 加 するには、 次 のコードを 使 用 します。Do _list1.AddItem("item data")2.7 Windows 関 数 や <strong>Caché</strong> ユーティリティ 機 能 の 使 用ObjectScript コードは、 以 下 の 一 般 的 な Windows 関 数 を 使 用 することもできます。• MsgBox(message,style, title)• DoEvents• WinExec(name,flag)16 <strong>Caché</strong> <strong>Direct</strong> の 使 用 法


メッセージ 制 約 の 理 解また、 以 下 の <strong>Caché</strong> <strong>Direct</strong> ユーティリティを 使 用 することが 可 能 です。これらも、%CDSrv ルーチンに 含 まれます。• GetClientIP() はクライアントの IP アドレスを 返 します• GetSvrNode() はサーバ・マシンの 名 前 を 返 します• GetTCPDevice() このチャネルにサービスを 提 供 する TCP デバイスの 識 別 子 を、<strong>Caché</strong> 形 式 で 返 しますこれらの 関 数 の 実 行 には、 次 のような 構 文 を 使 用 します。Set varname=$$function^%CDSrv(arguments)例 えば、Windows MsgBox 関 数 を 呼 び 出 すには、 次 のようなコードを 使 用 します。Set reply=$$MsgBox^%CDSrv("Are you finished?",1)2.8 メッセージ 制 約 の 理 解CDConnect とサーバの 間 の 通 信 はすべて、<strong>Caché</strong> <strong>Direct</strong> メッセージにより 行 われます。これらのメッセージは、すべてのコンポーネントがローカルである 場 合 でも、TCP 接 続 経 由 で 送 信 されます。メッセージには、メッセージ 内 で 内 容 が 送 信 されるプロパティを 設 定 する 方 法 について、 一 定 の 制 約 が 課 せられています。これらの 制 約 は、コールバックの 記 述 方 法 にも 影 響 を 与 えます。メッセージの 詳 しい 内 部 構 造 を 知 る 必 要 はありませんが、 一 般 的 な 概 要 を 知 っておくと 便 利 です。 通 常 、メッセージは 56 バイトのヘッダから 始 まり、これに 複 数 のデータ 用フィールドが 続 きます。ヘッダ 内 のフラグはメッセージのタイプを 記 述 します。これは、どのようなフィールドが 続 くかを 暗黙 に 示 しています。メッセージのタイプには、NewTask、BeginTask、ExecuteCode、EndTask などがあります。 内 部情 報 に 加 えて、メッセージには、ミラーリングされたプロパティと、その 他 の VisM プロパティ のセクションで 説 明 する、その 他 のプロパティが 数 個 含 まれます。2.8.1 Unicode とロケールの 問 題サーバに 送 信 されるすべてのプロパティについて、その 値 に 使 用 できるのはテキスト 文 字 のみです。この 制 約 は、<strong>Caché</strong><strong>Direct</strong> により 設 定 または 取 得 される Visual Basic プロパティすべてに 適 用 されます。 詳 細 は、クライアント・ユーザ・インタフェースへのコールバック のセクションを 参 照 してください ( 一 部 の 環 境 での 作 業 では、この 制 約 に 対 する 例 外 もありますが、この 場 合 でも 一 般 的 な 要 件 は 存 在 します。)<strong>Caché</strong> サーバは、8 ビット または 16 ビット (Unicode) モードのいずれかで 動 作 します。クライアントとサーバの 間 の 最 初の 通 信 では、サーバはクライアントにサーバのモードを 知 らせます。 次 に、 以 下 の 操 作 を 行 います。• サーバが Unicode の 場 合 、すべてのクライアントはすべての 文 字 列 を Unicode に 変 換 してから、サーバに 送 信 します。この 結 果 、メッセージのサイズが 大 きくなる 可 能 性 がありますが、どのロケールで 動 作 しているどのクライアントでも、サーバと 確 実 に 通 信 できるようになります。• サーバが 8 ビット・モードの 場 合 、クライアントによる 文 字 列 の 変 換 は 一 切 行 われません。サーバと 同 じロケールを 使用 していないクライアントがある 場 合 、サーバがデータベースに 書 き 込 みを 行 ったときにデータが 失 われるか、 混 乱する 可 能 性 が 高 くなります。これは、 一 部 の 文 字 では、ロケールが 変 わると 意 味 も 変 わるためです。したがって、クライアントから 受 信 したものを 変 換 するか、 翻 訳 するかはアプリケーションの 責 任 になります。<strong>Caché</strong> <strong>Direct</strong> の 使 用 法 17


VisM コントロールの 使 用 に 関 する 基 本注 釈プロパティは 文 字 列 でなければならないという 要 件 は、Unicode サーバで 実 行 される 変 換 に 起 因 しています。ただし、8 ビット・サーバの 場 合 、および $c(1) から $c(31) の 範 囲 の 値 を 持 つコントロール・コードの 場 合 は、テキスト 以 外 のデータも 保 持 されます。8 ビット・サーバでは 変 換 は 行 われないため、データが 壊 れることはありません。また、 低 範 囲 のコントロール・コードは 8 ビット・ロケールでも、Unicode でも 同 じなので、どのサーバでも 問 題 にはなりません。ただし、クライアントは C++ で 記 述 されており、C 文 字 列 規 則 を 使 用 しているため、 埋 め 込 まれている Null 値($c(0)) により、 文 字 列 が 切 り 捨 てられる 可 能 性 があります。2.8.2 メッセージのサイズこれまでの 経 緯 から、クライアントとサーバの 間 ではどちらの 方 向 でも、1 つのメッセージの 最 大 サイズは 32Kb に 制 限 されています。<strong>Caché</strong> <strong>Direct</strong> では、 長 いメッセージが 複 数 の 短 いメッセージに 分 割 されることはありません。また、 長 すぎるメッセージの 送 信 が 試 行 された 場 合 、 復 旧 できません。したがって、この 制 限 を 超 えるメッセージが 作 成 されないようにする 責 任 はアプリケーションにあります。これよりも 長 いデータを 送 信 するには、 一 連 のメッセージを 送 信 します。この 場 合 、テストの 結 果 で 速 度 が 犠 牲 にならないことが 判 明 しています。これは、 送 信 のために、TCP により、 大 きなメッセージが 小さなセグメントに 分 割 されるためです。その 他 の 条 件 が 同 じである 場 合 、12 ~ 20 KB のメッセージで 最 適 速 度 (1 秒 当たりの 総 バイト 数 ) が 実 現 すると 考 えられます。メッセージのサイズを 見 積 もるには、サーバに 送 信 される VisM プロパティに 含 まれるすべての 文 字 に、 数 百 バイトのオーバーヘッドを 加 味 して 考 慮 します。 送 信 されるプロパティは、ミラーリングされたプロパティと、 数 個 の 小 さなプロパティ(CODE や NameSpace など) です。 通 常 のメッセージには、 約 10 個 のフィールドと PLIST プロパティがいくつかあります。これらのプロパティはそれぞれ、フィールドとして 送 信 されます。サーバが 8 ビットの 場 合 、または 文 字 列 がすべてLatin-1 文 字 の 場 合 、データ・フィールドは 1 文 字 あたり 1 バイトです (Latin-1 文 字 を Unicode で 表 現 した 場 合 、 上 位バイトにはオンになっているビットはありません。このような 文 字 列 は、8 ビット 文 字 列 として 送 信 できます)。サーバがUnicode で、プロパティに Latin-1 以 外 の 文 字 が 含 まれている 場 合 、このフィールドには 1 文 字 あたり 2 バイトが 含 まれます。この 結 果 、メッセージの 最 大 容 量 は、 約 30,000 文 字 ではなく、その 半 分 未 満 になります。 効 率 を 犠 牲 にしないために、どのメッセージも 約 12,000 文 字 を 超 えないように 確 認 することをお 勧 めします。2.9 例2.9.1 簡 単 な 例 : Lightweight <strong>Caché</strong> ターミナルこれは Visual Basic で 1 つのクライアント・フォームを 作 成 する 方 法 を 示 した 小 さなサンプル・アプリケーションです。ユーザはこれを 使 用 して、<strong>Caché</strong> ObjectScript を 1 行 入 力 し、 結 果 を 得 ることができます。このアプリケーションでは、 可 能 な限 り 既 定 値 が 使 用 されています。また、エラー・チェックはほとんど 行 われません。このサンプルでは、ローカル・マシンに <strong>Caché</strong> サーバが 実 行 されていること、<strong>Caché</strong> <strong>Direct</strong> コンポーネントがインストールされていることを 前 提 にしています。 使 用 しているマシンで <strong>Caché</strong> が 実 行 されていることを 確 認 してください。Visual Basic を 起 動 します。フォームを 使 用 して、 新 しい Standard EXE プロジェクトを 作 成 します。[プロジェクト] または[コンポーネント] メニューを 使 用 して、ツールボックスに VisM コントロールを 追 加 します。このフォームに、コマンド・ボタンを 1 つ (Command1)、テキスト・ボックスを 2 つ (Text1 および Text2)、VisM コントロールを 1 つ 追 加 します。1 つ 目のテキスト・ボックスは、 簡 単 な <strong>Caché</strong> ObjectScript の 1 行 が 入 る 程 度 の 幅 にします。また、2 つ 目 のテキスト・ボックスは結 果 文 字 列 が 入 る 程 度 の 大 きさにします。Command1_Click イベント・コードに、 以 下 を 入 力 します。VisM.Execute Text1.TextIf VisM1.Error 0 ThenText2.Text = "Error " & VisM1.Error & ": " & VisM1.ErrorNameElseText2.Text = VisM1.VALUEEndif18 <strong>Caché</strong> <strong>Direct</strong> の 使 用 法


例Form_Unload メソッドに、 次 の 行 を 追 加 します。VisM1.Server = ""プロジェクトを 実 行 します。フォームが 表 示 されたら、コマンド・ボタンをクリックします。[Choose Server Connection] ダイアログが 表 示 されます。[LOCALTCP] を 選 択 し、[OK] を 押 します。[Text1] フィールドは 空 のままにしておいて、[Command1] コマンド・ボタンをクリックします。[Text2] に 構 文 エラー・メッセージが 表 示 されます。これは、<strong>Caché</strong>ObjectScript の 行 を 入 力 しなかったためです。[Text1] に「$H」と 入 力 します。コマンド・ボタンをもう 一 度 クリックします。 現 在 日 時 が、$H 形 式 で [Text2] に 表 示 されます。アプリケーションを 終 了 します。2.9.1.1 説 明コマンド・ボタンをクリックすると、[Text1] の 内 容 が 一 時 的 に VisM Code プロパティに 格 納 され、VisM Execute() メソッドを 使 って 実 行 するためにサーバに 送 信 されます。“Text1” (テキスト・ボックスの 既 定 値 ) は 有 効 な <strong>Caché</strong> ObjectScriptではないので、1 回 目 のクリックでは、Error および ErrorName プロパティに 構 文 エラーが 返 されます。Command1_Clickイベント・ルーチンのコードにより、[Text2] にエラーが 表 示 されます。2 回 目 のクリックでは、サーバにより、 指 定 されたコードが 実 行 され、VALUE プロパティに 現 在 の $H が 設 定 されます。Command1_Click イベント・ルーチンのコードにより、 再 度 、VALUE プロパティの 内 容 が [Text2] テキスト・ボックスに 表示 されます。終 了 すると、Form_Unload イベント・ルーチンのコードにより、Server プロパティに 空 の 文 字 列 が 設 定 され、クライアントはサーバから 正 常 に 切 断 されます。これは 明 らかに 非 常 に 単 純 な 例 ですが、 非 常 の 強 力 でもあります。ObjectScript の 行 はどれもクライアントで 実 行 でき、どの ( 小 さな) 結 果 も 取 得 して 表 示 できます。グローバルからの 値 を 取 得 できます。 計 算 を 実 行 し、 結 果 を 返 すことができます。$JOB を 使 用 して、 処 理 に 長 時 間 かかるバックグラウンド・プロセスを 開 始 できます。2.9.2 その 他 の 例以 下 のサンプル・コードを 考 えてみましょう。VisM1.P0 = "pig"VisM1.Execute "Set VALUE=$e(P0,2,$l(P0))_$e(P0,1)_""ay"""Print VisM1.VALUEこのコードの 結 果 、VALUE プロパティは "igpay" に 設 定 されます。 多 少 詳 しく 説 明 すると、P0 プロパティはサーバに 送信 され、P0 という 名 前 のローカル・サーバ 変 数 になります。サーバはコード 行 を 実 行 し、VALUE という 変 数 を 計 算 して、クライアントにメッセージを 返 します。これに 応 じて、クライアントは VALUE プロパティを 更 新 して 出 力 します。<strong>Caché</strong> <strong>Direct</strong> の 使 用 法 19


3その 他 の 機 能前 の 章 では、<strong>Caché</strong> <strong>Direct</strong> を 使 用 するクライアント・アプリケーションの 基 本 要 件 について 説 明 しました。この 章 では、カスタム・プロセスを 指 定 して、 多 様 な 場 合 に 全 体 的 なクライアントとサーバの 相 互 作 用 を 実 行 する 方 法 について 説 明 します。これらの 機 能 の 多 くは、 典 型 的 なクライアントとサーバの 相 互 作 用 の 特 定 の 部 分 に 含 まれるフックで、その 大 半 はサーバ 固 有 の 機 能 です。クライアントにも 追 加 されている 機 能 があります。この 章 には、 以 下 のセクションが 含 まれます。• 概 要• エラー・トラップ• キープ・アライブ 機 能• サーバの 読 み 取 りループと 終 了 確 認• フックの 読 み 取 りと 書 き 込 み• サーバ 側 フック (グローバル 変 数 )• クライアントでのユーザ・キャンセル・オプション3.1 概 要このセクションでは、クライアントとサーバの 相 互 作 用 の 概 要 と、 一 般 的 なサーバ 動 作 について 説 明 します。まず、 典 型的 なクライアントとサーバの 相 互 作 用 は、 次 のステップから 構 成 されています。1. クライアントはサーバに 接 続 し、サーバ 宛 に NewTask メッセージを 送 信 します。2. 次 に、クライアントは BeginTask メッセージを 送 信 します。ライセンス・スロットが 使 用 できない 場 合 、サーバは エラーを 返 して 切 断 します。3. サーバは BeginTaskHook をチェックします。ここには、サーバで 独 自 に 実 行 する 処 理 を 追 加 することができます。4. 次 に、クライアントは 通 常 、 必 要 な 数 の ExecuteCode メッセージを 送 信 します。クライアントが 個 々のメッセージを 送信 する 直 前 に、クライアント 側 書 き 込 みフックがあります。ここに、 独 自 の 処 理 を 追 加 することができます。5. サーバはメッセージを 受 信 すると、サーバの 読 み 取 りフック (ReadHook) で 指 定 された 処 理 をすべて 実 行 し、メッセージを 読 み 取 ります。6. サーバは、 要 求 されたとおりコードを 実 行 します。7. サーバは、サーバ 書 き 込 みフック (WriteHook) で 指 定 された 処 理 をすべて 実 行 し、メッセージを 送 信 します。<strong>Caché</strong> <strong>Direct</strong> の 使 用 法 21


その 他 の 機 能8. クライアントはメッセージを 受 信 すると、クライアント 側 の 読 み 取 りフックで 指 定 された 処 理 をすべて 実 行 し、メッセージを 読 み 取 ります。9. やり 取 りの 最 後 に、クライアントは EndTask メッセージを 送 信 します。これにより、 接 続 が 切 断 されます。10. サーバは EndTask メッセージを 受 信 して、EndTaskHook をチェックします。ここには、サーバで 独 自 に 実 行 する 処理 を 追 加 できます。11. サーバは ShutDownHook をチェックします。これには、 独 自 の 処 理 を 追 加 できます。その 後 、サーバはシャットダウンします。注 釈カスタム EndTask 処 理 とは 対 照 的 に、ここで 説 明 するクライアントとサーバの 相 互 作 用 以 外 に、カスタム・シャットダウン 処 理 も 行 われます。タイムアウト・エラーなど、 何 らかの 理 由 でサーバがシャットダウンした 場合 、シャットダウン 処 理 が 行 われます。この 説 明 からわかるとおり、<strong>Caché</strong> <strong>Direct</strong> により、メッセージを 送 信 する 直 前 ( 書 き 込 みフック)、およびメッセージの 受 信直 後 ( 読 み 取 りフック) に 処 理 を 挿 入 するためのフックが 用 意 されています。これらのフックは、カスタム・ログ、 圧 縮 、 暗号 化 など、アプリケーションにより 選 択 された 目 的 で 使 用 することができます。クライアントの 書 き 込 みフックは、サーバの読 み 取 りフックと、またクライアントの 読 み 取 りフックはサーバの 書 き 込 みフックと 対 になっています。 書 き 込 みフックによりメッセージが 変 換 された 場 合 、 対 応 する 読 み 取 りフックで、このメッセージが <strong>Caché</strong> <strong>Direct</strong> で 予 期 される 形 式 になっていることを 確 認 する 必 要 があります。3.2 エラー・トラップサーバは 致 命 的 ではないエラーをすべてトラップし、 次 の 手 順 を 通 じて、クライアントにレポートします。1. サーバのローカル 変 数 、error と errorcode に 値 を 設 定 します。2. ローカル・エラー・フック (%cdEHOOK) で 指 定 された 関 数 を 呼 び 出 します。3. クライアントにメッセージを 送 信 し、サーバのローカル 変 数 error と errorcode に 現 在 の 値 を 渡 します。3.2.1 %cdEHOOK ローカル 変 数%cdEHOOK エラー・フックは、サーバの (つまり、 個 々のジョブ 内 の) ローカル 変 数 です。このフックを 使 用 するには、ルーチン 名 を 含 む 文 字 列 を $$label^rtn の 形 式 で 設 定 します。エラーが 発 生 したときに、サーバはこの 変 数 を 評 価 します。 変 数 が 空 ではない 場 合 、サーバはこのルーチンを 呼 び 出 します。 変 数 が 空 の 場 合 、サーバは 次 の 手 順 に 進 みます。このフックは、エラー 処 理 を 追 加 で 指 定 する 場 合 に 使 用 します。 例 えば、エラー・メッセージを 拡 張 することができます。関 数 はローカル 変 数 、error および errorcode を 自 由 に 使 用 できます。ただし、 残 りのエラー 処 理 ルーチンでこれらを 使用 不 可 能 にしない (つまり、 変 数 は 依 然 として 定 義 されており、2 バイト 以 内 のテキストまたは 数 値 である) ことが 前 提 です。 例 えば、クライアントのアプリケーション・コードで 活 用 できるように、エラー 番 号 やテキストを 変 更 または 拡 張 できます。3.3 キープ・アライブ 機 能クライアント/サーバ・アプリケーションでは、クライアントやサーバが 相 互 に 接 続 できなくなる 原 因 は 多 数 あります。<strong>Caché</strong><strong>Direct</strong> には、クライアントとサーバに 対 して、 定 期 的 に 接 続 を 確 認 し、 接 続 が 失 われた 場 合 には 適 切 に 対 応 するための手 段 が 用 意 されています。サーバの 場 合 、 適 切 にシャットダウンすることが 唯 一 の 意 義 ある 対 応 です。しかし、クライアントでは、 例 えば、 新 しいサーバ 接 続 を 確 立 したり、ユーザにメッセージを 表 示 したりすることができます。22 <strong>Caché</strong> <strong>Direct</strong> の 使 用 法


キープ・アライブ 機 能この 機 能 には 以 下 の 要 素 が 含 まれます。• キープ・アライブ 間 隔 の 初 期 設 定 。 詳 細 は、 次 のセクションで 説 明 します。• キープ・アライブ 間 隔 とタイムアウトを 表 すクライアントのプロパティ。 詳 細 は、 次 のセクションで 説 明 します。• クライアントでの ShutDown イベント。 詳 細 は 次 のセクションで 説 明 します。• 独 自 の 処 理 を 追 加 するためのサーバのフック。ShutDownHook は、サーバがシャットダウンしたときに 必 ず 使 用 されます。 詳 細 は、この 章 後 半 の "その 他 のサーバ 側 フック (グローバル 変 数 )" のセクションを 参 照 してください。3.3.1 初 期 のキープ・アライブ 間 隔キープ・アライブ 間 隔 5 回 分 のうちに、クライアントからのメッセージを 受 信 できなかった 場 合 、サーバはシャットダウンします。サーバの 起 動 時 、KeepAliveInterval の 初 期 値 は 17,280 秒 (1 日 の 1/5) です。したがって、 既 定 の 設 定 では、17,280 秒 のキープ・アライブ 間 隔 が 5 回 ( 合 計 86,400 秒 (24 時 間 )) 経 過 するまでにクライアントから 何 の 連 絡 もないと、サーバはシャットダウンします。 通 常 は、300 (5 分 間 ) のような 低 めの 値 に 設 定 するのが 適 当 です。3.3.2 キープ・アライブ 設 定 (クライアント)クライアントはキープ・アライブ 間 隔 を 制 御 し、サーバにキープ・アライブ・メッセージを 送 信 するたびに、この 値 を 再 送 信します。VisM には、キープ・アライブの 動 作 を 制 御 するためのプロパティが 2 種 類 あります。• KeepAliveInterval プロパティは、キープ・アライブ・メカニズムのために、 通 信 のアイドル 時 間 を 秒 単 位 で 指 定 します。ここで 指 定 された 秒 数 、クライアント/サーバ 通 信 が 行 われなかった 場 合 、クライアントからサーバにキープ・アライブ・メッセージが 送 信 されます。KeepAliveTimeOut プロパティで 指 定 された 期 間 、クライアントに 応 答 が 届 かなければ、クライアントは ShutDown イベントを 起 動 します。 応 答 が 届 いた 場 合 は、もう 一 度 待 機 し、もう 1 つのキープ・アライブ・メッセージを 送 信 します。• KeepAliveTimeOut プロパティは、キープ・アライブ・ラウンド・トリップのタイムアウトを 表 します。この 値 は 通 常 のタイムアウト 時 間 、TimeOut よりも 短 くなければいけません。3.3.3 キープ・アライブ・エラーのシャットダウン・イベント (クライアント)前 述 のように、クライアントは、キープ・アライブ・メッセージに 対 する 応 答 を 受 信 しなかった 場 合 、 次 の 操 作 を 行 います。1. ConnectionState プロパティの 値 を 変 更 します。このプロパティは、 常 に、 接 続 の 状 態 を 表 しています。ConnectionState が 0 の 場 合 、 接 続 には 問 題 がないか、 切断 が 正 常 に 行 われています。このプロパティの 値 が 0 以 外 の 場 合 、サーバから 切 断 された 時 刻 ( 午 前 0 時 からの経 過 秒 数 ) を 表 しています (これは $Horolog の 秒 部 分 と 同 じです。 日 付 は 示 されませんが、 最 新 であると 見 なされます)。2. その 後 、ShutDown イベントが 起 動 され、このイベントに 1 つの 引 数 、つまり、ConnectionState プロパティの 現 在 の値 が 渡 されます。接 続 が 失 われた 後 に、クライアントがメッセージを 送 信 しようとすると、 エラーが 発 生 します。注 釈このイベントは、 前 述 のとおり、クライアントがキープ・アライブ・メッセージに 対 する 応 答 を 受 け 取 らなかった 場合 にのみ、トリガされます。<strong>Caché</strong> <strong>Direct</strong> の 使 用 法 23


その 他 の 機 能3.4 サーバの 読 み 取 りループと 終 了 確 認<strong>Caché</strong> <strong>Direct</strong> サーバ・プロセスの 設 定 後 、このプロセスは、 制 限 時 間 付 きの 読 み 取 りで 始 まるポーリング・ループ 内 で、クライアントからの 通 信 を 待 ち 受 けます。 読 み 取 りのタイムアウトは 10 秒 間 です。タイムアウトする 前 に 読 み 取 りが 完 了 すると、サーバはクライアントとの 通 信 を 処 理 し、 応 答 メッセージをクライアントに 送 信 して、ポーリング・ループの 先 頭 に 戻 ります。しかし、 先 にタイムアウトすると、サーバは 指 定 された 手 順 に 従 って、このサーバ・プロセスをシャットダウンするかどうかを 判 断 します。 詳 細 は、 次 のセクションで 説 明 します。3.4.1 サーバの 終 了 確 認 手 順読 み 取 りループがタイムアウトした 場 合 、サーバは 指 定 された 手 順 に 従 って、このサーバ・プロセスをシャットダウンするかどうかを 判 断 します。シャットダウンする 必 要 があると 判 断 した 場 合 、サーバは ShutDownHook を 呼 び 出 し、そこで 指定 された 処 理 を 実 行 してからシャットダウンします。それ 以 外 の 場 合 、 終 了 確 認 手 順 で 指 定 された 次 の 手 順 に 進 みます。この 手 順 では、 次 のように、 複 数 のサーバ 側 フックが 使 用 されています。1. ローカルのアイドル 時 間 フック (%cdPULSE) に 指 定 された 関 数 を 呼 び 出 し、 要 求 された 場 合 は、アイドル 時 間 処 理を 実 行 します。 関 数 から 0 が 返 された 場 合 は、サーバは、サーバの 終 了 確 認 手 順 を 継 続 します。 関 数 から 1 が 返された 場 合 は、サーバはシャットダウンします。2. グローバルのアイドル 時 間 フック (IdleHook) に 指 定 された 関 数 を 呼 び 出 し、 要 求 された 場 合 は、アイドル 時 間 処 理を 実 行 します。 関 数 から 0 が 返 された 場 合 は、サーバは、サーバの 終 了 確 認 手 順 を 継 続 します。 関 数 から 1 が 返された 場 合 は、サーバはシャットダウンします。 詳 細 は、この 章 後 半 の "その 他 のサーバ 側 フック (グローバル 変 数 )"のセクションを 確 認 してください。3. クライアントとの 最 後 の 通 信 から 経 過 した 時 間 を 計 算 します。クライアントからの 通 信 なしに、キープ・アライブ 間 隔 5回 分 を 超 える 時 間 が 経 過 している 場 合 、サーバはシャットダウンします。4. システムがシャットダウン 信 号 を 受 信 したかどうかを 確 認 します。 受 信 している 場 合 、サーバはシャットダウンします。5. サーバが Stop^%CDSrv コマンドを 受 信 したかどうかを 確 認 します。 受 信 している 場 合 、サーバは <strong>Caché</strong> <strong>Direct</strong> サーバ・ジョブをすべてシャットダウンします。6. サーバが StopJob^%CDSrv コマンドを 受 信 したかどうかを 確 認 します。 受 信 している 場 合 、サーバは 指 定 されたサーバ・ジョブをシャットダウンします。7. スレーブ・サーバを 終 了 する 必 要 があるかどうかを 確 認 します。 終 了 する 必 要 がある 場 合 、サーバはシャットダウンします。注 釈どの 手 順 でも、サーバをシャットダウンする 必 要 があることが 確 認 されると、シャットダウン・フック (ShutDownHook)が 呼 び 出 され、そこで 指 定 された 処 理 がすべて 実 行 され、その 後 シャットダウンされます。3.4.2 %cdPULSE ローカル 変 数この %cdPULSE フックは、ローカル 変 数 としてのみ (つまり、 個 々のサーバ・ジョブ 内 にのみ) 存 在 します。このフックを 使用 するには、 関 数 呼 び 出 しを 含 む 文 字 列 を $$label^rtn の 形 式 で 設 定 します。 前 のセクションで 説 明 したとおり、サーバは、 指 定 されたタイミングで、この 変 数 を 評 価 します。 変 数 が 空 ではない 場 合 、サーバは 指 定 された 関 数 呼 び 出 しを実 行 し、その 結 果 が 0 または "" でない 場 合 は 終 了 します。 変 数 が 空 の 場 合 、サーバは 次 の 手 順 に 進 みます。24 <strong>Caché</strong> <strong>Direct</strong> の 使 用 法


フックの 読 み 取 りと 書 き 込 み3.5 フックの 読 み 取 りと 書 き 込 み前 述 のとおり、<strong>Caché</strong> <strong>Direct</strong> により、メッセージを 送 信 する 直 前 ( 書 き 込 みフック)、およびメッセージの 受 信 直 後 ( 読 み 取りフック) に 処 理 を 挿 入 するためのフックが 用 意 されています。これらのフックは、カスタム・ログ、 圧 縮 、 暗 号 化 など、アプリケーションにより 選 択 された 目 的 で 使 用 することができます。クライアントの 書 き 込 みフックは、サーバの 読 み 取 りフックと、またクライアントの 読 み 取 りフックはサーバの 書 き 込 みフックと 対 になっています。 書 き 込 みフックによりメッセージが 変換 された 場 合 、 対 応 する 読 み 取 りフックで、このメッセージが <strong>Caché</strong> <strong>Direct</strong> で 予 期 される 形 式 になっていることを 確 認 する 必 要 があります。注 釈予 期 されるメッセージ 形 式メッセージの 先 頭 4 バイトは、メッセージの 長 さを 表 す 32 ビットの 整 数 です。メッセージの 長 さを 変 更 した 場 合は、 必 ず、この 値 を 変 更 してください。サーバ・ルーチンとクライアント・ルーチンが 適 切 に 対 応 していることを 確 認 するのは、プログラマの 責 任 です。3.5.1 サーバ 側 の 読 み 取 りフックと 書 き 込 みフックサーバ 側 のフックは、その 他 のサーバ 側 フックと 同 じ 一 般 的 なメカニズムを 使 用 します。 詳 細 は、"その 他 のサーバ 側 フック (グローバル 変 数 )" のセクションを 参 照 してください。3.5.1.1 ReadHookExecuteCode メッセージの 受 信 後 、 直 ちにサーバで 実 行 する 必 要 がある 処 理 を 指 定 するには、このフックを 使 用 します。サーバはクライアントから ExecuteCode メッセージを 受 信 した 直 後 、ミラーリングされたプロパティに 値 を 割 り 当 てる 前 に、このフックを 呼 び 出 します。関 数 では、ローカル 変 数 %cdMSG が 使 用 されます。この 変 数 には 受 信 メッセージが 入 っています。 関 数 は、そのアクションを 実 行 し、 変 換 後 のメッセージを 返 します。メッセージが 変 更 されなかった 場 合 は、 単 に 終 了 (Quit ^%cdMSG) します。3.5.1.2 WriteHookクライアントに 応 答 を 送 信 する 前 に、サーバが 実 行 する 必 要 がある 処 理 を 指 定 するには、このフックを 使 用 します。サーバは、クライアントにメッセージを 送 信 する 直 前 に、このフックを 呼 び 出 します。関 数 では、ローカル 変 数 %cdMSG が 使 用 されます。この 変 数 には 送 信 メッセージが 入 っています。 関 数 は、そのアクションを 実 行 し、 変 換 後 のメッセージを 返 します。メッセージが 変 更 されなかった 場 合 は、 単 に 終 了 (Quit ^%cdMSG) します。3.5.2 クライアント 側 の 読 み 取 りフックと 書 き 込 みフッククライアント 側 でフックをインストールするには、VisM.ocx ファイルと 同 じディレクトリに、CDHooks.dll という DLL を 作 成 します。フックは、 次 のように 特 定 の 名 前 と 署 名 を 持 つエントリ・ポイントです。unsigned char* ReadHook(unsigned char* pInMsg);unsigned char* WriteHook(unsigned char* pInMsg);void FreeHookMem(unsigned char* pMem);ReadHook および WriteHook ルーチンは、 次 のように 動 作 すると 見 なされています。• 入 力 引 数 として、バイトのブロック、つまり 受 信 メッセージへのポインタを 取 ります。• データのブロックへのポインタを 返 します。<strong>Caché</strong> <strong>Direct</strong> の 使 用 法 25


その 他 の 機 能• 新 たに 割 り 当 てられたデータへのポインタを 返 します (この 場 合 、クライアントは 新 しいデータ・ブロックをコピーし、FreeHookMem ルーチンを 使 って、 返 り 値 を 解 放 します)。返 り 値 と 引 数 が 同 じである 場 合 、メモリは 解 放 されません。これは、データが 変 更 されていないか、 元 のメッセージと 同 じ領 域 を 占 めている 場 合 に 起 こる 状 況 です。サーバ 側 のルーチンに 適 切 に 対 応 するクライアント・ルーチンを 記 述 するのはユーザの 責 任 です。FreeHookMem ルーチンは、 別 のルーチンにより 割 り 当 てられたメモリを 解 放 します。3.6 その 他 のサーバ 側 フック (グローバル 変 数 )このセクションでは、グローバル 変 数 に 保 存 されているその 他 のサーバ 側 フックに 関 する 参 考 情 報 について 説 明 します。• BeginTaskHook• IdleHook• EndTaskHook• ShutDownHookこのセクションで 説 明 するフックはすべて、 同 じ 一 般 的 なメカニズムを 使 用 します。グローバル ^%CDSwitch("HookName")に 対 して 値 を 指 定 します。この 値 は、$$label^rtn の 形 式 で 記 述 された 関 数 呼 び 出 しを 含 む 文 字 列 です。このグローバルは、 指 定 されたタイミングで、サーバにより 評 価 されます。 詳 細 は、この 章 の 概 要 のセクションを 参 照 してください。グローバルが 空 ではない 場 合 、サーバは、 指 定 された 関 数 呼 び 出 しを 実 行 します。グローバルが 空 の 場 合 、サーバは 次の 手 順 に 進 みます。これらすべてについて、 実 行 は 次 のように、 間 接 指 定 により 行 われます。Set @("r="_^%CDSwitch("HookName"))ここで、r は 返 り 値 です。3.6.1 BeginTaskHookこのフックは、 保 護 パラメータの 調 整 や、プロセスのネームスペースの 変 更 などの 作 業 に 使 用 します。サーバは、サーバ・ジョブの 作 成 後 、コードの 実 行 前 に、このフックを 呼 び 出 します。 詳 細 は、この 章 の 概 要 のセクションを 参 照 してください。関 数 は、 次 のローカル・サーバ 変 数 を 引 数 として 使 用 できます。• username – <strong>Caché</strong> <strong>Direct</strong> ユーザ 名• taskname – myapp.exe など、クライアントで 実 行 されている 実 行 可 能 ファイルの 名 前• clientIP – クライアントの IP アドレスで、127.0.0.1 のように 文 字 列 の 形 式 で 表 されています。これは、クライアントの 接 続 方 法 に 応 じて、 便 利 な 場 合 とそうでない 場 合 があります。 例 えば、 非 TCP Citrix 接 続 は、 形 式 的 な IP アドレスを 受 け 取 ることにより、<strong>Caché</strong> ライセンス・システムの 要 求 を 満 たします。関 数 は 次 のいずれかの 値 を 返 します。• 成 功 ( 値 0)• エラー (^errornumber^errorname" という 形 式 の 文 字 列 。ここで、errornumber は 0 ではありません)。<strong>Caché</strong> <strong>Direct</strong>エラー 番 号 の 20900 ~ 20999 は、アプリケーション・エラーのために 予 約 されています。エラーが 発 生 した 場 合 、エラー 番 号 とテキストが VisM プロパティ、Error および ErrorName に 表 示 され、エラー・イベントの 信 号 が 送 られます。26 <strong>Caché</strong> <strong>Direct</strong> の 使 用 法


ユーザ・キャンセル・オプション3.6.2 IdleHookポーリングの 読 み 取 り 間 隔 がタイムアウトした 場 合 など、サーバがアイドル 状 態 のときに、サーバ 側 で 処 理 が 行 われるように 指 定 するには、このフックを 使 用 します。サーバは、 終 了 確 認 手 順 の 一 環 として、このフックを 呼 び 出 します。 詳 細 は、この 章 の 概 要 にある "サーバの 終 了 確 認 手 順 " のセクションを 参 照 してください。3.6.3 EndTaskHookサーバが、クライアントから EndTask メッセージを 受 信 したときに 実 行 する 必 要 がある 追 加 処 理 を 指 定 するには、このフックを 使 用 します。このフックは、 任 意 のアプリケーションのクリーンアップで 実 行 できます。3.6.4 ShutDownHook何 らかの 理 由 でサーバがシャットダウンされたときに 実 行 する 必 要 がある 追 加 処 理 を 指 定 するには、このフックを 使 用 します。このフックは、サーバがシャットダウンされるたびに、サーバにより 呼 び 出 されます。この 関 数 は 0 (サーバをシャットダウンするべきではない 場 合 ) または 1 (サーバをシャットダウンする 必 要 がある 場 合 ) のどちらかを 返 します。3.7 ユーザ・キャンセル・オプションVisM から <strong>Caché</strong> にメッセージを 送 信 する 場 合 、サーバによるメッセージ 要 求 の 処 理 に 時 間 がかかり、ユーザが 応 答 を待 たなければならないことがあります。この 待 機 時 間 が 長 い 場 合 に、 要 求 をキャンセルするオプションをユーザに 提 供 することができます。これを 設 定 するには、PromptInterval プロパティを 使 用 します。このプロパティは、サーバが 応 答 しない 場 合 に、クライアント・アプリケーションが 待 機 する 時 間 ( 秒 ) を 表 します。この 時 間 が 経 過 すると、ユーザに 対 してプロンプトが 表 示 されます。このプロンプトは、さらに 応 答 を 待 つか、 操 作 をキャンセルするかを 選 択 するためのオプションをユーザに 提 供 します。MsgText プロパティは、この 場 合 に 使 用 されるメッセージを 表 す 4 部 分 で 構 成 される 文 字 列 です。詳 細 は、"VisM.ocx コントロールの 詳 細 " の 章 にある "その 他 の VisM プロパティ" のセクションを 参 照 してください。<strong>Caché</strong> <strong>Direct</strong> の 使 用 法 27


4最 善 の 使 用 方 法一 般 的 に、 通 信 および CPU は 非 常 に 高 速 です。 特 に、タスクが 多 量 にない 限 り、コンピュータは 細 かい 要 求 を 送 信 する 多 数 のユーザに 遅 れず 対 応 できます。しかし、クライアント・マシンの 負 荷 は、1 台 のクライアントによってのみかかります。 一 方 で、ネットワークおよびサーバ 上 の 負 荷 は、 同 時 にすべてのクライアントからの 蓄 積 となります。したがって、メッセージのトラフィック、サイズ、またはサーバの 負 荷 を 少 しずつでも 増 大 させるような 操 作 は、 全 体 的 なスループットや 能力 に 多 大 な 影 響 を 及 ぼします。 以 下 のいくつかの 操 作 は、このように 累 積 的 な 負 荷 を 必 要 最 小 限 に 抑 えて、スループット、 応 答 時 間 、またはシステムの 総 合 的 な 能 力 の 向 上 を 目 指 しています。4.1 必 要 のないプロパティを 削 除 するクライアントからサーバに 送 信 される 実 行 メッセージには、 必 ず、NameSpace、Code、VALUE、P0 ~ P9、PLIST などのプロパティ 用 のフィールドが 含 まれています。NameSpace と Code フィールドは 返 されるメッセージで 削 除 されますが、その 他 のすべてのプロパティについて、 変 更 されたかどうかに 関 係 なく、 新 しい 値 が 返 されます。したがって、メッセージのサイズ (および、メッセージの 組 み 立 て、 送 信 、および 分 解 にかかる 時 間 ) は、 全 プロパティの 現 在 値 の 合 計 サイズによって 変 わります。 使 用 率 の 高 いクライアントが 多 数 ある 場 合 、ネットワーク 帯 域 幅 とサーバの 能 力 に 及 ぶ 影 響 はかなり大 きくなります。通 信 が 高 速 で、メッセージが 比 較 的 小 さくても、 大 量 のメッセージを 送 信 するときに、スピードが 問 題 となる 場 合 は、 帯 域幅 が 消 費 されないようにメッセージで 使 用 されていないプロパティをすべて 削 除 することをお 勧 めします。これらの VisMプロパティはサーバとの 通 信 を 目 的 とするもので、クライアント 上 での 長 期 保 存 には 効 率 的 ではありません。また、ミラーリングされたプロパティは、メッセージごとに 作 成 され、 破 棄 されるので、サーバ 上 でのストレージには 使 用 できません。4.2 アプリケーションをシャットダウンしたときに 明 示 的 に 切 断 する影 響 は 小 さいですが、サーバから 切 断 せずにクライアントをシャットダウンすると、チャネルで TCP エラーが 発 生 します。これにより、サーバ・コードで I/O エラーが 発 生 し、これに 応 答 して、サーバ・ジョブがシャットダウンされます (クライアントと 通 信 できなくなったサーバはそれ 以 上 使 用 されないので、これは 正 しい 応 答 と 見 なされます)。 代 わりに、 明 示 的 に 接続 を 切 断 して、サーバを 無 理 なくシャットダウンできるようにすることをお 勧 めします。<strong>Caché</strong> <strong>Direct</strong> の 使 用 法 29


最 善 の 使 用 方 法4.3 再 帰 的 、または 非 同 期 的 なサーバ 呼 び 出 し各 サーバ・チャネルでの 通 信 はすべて 同 期 的 に 行 われます。つまり、あるメッセージが 送 信 され、 受 信 されてから、 次 のメッセージが 送 信 される 必 要 があります (この 要 件 は、<strong>Caché</strong> <strong>Direct</strong> により 強 制 されています。あるメッセージが 保 留 されているときに、 別 のメッセージを 送 信 しようとすると、エラー 条 件 が 返 されます)。シングル・スレッド・クライアントとシングル・サーバの 一 般 的 な 使 用 例 では 多 くの 場 合 、これは 問 題 になりません。しかし、この 安 全 性 を 回 避 する 方 法 、つまり 同 期的 に 発 生 しないイベントがあります。タイマ・イベントと、Visual Basic DoEvents() メソッドはその 2 つです。4.3.1 クライアント 上 のタイマ定 義 により、タイマは 非 同 期 イベントです。タイマは、 他 に 行 われている 処 理 には 干 渉 しないように 設 定 することができます。 例 えば、 進 捗 状 況 またはサーバで 別 のイベントが 発 生 したかどうかを 確 認 するように、タイマをセットアップすることが可 能 です。ただし、 長 い 処 理 を 発 生 させるメッセージをサーバに 送 信 した 場 合 、 処 理 実 行 中 、そのチャネルは 使 用 できなくなります。 進 捗 状 況 を 確 認 する 場 合 、サーバに 定 期 的 にコールバックさせて 進 捗 状 況 を 報 告 させるか、クライアントから 別 のチャネルに 問 い 合 わせを 送 信 する 必 要 があります。クライアントを 独 占 せずに、 長 時 間 にわたるサーバ 操 作 を実 行 するには、 別 のプロセスにジョブを 渡 して 作 業 を 実 行 させてから、クライアントに 戻 る 方 法 もあります。このためにチャネルがもう 1 つ 必 要 になることはありませんが、 独 立 したジョブが 1 つ 必 要 になります。メッセージの 処 理 中 にタイマが 作動 すると、 別 のメッセージの 送 信 が 試 みられる 可 能 性 があります。この 場 合 、<strong>Caché</strong> <strong>Direct</strong> はこのメッセージを 受 け 入 れず、“nonsynchronous communication” エラーを 返 します。4.3.2 Visual Basic の DoEvents 関 数Visual Basic には、Windows イベント・ループを 明 示 的 に 呼 び 出 す DoEvents という 組 み 込 み 関 数 があります。 多 くの 場合 、 他 の 操 作 の 実 行 中 に、 再 描 画 を 直 ちに 実 行 するために 使 用 されます。あるサーバ・メッセージの 処 理 中 に、DoEventsがサーバ・メッセージを 発 生 させると、 危 険 要 因 となります。( 例 えば、DoEvents は、ユーザに 別 のタスクの 継 続 を 許 可 します。このタスクにより、サーバ・メッセージが 発 生 する 可 能 性 があります)。 理 論 上 は、これはコールバックでのみ 発 生 します。この 場 合 、 新 しい 再 帰 的 なメッセージがサーバに 送 信 され、 元 のメッセージのコンテキストを 破 壊 する 可 能 性 があるため、DoEvents は 特 に 厄 介 です。ここから 先 は 危 険 です。 原 則 として、DoEvents を 呼 び 出 すコールバックは 使 用 しないでください。 使 用 する 場 合 、スタックが 完 全 に 戻 されるまでユーザ 入 力 を 無 効 にするか、 少 なくともサーバへの 呼 び 出しを 禁 止 するためのフラグがアプリケーションに 必 要 です。30 <strong>Caché</strong> <strong>Direct</strong> の 使 用 法


5VisM.ocx コントロールの 詳 細この 章 では、<strong>Caché</strong> <strong>Direct</strong> ActiveX コントロール (VisM.ocx) に 関 する 参 考 情 報 について 説 明 します。 以 下 のトピックについて 説 明 します。• 拡 張 接 続 文 字 列 の 構 文• VisM プロパティ• VisM メソッド (SetServer()Connect()を 含 む)• VisM イベントこのコントロールは、 後 述 する 章 で 説 明 する C++ クラスのラッパです。5.1 VisM 拡 張 接 続 文 字 列 の 構 文Server プロパティ、Connect() メソッド、および SetServer() メソッドはすべて 接 続 文 字 列 を 使 用 します。 接 続 文 字 列 は、コロンを 区 切 り 文 字 として 使 用 する、 分 割 化 された 文 字 列 です。 通 常 、 形 式 は 次 のとおりです ( 詳 細 は、" 接 続 文 字 列 と接 続 タグ" で 説 明 しています)。"CN_IPTCP:server[port]"この 引 数 の 最 初 にある CN_IPTCP は 接 続 メソッドで、 必 ず TCP です。2 つ 目 は <strong>Caché</strong> スーパーサーバが 稼 動 しているサーバの 名 前 、または IP アドレスとポートです。 例 えば、VisM1 という VisM の 接 続 を 設 定 するには、 次 の 構 文 を 使 用します。VisM1.Server = "CN_IPTCP:127.0.0.1[57772]"5.1.1 実 行 時 の 接 続 文 字 列 の 形 式これまでの 経 緯 から、 接 続 文 字 列 は、 実 行 時 に 異 なる 形 式 をとる 場 合 があります。 具 体 的 に 言 うと、 接 続 しているときの接 続 文 字 列 は 奇 数 個 の 部 分 に 分 割 されています。これは、 以 下 のように、<strong>Caché</strong> <strong>Direct</strong> により、スーパーサーバ 情 報 の後 に 3 つ 目 の 部 分 が 挿 入 されるためです。"CN_IPTCP:server[port]:slaveserver[port]"この 3 つ 目 の 部 分 は、 接 続 先 のスレーブ・サーバを 表 します。これはマスタ・サーバの 部 分 の 形 式 と 同 じです。 現 在 、 接続 されていない 場 合 、このプロパティは 空 です。<strong>Caché</strong> <strong>Direct</strong> の 使 用 法 31


VisM.ocx コントロールの 詳 細ユーザ 名 およびパスワードには、 接 続 文 字 列 内 で 区 切 り 文 字 として 使 用 されている 文 字 を 使 用 できません。これには、コロン (":"、$Piece の 区 切 り 文 字 ) と 角 括 弧 ("[" および "]"、ポート 番 号 の 区 切 りに 使 用 される) が 含 まれます。5.1.2 その 他 の 接 続 文 字 列 の 形 式接 続 文 字 列 にはユーザ 名 とパスワードが 含 まれることがあります。これらは <strong>Caché</strong> <strong>Direct</strong> ログイン・オプションを 有 効 化している 場 合 にのみ 使 用 されます。このログイン・オプションは <strong>Caché</strong> セキュリティでは 廃 止 されているので、ここで 言 及するだけでマニュアルでは 説 明 していません。注 意この 形 式 の 使 用 は、お 勧 めしません。 接 続 文 字 列 にパスワードが 含 まれている 場 合 、<strong>Caché</strong> はどのような 単 純 な 攻 撃 でもその 影 響 を 受 けやすくなります。接 続 文 字 列 は、 以 下 のようにユーザ 名 と 暗 号 化 されたパスワードを 含 むことがあります。"CN_IPTCP:server[port]:username:password"この 場 合 、 接 続 されていると、 実 行 時 の 接 続 文 字 列 は 次 の 形 式 になります。"CN_IPTCP:server[port]:slaveserver[port]:username:password"接 続 文 字 列 は、 以 下 のようにユーザ 名 と 暗 号 化 されたパスワードを 含 むことができます。<strong>Caché</strong> では、 暗 号 化 されていない 形 式 のパスワードが 必 要 ですので、バージョン 5.2 以 降 のサーバに 接 続 している 場 合 は 注 意 してください。"CN_IPTCP:server[port]:username:@password"この 場 合 、 接 続 されていると、 実 行 時 の 接 続 文 字 列 は 次 の 形 式 になります。"CN_IPTCP:server[port]:slaveserver[port]:username:@password"注 釈クライアントが 5.2 以 降 の 場 合 、 必 要 に 応 じて、Kerberos 検 証 用 に Windows 認 証 情 報 (ユーザ 名 とパスワード) が 自 動 的 に 使 用 されます (Kerberos 認 証 を 使 用 する 接 続 の 詳 細 は、" 間 接 参 照 を 使 用 した 接 続 " を 参 照 してください)。これは、<strong>Caché</strong> <strong>Direct</strong> ログインを 補 足 するものです (<strong>Direct</strong> ログインに 代 わるものではありません)。<strong>Caché</strong> セキュリティがオンになっていない 場 合 、<strong>Caché</strong> <strong>Direct</strong> は Kerberos チェックを 省 略 しますが、ユーザ 名とパスワードが 指 定 されていれば、これを 渡 します。その 後 、サーバはサーバ 側 でオンに 設 定 されている 操 作を 行 います。5.2 VisM プロパティVisM コントロールには、サーバでミラーリングされる 一 連 のプロパティと、その 他 のプロパティがあります。5.2.1 ミラーリングされた VisM プロパティ"VisM コントロールの 基 本 " の 章 にある "ミラーリングされたプロパティ" で 説 明 されているとおり、<strong>Caché</strong> <strong>Direct</strong> は、クライアントとサーバの 間 である 特 定 の VisM プロパティの 値 をミラーリングします。これらのプロパティを 片 方 向 通 信 に 使 用 する 場 合 で、 特 にサイズが 大 きい 場 合 には、サーバから 値 を 返 す 前 にクリアします。そうしないと、 通 信 リソースは、アプリケーションにより 浪 費 されてしまいます。 詳 細 は、" 最 善 の 使 用 方 法 " の 章 を確 認 してください。クライアントによりサーバに 送 信 されるその 他 のプロパティすべてと 同 様 に、その 値 に 使 用 できるのは、テキスト 文 字 のみです。 前 述 の 章 の Unicode とロケールの 問 題 のセクションを 参 照 してください。32 <strong>Caché</strong> <strong>Direct</strong> の 使 用 法


VisM プロパティP0、P1、P2、P3、P4、P5、P6、P7、P8、P9PLISTVALUEこれらのプロパティは、クライアントとサーバでミラーリングされます。クライアントでは、VisM コントロールのプロパティとして 表 示 されます。また、サーバでは、ローカル 変 数 として 表 示 され、クライアントにある 対 応 するプロパティと 同 じ 値 を 持 ちます。このプロパティのミラーリング 方 法 は、クライアントとサーバで 異 なります。クライアントと <strong>Caché</strong> では、 配 列 の 表現 方 法 が 異 なるため、<strong>Caché</strong> <strong>Direct</strong> はこのプロパティを 使 用 して、サーバとクライアントの 間 で 配 列 のような 値 を受 け 渡 します。このプロパティは、クライアントとサーバでは 形 式 が 異 なります。 詳 細 は、"VisM コントロールの 基本 " の 章 にある "PLIST の 使 用 " のセクションを 参 照 してください。このプロパティは、P0、P1 などと 同 じ 方 法 で、クライアントとサーバでミラーリングされますが、Code プロパティの 値 がドル 記 号 または 等 号 で 始 まっている 場 合 、サーバにより、Code プロパティの 先 頭 に “Set VALUE” または “Set VALUE =” が 追 加 されます。つまり、このような 場 合 、 結 果 は VALUE プロパティに 返 されます。5.2.2 その 他 の VisM プロパティこのセクションでは、その 他 の VisM プロパティ (ミラーリングされないプロパティ) を 一 覧 表 示 します。 一 部 のプロパティは、サーバに 送 信 されないので 注 意 してください。Code実 行 のためにサーバに 送 信 される ObjectScript コードの 行 が 含 まれます。クライアントによりサーバに 送 信 される 他 のすべてのプロパティと 同 様 に、この 文 字 列 に 使 用 できるのは、テキスト 文 字 のみです。Unicode とロケールの 問 題 のセクションを 参 照 してください。ConnectionStateConnTagElapsedTimeErrorこのプロパティは、 常 に、 接 続 の 状 態 を 表 しています。これは、キープ・アライブ 機 能 と 共 に 使 用 され、クライアントで 通 信 エラーが 発 生 しているかどうか、 発 生 している 場 合 は、いつ 接 続 が 切 断 されたかをアプリケーションに通 知 します。ConnectionState が 0 の 場 合 、 接 続 には 問 題 がないか、 切 断 が 正 常 に 行 われています。このプロパティの 値が 0 以 外 の 場 合 、サーバから 切 断 された 時 刻 ( 午 前 0 時 からの 経 過 秒 数 ) を 表 しています (これは $Horologの 秒 部 分 と 同 じです。 日 付 は 示 されませんが、 最 新 であると 見 なされます)。このプロパティは 長 整 数 型 です。実 行 時 のみ。この VisM が 接 続 されている CDConnect のタグを 表 します。このプロパティを 変 更 すると、 接 続が 変 更 されるのではなく、 関 連 する CDConnect 自 体 のタグが 変 更 されます。このプロパティは 主 に 情 報 提 供 を目 的 としています。ただし、このプロパティが 空 の 文 字 列 である 場 合 、 接 続 されていないか、 接 続 はされていてもタグは 関 連 付 けられていません。最 後 のメッセージを 処 理 するのに <strong>Caché</strong> <strong>Direct</strong> が 要 した 時 間 を 表 します。これは、クライアントがメッセージを送 信 してから、 応 答 を 受 信 するまでにかかった 時 間 です。 実 行 時 、このプロパティは 読 み 取 り 専 用 です。エラー 番 号 が 含 まれます。0 の 場 合 、エラーは 発 生 していません。 実 行 時 、このプロパティは 読 み 取 り 専 用 です。 次 の ErrorName プロパティの 説 明 を 参 照 してください。<strong>Caché</strong> <strong>Direct</strong> の 使 用 法 33


VisM.ocx コントロールの 詳 細ErrorNameErrorTrapExecFlag発 生 したエラーを 説 明 する 文 字 列 。 空 の 場 合 、エラーは 発 生 していません。 実 行 時 、このプロパティは 読 み 取 り専 用 です。Error および ErrorName プロパティは、サーバ 呼 び 出 し 後 に、 必 ず 設 定 されます。 呼 び 出 しが 正 常 に 行 われた場 合 、Error は 0 に 設 定 され、ErrorName はクリアされます。サーバからエラーが 報 告 された 場 合 、エラー 番 号が Error に、 簡 単 な 説 明 が ErrorName に 設 定 されます。これらのエラーには、 必 ずしも 明 確 な 特 徴 や 説 明 が含 まれているとは 限 りませんが、それでも、アプリケーションのクライアント 部 分 を 使 用 して、 何 らかのエラーが 発生 しており、 対 応 が 必 要 であることをユーザに 通 知 できます。このレベルで 報 告 されるエラーは、サーバから 通 知 されるもので、 通 常 は や のようなプログラミング・エラーであることに 注 意 してください。アプリケーション・コードから 通 知 された 論 理 エラーや矛 盾 などのエラーは、アプリケーションがその 結 果 に 入 れて 報 告 する 必 要 があります。サーバには、アプリケーションが Error および ErrorName プロパティを 通 じて、エラー 状 態 を 返 せるようにする 機 能 があります。通 信 エラーの 処 理 を 制 御 します。<strong>Caché</strong> <strong>Direct</strong> アプリケーションで 発 生 する 可 能 性 のあるエラーには、 通 信 プロセス 自 体 で 発 生 するエラーと、アプリケーションで 発 生 し、クライアントに 報 告 されるエラーの 2 種 類 があります。• アプリケーション・エラーは、 常 に、Error および ErrorName プロパティ、および OnError イベントを 通 じて報 告 されます。• 通 信 エラーの 報 告 方 法 は、ErrorTrap の 値 によって 異 なります。ErrorTrap が False の 場 合 、 通 信 エラーはメッセージ・ボックスにより 処 理 され、 問 題 のユーザに 警 告 が 伝 えられます。ErrorTrap が True の 場 合 、 通信 エラーは Error および ErrorName プロパティ、および OnError イベントを 通 じて 報 告 されます。その 後 、ユーザの 選 択 した 方 法 で、アプリケーションによりエラーが 処 理 されます。これまでの 経 緯 から、ErrorTrap の 既 定 値 は False です。 通 常 、VisM から <strong>Caché</strong> に 接 続 する 前 に、ErrorTrapを 設 定 してください。これが 問 題 になるのは、アプリケーションがユーザなしに 実 行 されている 場 合 、またはこのようなエラーがアプリケーションによって 自 動 的 に 処 理 される 場 合 のみです。Code プロパティのコードの 行 をいつ 実 行 するかを 制 御 するスイッチです。 既 定 値 は 0 で、これはクライアントがアイドル 状 態 で、サーバにメッセージを 送 信 していないことを 表 します。 可 能 な 値 :• ExecFlag が 1 に 設 定 されるとすぐ、サーバは Code プロパティ 内 のコードを (P0 ~ P9、VALUE、PLISTプロパティのコンテキストで) 一 度 実 行 します。 実 行 を 終 了 したサーバは、ExecFlag を 0 にリセットします(この 設 定 より、Execute() メソッドのほうがはるかに 便 利 である 可 能 性 があります)。• ExecFlag が 2 に 設 定 されている 場 合 、“ 参 照 時 の 実 行 ” を 意 味 します。つまり、VALUE プロパティへの 参照 の 前 に 必 ずサーバへの 自 動 呼 出 しが 行 われ、Code プロパティ 内 のコードが 実 行 されます。これは、Codeプロパティがサーバ 上 にある 何 かの 現 在 状 態 を 表 す 式 であり、 必 要 なときにこの 式 を 繰 り 返 し 実 行 したい 場合 に 役 立 ちます。 例 えば、Code プロパティが "=$$GetNext^mydata" である 場 合 、 次 の Visual Basic コードを 使 用 して、サーバからデータの 配 列 を 取 得 することができます。For i = 1 to 1000 array(I) = VisM1.VALUE Next i• ExecFlag が 3 に 設 定 されている 場 合 、“ 間 隔 タイマ 作 動 時 の 実 行 ” を 意 味 します。この 場 合 、タイマ(Interval プロパティにより 間 隔 が 設 定 されているもの) が 作 動 すると、Code が 実 行 されます。通 常 、タイマ・オプションは、 定 期 的 に 何 かを 実 行 するために 使 用 します。1 つの 実 行 に 対 して 応 答 するにはExecuted イベントを 使 用 します。タイマ・オプションを 使 用 する 手 順 は 次 のとおりです。34 <strong>Caché</strong> <strong>Direct</strong> の 使 用 法


VisM プロパティ1. ExecFlag を 0 に 設 定 します。2. すべての 該 当 するミラーリングされたプロパティ、および Interval プロパティに 値 を 設 定 します。3. 次 に、ExecFlag に 3 を 設 定 して、タイマをオンにします。サーバとの 通 信 はすべて 同 期 的 であることに 注 意 してください。クライアントは、 現 在 のメッセージに 対 する 応 答を 受 信 してから、 次 のメッセージを 送 信 する 必 要 があります。タイマを 使 用 すると、クライアントにより、 非 同 期 的にメッセージの 送 信 が 試 みられることがあります。 例 えば、タイマにより 生 成 されたメッセージの 処 理 中 に、メッセージを 生 成 する 操 作 をユーザが 実 行 することがあります。この 場 合 、クライアントには “nonsynchronous message”エラーが 返 され、メッセージは 送 信 されません。IntervalCode プロパティの 自 動 実 行 の 間 隔 で、 単 位 はミリ 秒 です。 既 定 値 は 1000 ミリ 秒 (1 秒 ) です。 詳 細 は、ExecFlagプロパティの 値 3 を 参 照 してください。KeepAliveIntervalクライアントから 送 信 される 自 動 キープ・アライブ・メッセージの 間 隔 を 整 数 の 秒 単 位 で 指 定 します。これらのメッセージは、クライアントがアイドル 状 態 で、 間 隔 に 指 定 された 時 間 が 経 過 した 場 合 に 常 に 送 信 されます。KeepAliveTimeOutLogMaskMServerMsgTextサーバへのキープ・アライブ・メッセージの 送 信 後 に、クライアントがサーバからの 応 答 を 待 機 する 時 間 を 指 定 します。クライアント 側 でのデバッグに 使 用 します。これは 32 ビットの 整 数 プロパティで、 各 ビットは、 具 体 的 なログの 種類 に 対 するフラグとして 割 り 当 てられています。プロセスの 実 行 中 にログがオンになっている 場 合 はいつでも、実 行 可 能 ファイルが 実 行 されているディレクトリにテキスト・ログ・ファイルが 作 成 されます。このファイルの 名 前 はCDxxx.log で、xxx は 次 に 使 用 可 能 な 連 続 番 号 を 表 します。 先 頭 の 番 号 は 000 です (したがって、 初 めてログを 作 成 したときのファイル 名 は CD000.log になります)。プロセスが 終 了 すると、ログは 閉 じられます。クライアント 側 のログを 有 効 化 するには、このプロパティの 値 を 2,147,483,647 (2 31 – 1) に 設 定 して、すべてのビットをオンにします。Visual Basic では、&H7FFFFFFF を 使 用 します。これは、 同 じ 数 値 を 16 進 数 で 表 したものです。ログをオフにするには、この 値 に 0 を 設 定 します。ログの 内 容 の 解 釈 は InterSystems の 担 当 者 に 任 せるのが 最 善 ですが、この 内 容 には VisM で 起 こったことの大 半 のトレースと、サーバとの 間 で 送 受 信 されたメッセージすべてのフル・ダンプが 含 まれています。 情 報 が 少なすぎる 場 合 よりも、 多 すぎる 場 合 のほうが 失 敗 する 傾 向 にあります。 必 要 な 場 合 、 実 際 に 何 が 起 きたのかをリアルタイムに 記 録 したものとして、ログは 非 常 に 役 に 立 ちます。目 的 は Server プロパティと 同 じで、このプロパティに 設 定 できる 値 のいずれかに 設 定 できます。このプロパティは 下 位 互 換 性 のためにのみ 提 供 されているので、 新 しいアプリケーションでは 使 用 しないでください。 詳 細 は、付 録 " 以 前 のバージョンをお 使 いの 方 へのご 注 意 " を 参 照 してください。ユーザにキャンセルするかどうかを 確 認 するときに 表 示 されるメッセージを 表 す 文 字 列 で、4 つの 部 分 に 分 割 されています (PromptInterval プロパティを 参 照 )。このプロパティは 次 の 形 式 を 持 つ 文 字 列 です。"prompt_message|title_text|OK_button_text|Cancel_button_text"<strong>Caché</strong> <strong>Direct</strong> の 使 用 法 35


VisM.ocx コントロールの 詳 細NamespacePDELIMPromptIntervalServer表 示 されるメッセージ・ダイアログ・ボックスにはウィンドウ・タイトル (title_text で 指 定 されたもの) と、 長 いメッセージ (prompt_message で 指 定 されたもの) があります。また、このダイアログ・ボックスにはテキスト・ラベルの 付 いた 2 つのボタンが 表 示 されます。• OK_button_text というラベルの 付 いたボタンをクリックすると、このダイアログ・ボックスは 閉 じられ、クエリは中 断 されません。• Cancel_button_text というラベルの 付 いたボタンをクリックすると、このダイアログ・ボックスは 閉 じられ、クエリが 中 断 されます。このプロパティの 既 定 値 は 次 のとおりです。"This may take a while. Do you wish to wait?|Communications|Wait for Reply|Cancel Wait"このプロパティを 設 定 する 場 合 、どの 部 分 でも 省 略 できます。クライアントでは、 文 字 列 で 省 略 された 部 分 、または 長 さ 0 の 文 字 列 が 設 定 された 部 分 に 対 して 既 定 値 が 使 用 されます。アプリケーション・コードにより 参 照 されるルーチンやグローバルのネームスペース・コンテキストを 作 成 します。既 定 値 は 空 の 文 字 列 です。この 場 合 、ルーチンやグローバルは、サーバが 実 行 されているネームスペースで参 照 されます。 実 行 メッセージがサーバに 到 着 したときに、NameSpace プロパティが 空 ではなく、 現 在 のネームスペースとは 異 なる 場 合 、ネームスペースは 指 定 どおりに 変 更 されます。これはコードの 実 行 前 に 行 われます。ネームスペースを 変 更 するには 多 大 なコストがかかることを 覚 えておいてください。 詳 細 は、" 最 善 の 使 用 方 法 "を 参 照 してください。PLIST プロパティで 使 用 される 区 切 り 文 字 列 。 詳 細 は、ミラーリングされた VisM プロパティ のセクションを 参 照してください。これは 実 行 時 に 読 み 取 り/ 書 き 込 みが 行 われます。つまり、 設 計 時 には 設 定 できません。これまでの 経 緯 から、 既 定 値 は $C(13,10) という 文 字 列 となります。 空 の 文 字 列 が 設 定 されている 場 合 、 事 実 上 、 区 切 り文 字 はなく、PLIST は 単 一 の 要 素 と 解 釈 されます。ただし、このプロパティはサーバに 送 信 されません。待 機 時 間 を 秒 単 位 (ミリ 秒 ではありません) で 指 定 します。この 時 間 の 経 過 後 、さらに 待 機 するか、 操 作 ( 通 常は、 時 間 のかかるクエリ) をキャンセルするかをユーザに 尋 ねるプロンプトが 表 示 されます。このプロンプトが 表示 されるのは、サーバがまだ 応 答 していない 場 合 のみです。このプロンプトは、さらに 応 答 を 待 つか、 操 作 をキャンセルするかを 選 択 するためのオプションをユーザに 提 供 します。MsgText プロパティは、この 場 合 に 表 示 されるメッセージの 内 容 を 表 します。このプロパティが 0 または 負 の 値 の 場 合 、プロンプトは 表 示 されません。 既 定値 は 0 です。このプロパティの 用 途 は 2 つあります。• 特 定 のサーバに 接 続 する 場 合 、または 現 在 接 続 されているサーバから 切 断 する 場 合 には、このプロパティを 設 定 します。• 実 行 時 に、このプロパティを 取 得 して、クライアントの 接 続 先 サーバを 確 認 することができます。この 場 合 、プロパティの 値 は 多 少 異 なる 形 式 を 持 ちます。このプロパティに 接 続 文 字 列 、 接 続 タグ、 二 重 引 用 符 で 囲 まれた 疑 問 符 、または 空 の 文 字 列 を 設 定 できます。接 続 文 字 列 の 詳 細 は、この 章 前 半 の "VisM 接 続 文 字 列 " のセクションを 参 照 してください。36 <strong>Caché</strong> <strong>Direct</strong> の 使 用 法


VisM メソッドServer プロパティを 設 定 することは、SetServer() メソッドの 呼 び 出 しと 同 じ 効 果 があります。 詳 細 は、この 章 後 半の " 接 続 メソッドの 比 較 " のセクションを 参 照 してください。TagTimeOut<strong>Caché</strong> <strong>Direct</strong> では 使 用 されません。このプロパティは、Microsoft Visual Basic 規 約 との 互 換 性 のために 用 意 されています。これは 任 意 の 方 法 で 使 用 できます。クライアントがサーバからの 応 答 を 待 機 する 時 間 (ミリ 秒 ) を 表 す 整 数 値 。これは、TCP 経 由 でメッセージが 送 信された 直 後 から、Windows からデータの 受 信 が 報 告 されるまでの 時 間 です。タイマが 作 動 すると、つまり、 許 容時 間 内 に 応 答 が 受 信 されなかった 場 合 、 接 続 は 切 断 されます。これにより、 通 常 はサーバで TCP エラーが 発生 し、サーバがシャットダウンされます。クライアントは、 処 理 可 能 なエラー 状 態 で、 制 御 を 取 り 戻 します。アプリケーションが 処 理 の 続 行 を 求 める 場 合 は、 新 しい CDConnect を 作 成 する 必 要 があります。これにより、 新 たにスレーブ・サーバ・ジョブが 作 成 されます。このジョブはグローバルにはアクセスできますが、 古 いサーバ・ジョブのローカル 状 態 には 一 切 アクセスできません。このプロパティが 負 の 数 または 0 である 場 合 、クライアントは 永 久 にメッセージが 返 されるのを 待 ちます。 既 定 値は 60000 (60 秒 ) です。5.3 VisM メソッドVisM コントロールには、 次 のメソッドが 用 意 されています。Connectこの VisM を 指 定 された <strong>Caché</strong> サーバに 接 続 し、 必 要 に 応 じて、 新 しい CDConnect を 作 成 します。 以 下 の 構文 のいずれかを 使 用 します。Connect(connection_string, tag)Connect(connection_string)Connect("?", tag)Connect("?")Connect(tag)Connect("")connection_stringtag""CN_IPTCP:server_name[port] という 形 式 の 文 字 列 。ここで、server_nameは <strong>Caché</strong> が 実 行 されているマシンの DNS 名 または IP アドレス、portは <strong>Caché</strong> スーパーサーバが 使 用 しているポートです。この 章 の 前 半 にある VisM 接 続 文 字 列 も 参 照 してください。新 しく 作 成 された CDConnect オブジェクトの 名 前 となるオプションの 文字 列 。 指 定 されたクライアント・プロセス 内 で、 常 にタグの 名 前 が 重 複 しないことを 確 認 するのは、ユーザの 責 任 です。この 場 合 、VisM は ( 該 当 する 場 合 は、 最 初 の 切 断 後 )、 最 後 に 開 かれたCDConnect に 接 続 します。 元 の CDConnect は 変 更 されません。動 作 の 詳 細 は、サブセクション " 接 続 メソッドの 比 較 " を 参 照 してください。DeleteConnectionこの VisM に 接 続 されている CDConnect から 切 断 し、これを 破 棄 して、サーバ・ジョブをシャットダウンします。<strong>Caché</strong> <strong>Direct</strong> の 使 用 法 37


VisM.ocx コントロールの 詳 細Executeこのメソッドは、Code プロパティを 設 定 し、サーバを 呼 び 出 すための 近 道 です。これは、Code プロパティを 保存 し、Code プロパティに Execute メソッドへの 引 数 を 設 定 し、 実 行 されるように ExecFlag プロパティを 1 に 設定 してから、Code プロパティを 呼 び 出 し 前 の 状 態 に 戻 すこととまったく 同 じです。OnError および Executed イベントのエラー・トラップや 実 行 はすべて、 同 じ 方 法 で 行 われます。LoadRtnFromFileLoadGblFromFileSetMServerSetServer廃 止 されました。 使 用 しません。廃 止 されました。 使 用 しません。目 的 は SetServer() メソッドと 同 じです。このメソッドは 下 位 互 換 性 のためにのみ 提 供 されているので、 新 しいアプリケーションでは 使 用 しないでください。 詳 細 は、 付 録 " 以 前 のバージョンをお 使 いの 方 へのご 注 意 " を 参 照してください。この VisM に 対 する 既 存 の 接 続 を 閉 じ、 指 定 されたとおりに、 新 しい 接 続 を 作 成 します。Connect() メソッドとは対 照 的 に、SetServer() メソッドは 既 存 の CDConnect のチャネルを 変 更 できます。 以 下 の 構 文 のいずれかを 使用 します。SetServer(connection_string, tag)SetServer(connection_string)SetServer("?", tag)SetServer("?")SetServer(tag)SetServer("")connection_stringtag""CN_IPTCP:server_name[port] という 形 式 の 文 字 列 。ここで、server_nameは <strong>Caché</strong> が 実 行 されているマシンの DNS 名 または IP アドレス、portは <strong>Caché</strong> スーパーサーバが 使 用 しているポートです。この 章 の 前 半 にある VisM 接 続 文 字 列 も 参 照 してください。CDConnect オブジェクトの 名 前 となるオプションの 文 字 列 。 指 定 されたクライアント・プロセス 内 で、 常 にタグの 名 前 が 重 複 しないことを 確 認 するのは、ユーザの 責 任 です。この 場 合 、VisM は CDConnect から 切 断 され、チャネルだけが 残 ります。動 作 の 詳 細 は、 次 のサブセクション " 接 続 メソッドの 比 較 " を 参 照 してください。5.3.1 接 続 メソッドの 比 較次 のテーブルは、SetServer() メソッドと Connect() メソッドの 動 作 をまとめたものです。38 <strong>Caché</strong> <strong>Direct</strong> の 使 用 法


VisM イベント最 初 の 引 数接 続 文 字 列SetServer メソッド既 に 接 続 されているかどうかによって、 動作 が 異 なります。• まだ 接 続 されていない 場 合 、このサーバに 接 続 します。• 既 に 接 続 されている 場 合 、CDConnectのチャネルを 変 更 します (その 後 、 古いサーバ・プロセスをシャットダウンします)。接 続 メソッド既 に 接 続 されているかどうかによって、 動 作が 異 なります。• まだ 接 続 されていない 場 合 、このサーバに 接 続 します。• 既 に 接 続 されている 場 合 、 元 の CDConnectから 切 断 し、 新 しい CDConnect に接 続 します ( 元 の CDConnect は 変 更 されません)。接 続 タグ空 の 文 字 列二 重 引 用 符 で 囲 まれた 疑 問 符指 定 された CDConnect に 接 続 します ( 既に 接 続 されている 場 合 は、まず 切 断 されます。 元 の CDConnect は 変 更 されません)。[<strong>Caché</strong> version 2007.1 以 降 で 可 能 ]CDConnect から 切 断 され、チャネルだけが 残 ります。サーバのユーザにプロンプトを 表 示 した 後で、 次 の 処 理 を 行 います。• まだ 接 続 されていない 場 合 、このサーバに 接 続 します。• 既 に 接 続 されている 場 合 、CDConnectのチャネルを 変 更 します (その 後 、 古いサーバ・プロセスをシャットダウンします)。指 定 された CDConnect に 接 続 します ( 既 に接 続 されている 場 合 は、まず 切 断 されます。元 の CDConnect は 変 更 されません)。最 後 に 開 かれた CDConnect に 接 続 します( 既 に 接 続 されている 場 合 は、まず 切 断 されます。 元 の CDConnect は 変 更 されません)。サーバのユーザにプロンプトを 表 示 した 後 で、次 の 処 理 を 行 います。• まだ 接 続 されていない 場 合 、 指 定 されたサーバに 接 続 します。• 既 に 接 続 されている 場 合 、 元 の CDConnectから 切 断 し、 新 しい CDConnect に接 続 します ( 元 の CDConnect は 変 更 されません)。Server プロパティを 設 定 することは、SetServer() メソッドの 呼 び 出 しと 同 じ 効 果 があります。複 数 の VisM が 1 つの CDConnect を 共 有 している 場 合 は、 同 時 に 通 信 を 試 みてはなりません。 通 信 しようとした 場合 、"nonsynchronous communication" エラー・メッセージが 表 示 されます。5.4 VisM イベントExecutedOnErrorこのイベントは、サーバでコードの 実 行 を 試 行 した 後 に、 実 行 が 成 功 したかどうかに 関 係 なく 起 動 されます。エラーが 発 生 した 場 合 、Executed イベントの 前 に、OnError イベントが 起 動 されます。このイベントは、サーバからクライアントに 対 してエラーが 報 告 されたとき (つまり、Error および ErrorName プロパティに 空 ではない 値 が 設 定 されている 場 合 ) に、 常 に 起 動 されます 何 らかのコードを 実 行 しようとしているときにエラーが 発 生 した 場 合 、Executed イベントの 前 に OnError イベントが 起 動 されます。<strong>Caché</strong> <strong>Direct</strong> の 使 用 法 39


VisM.ocx コントロールの 詳 細ShutDownこのイベントは、サーバ・メッセージがタイムアウトした 場 合 、またはサーバが 現 在 シャットダウン 処 理 中 であることを 示 した 場 合 に 起 動 されます。アプリケーションは、ユーザへの 通 知 、 無 理 のないシャットダウンの 実 行 、または 再 接 続 の 試 行 のためにこのイベントを 使 用 できます。このイベントへの 整 数 の 引 数 は、ConnectionState プロパティの 値 で、サーバとの 接 続 が 失 われた 時 刻 を 表 します。接 続 がいったん 失 われると、その 後 、メッセージの 送 信 を 試 みても、 エラーが 発 生 します。40 <strong>Caché</strong> <strong>Direct</strong> の 使 用 法


6非 ActiveX アプリケーションでの <strong>Caché</strong> <strong>Direct</strong>の 使 用 法この 章 では、ActiveX を 使 用 していない (VisM.ocx のない) C++ などのアプリケーションから <strong>Caché</strong> <strong>Direct</strong> のプロパティやメソッドを 使 用 する 方 法 について 説 明 します。ここでは、 読 者 が 他 の 言 語 でのプログラミングを 十 分 に 理 解 していることを 前 提 にしています。6.1 一 般 的 な 手 順全 手 順 は、 以 下 のとおりです。1. インターシステムズのサポート 窓 口 から <strong>Caché</strong> <strong>Direct</strong> のヘッダ・ファイル (.h) を 入 手 します。これらのファイルは、<strong>Caché</strong> <strong>Direct</strong> の 機 能 を 提 供 する C++ クラスを 定 義 します。2. アプリケーションのソース・コードに、これらのファイルを include します。3. VisM オブジェクトの 機 能 を 再 現 するには、コードにより、CDLink クラスのインスタンスと、CDParms クラスのインスタンスを 作 成 します。 一 般 に、• CDLink には、タイムアウトやエラー・プロパティなどのプロパティや、<strong>Caché</strong> への 接 続 の 管 理 に 使 用 されるメソッドが 含 まれます。これらは、VisM コントロールの 対 応 するプロパティと 同 じです。• CDParms には、クライアントからサーバに 送 信 されるプロパティがすべて 含 まれます。これらのプロパティも、VisM コントロールの 対 応 するプロパティと 同 じです。4. 必 要 に 応 じて、プロパティの 値 を 設 定 し、メソッドを 実 行 します。この 場 合 、VisM コントロールと 同 じ 規 則 と 考 慮 事 項が 適 用 されます。6.2 推 奨 事 項ヘッダ・ファイルには、<strong>Caché</strong> <strong>Direct</strong> クラスに 関 する 情 報 が 大 量 に 保 管 されていますが、これらのクラスがすべて 直 接 的な 使 用 に 適 しているわけではありません。まず、CDLink と CDParms クラスのみを 使 用 することをお 勧 めします。これらのクラスは 下 位 レベルのクラスの 適 切 なメソッドを 公 開 し、 接 続 が 適 切 に 管 理 されていることを 確 認 します。CDLink および CDParms 以 外 のクラスは 無 視 してください。<strong>Caché</strong> <strong>Direct</strong> の 使 用 法 41


非 ActiveX アプリケーションでの <strong>Caché</strong> <strong>Direct</strong> の 使 用 法次 に、CtrlExec() メソッドではなく、CDLink の CtrlExec1() メソッドの 使 用 をお 勧 めします。CtrlExec1 メソッドは、ミラーリングされたプロパティのコンテナとして 使 用 される CDParms クラスで 使 用 するように 設 計 されていています。6.3 メモ参 考 までに、<strong>Caché</strong> <strong>Direct</strong> クラスの 構 成 を 理 解 しておくと 便 利 です。まず、 次 の 主 要 なクラスがあります。• CDLink クラスはクライアントを 表 します。VisM コントロールは、このクラスのラッパです。このクラスは、クライアントにより 必 要 とされる 共 通 プロパティやメソッドを 公 開 します。プロパティには、タイムアウト、コールバック 関 数 ポインタ、CDMsg オブジェクト、Error、ErrorName、ErrorTrap、キープアライブ、クライアント・タグなどがあります。メソッドには、 独 自 のプロパティを 管 理 するメソッドや、 必 要 に 応 じて 作 成 される CDConnect オブジェクトのメソッドなどがあります。CDLink はそれぞれ、0 個 または 1 個 の CDConnect にアタッチできます。• CDConnect クラスは、このドキュメントの 前 半 で 説 明 したとおり、CDConnect オブジェクトを 表 します。このクラスには、 基 礎 となる 通 信 DLL ( 古 い NTI DLL、または Kerberos セキュリティを 管 理 する 新 しい CConnect.dll) へのリンクが 含 まれます。また、クライアント 側 の 読 み 取 り/ 書 き 込 みフックも 提 供 します。 実 行 可 能 名 やシグニチャ、ユーザおよびクライアント・マシン 名 など、 基 本 的 な 一 定 のクライアント 情 報 はこのクラスに 保 持 されています。また、 通 信 スレッド、タイムアウト、およびキープ・アライブ 機 能 を 処 理 します。さらに、このクラスは、Connect、Send、SendKeepAlive、Receive、Disconnect などの 基 本 メソッドを 提 供 し、クライアントに 対 して Server プロパティなどのプロパティを 公 開します。また、このサーバが Unicode サーバであるかどうかを 公 開 するほか、サーバのアドレスやポートなどのサーバ・プロパティも 公 開 します。このクラスには、0 個 以 上 のアタッチされた CDLink クライアントのリストも 保 持 されます。• また、 適 切 な 形 式 でメッセージの 構 成 と 分 解 を 行 う 方 法 を 提 供 する CDMsg というヘルパー・クラスもあります。CDMsgは、Init、AppendField、GetField などのメソッドを 提 供 します。CDLink には、クライアントからのメッセージを 構 築 するための CDMsg が 含 まれます。また、CDConnect には、Task や KeepAlive メッセージなど、それ 自 体 を 構 成 するメッセージで 使 用 される CDMsg もあります。直 接 アクセスをサポートするために、 一 部 のヘルパー・クラスも 用 意 されています。• CDProp クラスは 一 部 のデータ 型 を 定 義 し、それらに 変 換 メソッドを 提 供 します。これはミラーリングされたプロパティを 1 つ 表 すために 使 用 されます。• CDParms クラスは、クライアントがサーバに 送 信 するすべての VisM プロパティ (ミラーリングされたプロパティとその他 、 数 個 のプロパティ) に 対 するコンテナです。 内 部 的 に、このクラスには、CDProp の 複 数 のインスタンスが 含 まれます。1 つの CDProp にはプロパティが 1 つ 含 まれます。CDParms は、1 つのクライアントに 対 するすべての CDProps のコレクションです。42 <strong>Caché</strong> <strong>Direct</strong> の 使 用 法


7ログまれに、 特 に 問 題 の 診 断 を 行 うために、クライアントやサーバのログが 必 要 になることがあります。サーバは、エラー・グローバル 内 にすべてのエラー・トラップも 記 録 します。7.1 クライアントでのログ一 般 に 次 の 2 つの 方 法 で、クライアントでログを 有 効 にできます。• VisM.ocx の LogMask プロパティを 設 定 する。このプロパティは、レジストリ 設 定 をすべてオーバーライドします。• レジストリ・スイッチを 設 定 する。レジストリ 設 定 は、プロパティが 設 定 されていない 場 合 の 既 定 値 の 役 割 を 果 たします。レジストリ・スイッチにより、どのクライアント・プロセスでログを 作 成 するかを 正 確 に 制 御 することができます。 具 体的 に 言 うと、これらのスイッチは、HKEY_CURRENT_USER ハイブ、または HKEY_LOCAL_MACHINE ハイブに 常 駐可 能 で、 特 定 のユーザ、またはアプリケーション・プログラム、もしくはこれらの 組 み 合 わせに 対 してのみ、ログが 記録 されるように 変 更 できます。 選 択 肢 は 最 も 具 体 的 なものから 最 も 一 般 的 なものに 向 かって 階 層 的 に 検 索 されるので、 特 定 の 目 的 のための 具 体 的 なスイッチにより、 一 般 的 なスイッチがオーバーライドされることがあります。また、<strong>Caché</strong> <strong>Direct</strong> には、これらのレジストリ・エントリを 設 定 、 取 得 するためのルーチンが 用 意 されているため、プログラムの 制 御 下 で 簡 単 に 操 作 できます。7.1.1 VisM LogMask プロパティVisM.ocx の LogMask プロパティを 直 接 設 定 できます。ログを 有 効 にするには、このプロパティを 0x7FFFFFFF (C++ の場 合 )、または &H7FFFFFFF (Visual Basic の 場 合 ) に 設 定 します。 以 下 はその 例 です。VisM1.LogMask = Val(&H7FFFFFFF)この 16 進 数 値 に 対 応 する 10 進 数 の 整 数 は、2147483647 です。ログを 無 効 にするには、このプロパティを 0 に 設 定 します。このプロパティは、レジストリ 設 定 をすべてオーバーライドします。7.1.2 レジストリ・スイッチクライアント・ログ・スイッチはレジストリ・キー 値 で、 次 の 名 前 を 持 ちます。• LogMask はビット・マスクで、ログ 記 録 を 行 うかどうかを 表 します。 前 のセクション "VisM LogMask プロパティ" で 説明 した LogMask プロパティと 同 じ 値 を 取 ります。<strong>Caché</strong> <strong>Direct</strong> の 使 用 法 43


ログ• LogFolder は 特 定 のフォルダにログ・ファイルを 保 存 する 場 合 に 使 用 します。 既 定 では、アプリケーションのメインの実 行 可 能 ファイルが 保 存 されているフォルダに 保 存 されます。 値 が 指 定 されていない 場 合 、または 空 の 場 合 は、 既定 値 が 使 用 されます。この 章 の 後 半 にある "ログ・ファイルのサイズの 制 限 " も 参 照 してください。スイッチは、hivename/Software/InterSystems/Cache キーの 下 にあります。ここで、hivename は 次 のどちらかです。• HKCU (HKEY_CURRENT_USER ハイブ)• HKLM (HKEY_LOCAL_MACHINE ハイブ)また、 指 定 されたアプリケーションを 実 行 している 特 定 のユーザの 場 合 は、さらに 3 種 類 の 値 を 使 用 できます。これらの値 には、ユーザまたはアプリケーション 名 と 基 本 値 名 を 連 結 した 名 前 が 付 けられます。 例 えば、ユーザ 名 が Joeで、アプリケーション 名 が MyApp.exe の 場 合 、LogMaskJoeMyApp、LogMaskJoe、および LogMaskMyApp という 3 つの値 も 使 用 できます。これらの 値 はこの 順 にチェックされます。それぞれの 値 はまず、HKCU でチェックされ、 次 に HKLMでチェックされます。 最 初 に 見 つかったものが 使 用 されます。 同 様 に、LogFolderJoeMyApp、LogFolderJoe、LogFolderMyApp という 名 前 の 値 が 使 われることもあります。7.1.3 レジストリ 値 の 取 得 と 設 定これらのレジストリ 値 を 設 定 し、 取 得 するために 使 用 できるクライアント 側 ルーチンは 4 種 類 あります。これらのルーチンは、ISLog.dll ファイルに 公 開 されています。これらの C シグニチャは 次 のとおりです。DWORD GetRegLogMaskEx(LPCSTR pUsername, LPCSTR pAppname);DWORD SetRegLogMaskEx(HKEY hiveKey,LPCSTR pUsername,LPCSTR pAppname,DWORD dwMask);int GetRegLogFolderEx(LPCSTR pUsername,LPCSTR pAppname,LPSTR buf,int buflen);void SetRegLogFolderEx(HKEY hiveKey,LPCSTR pUsername,LPCSTR pAppname,LPSTR buf);いずれの 場 合 も、pUsername または pAppname が NULL または 空 の 文 字 列 である 場 合 、これらの 引 数 は 使 用 されません。これらの 引 数 が 指 定 された 場 合 、Get_ routines は 適 切 な 組 み 合 わせを 検 索 し、 最 初 に 見 つかったものがあれば、それを 返 します。例 えば、GetRegLogMaskEx(NULL, “Joe”, NULL) を 呼 び 出 した 場 合 、 最 初 に、HKCU と HKLM から LogMaskJoe が検 索 され、 次 に、HKCU と HKLM から LogMask が 検 索 され、 最 初 に 見 つかったものが 返 されます。 何 も 見 つからなかった 場 合 は 0 が 返 されます。pUsername と pAppname の 両 方 が 指 定 されている 場 合 、4 つの 組 み 合 わせがすべて、 上 記の 順 序 で 検 索 されます。SetRegLogMaskEx および SetRegLogFolderEx ルーチンでは、HKCU または HKLM が 最 初 の 引 数 に 指 定 されている 場合 、そのハイブが 設 定 されます。ハイブが 指 定 されていない 場 合 、 既 定 値 の HKLM が 設 定 されます。SetRegLogMaskEx は 現 在 設 定 しているキーに 直 前 に 設 定 されていた 値 を 返 します。GetRegLogFolderEx は 見 つかったフォルダ 名 の 長 さを 返 します。 見 つからなかった 場 合 は、0 を 返 します。7.1.4 ログ・ファイルのサイズの 制 限2 種 類 のクライアント 側 レジストリ 設 定 (LogSizeLimit) を 使 用 して、ログ・ファイルが 大 きくなりすぎるのを 防 ぐことができます。スイッチは、HK/Software/InterSystems/Cache キーの 下 にあります。 前 述 のとおり、HK は HKCU または HKLMのどちらかです。44 <strong>Caché</strong> <strong>Direct</strong> の 使 用 法


サーバでのログこの 設 定 は、クライアントがログに 書 き 込 みしている 間 のログ・ファイルの 最 大 サイズを 表 します。ログの 大 きさがこのサイズに 達 すると、クライアントは、 新 しいログ・ファイルへの 書 き 込 みを 開 始 します。 古 いログ・ファイルが 既 にある 場 合 、このファイルは 破 棄 されるので、 一 度 に 3 つ 以 上 のログ・ファイルが 存 在 することはありません。クライアントがシャットダウンされると、 既 存 の 2 つのログ・ファイルは 結 合 されます。 結 果 として 得 られるログのサイズの 上 限 は、LogSizeLimit の 値 の2 倍 で、この 値 を 超 えることはありません。ログ・ファイルは、セッションに 関 する 基 本 情 報 から 始 まり、その 後 に 文 字 列 Snip というラベルの 付 いた 区 切 り 文 字 、ログに 記 録 された 最 新 のアクティビティが 続 きます。7.2 サーバでのログサーバでのログを 有 効 化 すると、クライアントとサーバの 間 で 送 受 信 されたメッセージすべてを 含 め、スレーブ・サーバ・ジョブのサーバ 部 分 で 行 われたアクティビティのトレースがログに 記 録 されます。サーバでのログを 有 効 化 するには、<strong>Caché</strong> ターミナルを 使 用 して、 次 のコマンドを 入 力 します。Set ^%CDLOG=1ログを 有 効 にした 後 に 開 始 された 新 しい <strong>Caché</strong> <strong>Direct</strong> サーバ・ジョブは、 通 常 、mgr ディレクトリに CDxxx.log という 名 前のテキスト 形 式 のログ・ファイルを 作 成 します。ここで、xxx には、このログの 対 象 となるジョブの $Job が 入 ります。 新 しいジョブはそれぞれ、 専 用 のログ・ファイルを 持 ちます。スイッチがオンになったら、 必 要 なテストを 実 行 してください。スイッチは、スレーブ・サーバ・ジョブが 開 始 されたときにのみチェックされます。その 後 、スイッチを 変 更 しても、 既 に 実 行されているジョブには 影 響 はありません。したがって、ジョブの 開 始 後 、ログをオンまたはオフにすることはできません。テストが 終 了 したら (または、 少 なくとも 開 始 されたときに)、 空 の 文 字 列 を 設 定 するか、 強 制 終 了 してスイッチをオフにします。Kill ^%CDLOG注 意このスイッチはグローバルで、すべての 新 規 ジョブに 影 響 を 与 えます。また、このログは 非 常 に 大 きくなる 可 能 性 があります。したがって、ログはできるだけ 短 時 間 で 実 行 することをお 勧 めします。 特 にサーバがテスト 専 用 ではない 場 合 は、できるだけ 短 くしてください。クライアントからプロセスを 自 動 化 して、テスト 自 体 が 開 始 される 直 前 にスイッチをオンにする <strong>Caché</strong> <strong>Direct</strong> ジョブ、およびテストの 開 始 直 後 にスイッチをオフにするジョブを 実 行 することができます。これをテスト 自 体 の 一 部 にして、スイッチを 設 定 し、Server プロパティをリセットして 再 接 続 してから (これにより、 新 しいサーバ・ジョブが 開 始 されます)、 再接 続 後 の 最 初 のアクティビティとしてスイッチをオフにすることも 可 能 です。 例 えば、クライアントが VisualBasic アプリケーションである 場 合 、 次 のようなコードで 始 めることができます。VisM1.Execute "Set ^%CDLOG=1"; reset to the same value as before then start a new jobVisM1.Server = VisM1.ServerVisM1.Execute "Kill ^%CDLOG"7.3 サーバ・エラー・グローバル前 述 のサーバ・ログとは 別 に、サーバは、グローバル %CDServer("Error") に 内 部 サーバ・エラー・ログを 記 録 しています。これにはトラップされたエラーがすべて 記 録 されます。このログに “emergency brake” という 行 が 含 まれている 場 合 、これはサーバにより、エラーの 無 限 ループ (1 秒 間 に 5回 以 上 のエラー) が 検 出 されたことを 表 しています。<strong>Caché</strong> <strong>Direct</strong> の 使 用 法 45


Aインストールとアップグレード<strong>Caché</strong> をインストールすると、<strong>Caché</strong> <strong>Direct</strong> も 自 動 的 にインストールされます。しかし、 場 合 によっては、<strong>Caché</strong> を 再 インストールせずにサーバをアップグレードするか、<strong>Caché</strong> がインストールされていないマシンにクライアント 側 ソフトウェアをインストールする 必 要 がある 場 合 もあります。この 付 録 では、これらの 操 作 を 行 う 方 法 について 説 明 します。A.1 <strong>Caché</strong> <strong>Direct</strong> サーバのアップグレード<strong>Caché</strong> <strong>Direct</strong> では、<strong>Caché</strong> インストールの 残 りの 部 分 と 共 に 自 動 的 にインストールされたサーバが 使 用 されていますが、新 しい <strong>Caché</strong> をインストールしなくても、このサーバを 簡 単 にアップグレードできます。<strong>Caché</strong> <strong>Direct</strong> サーバ・コードは 古いクライアントやプラットフォームとの 下 位 互 換 性 を 保 つように 構 築 されています。つまり、 問 題 を 修 正 するために<strong>Caché</strong><strong>Direct</strong> サーバをアップグレードするか、 他 の 大 規 模 なアップグレードを 実 行 せずに 新 しい 機 能 をインストールできるということです。<strong>Caché</strong> <strong>Direct</strong> サーバをアップグレードするには、 次 の 操 作 を 行 います。1. インターシステムズのサポート 窓 口 から、 使 用 しているプラットフォームに 対 応 する 最 新 の <strong>Caché</strong> <strong>Direct</strong> の 暗 号 化 されたテキスト・ファイルを 取 得 し、<strong>Caché</strong> サーバ・マシンに 保 存 します。このファイルの 拡 張 子 は .enc です。2. 実 行 中 の <strong>Caché</strong> <strong>Direct</strong> ジョブをすべて 停 止 します。3. ターミナルで、 以 下 のコマンドを 入 力 します。Do rload^%CDCrypt([,password])例 :Do rload^%CDCrypt("C:\\temp\\CDCache.enc","SYS")これにより、ソースが 解 読 され、 結 果 として 得 られた .int コードがロードされてコンパイルされた 後 、このソースが 破 棄 されます。サーバ・ソースを 保 存 する 場 合 は、オプションのパスワードを 設 定 します。 通 常 、これは 省 略 されます。 正 しいパスワードを 入 力 した 場 合 、.int ソースはそのまま 保 持 されます。 変 更 のデバッグやテストなど、ソースを 必 要 とするアクティビティを 実 行 する 必 要 がある 場 合 は、インターシステムズのサポート 窓 口 からパスワードを 入 手 できます。A.2 新 規 マシンへの VisM のインストールVisM をインストールする 最 も 簡 単 な 方 法 は、 通 常 どおり、<strong>Caché</strong> クライアント・ソフトウェアをインストールすることです。しかし、<strong>Caché</strong> <strong>Direct</strong> クライアント・ソフトウェアを 手 動 でインストールできます。そのためには、 以 下 の 操 作 を 実 行 します。<strong>Caché</strong> <strong>Direct</strong> の 使 用 法 47


インストールとアップグレード1. Microsoft Visual 2008 Redistributable Package が 既 にインストールされていることを 確 認 します。VisM DLL を 登 録するには、このパッケージが 必 要 です。2. クライアントがインストールされているマシンから、 次 のファイルをコピーします。<strong>Caché</strong> <strong>Direct</strong> 5.1 またはそれ 以 降 の 場 合<strong>Caché</strong> <strong>Direct</strong> バージョン 5.1 以 前 の 場 合• cconnect.dll• NTI.dll• Cmvism32.dll および 同 様 の 名 前 を 持 つファイルすべ • NTIIPTCP.dllて• Cmvism32.dll および 同 様 の 名 前 を 持 つファイ• ISCDLink.dllルすべて• ISLog.dll• ISLog.dll• VISM.ocx•VISM.ocxディレクトリ C:\Program Files\Common Files\InterSystems\Cache からファイルをコピーし、ターゲット・マシンの同 じディレクトリに 貼 り 付 けます。3. DOS プロンプトを 開 き、このディレクトリに 移 動 して、 次 のコマンドを 入 力 して、ActiveX コントロールを 登 録 します。regsvr32 vism.ocx48 <strong>Caché</strong> <strong>Direct</strong> の 使 用 法


B以 前 のバージョンをお 使 いの 方 へのご 注 意<strong>Caché</strong> <strong>Direct</strong> は、 下 位 互 換 性 を 持 つように 設 計 されていますが、 場 合 によっては 動 作 が 変 更 することがあります。アーキテクチャの 変 更 の 中 には、 以 前 のバージョンをお 使 いの 方 に 特 にお 知 らせしておきたいものが 含 まれています。この 情報 は、 新 しい 機 能 を 活 用 できるようにアプリケーションを 順 応 させる 場 合 に 役 立 ちます。B.1 <strong>Caché</strong> <strong>Direct</strong> での IPv6 に 関 する 問 題<strong>Caché</strong> <strong>Direct</strong> の 現 在 のリリースでは、IPv6 のアドレス 形 式 が 全 面 的 にサポートされています。 特 に、VisM.ocx のServer/MServer プロパティにより、 以 前 と 同 じ 一 般 的 な 接 続 文 字 列 形 式 で IPv6 アドレスを 使 用 できます。ただし、アプリケーションで 使 用 している 方 法 によっては、 不 可 避 な 障 害 が 発 生 することも 考 えられます。 具 体 的 には、<strong>Caché</strong> <strong>Direct</strong> の 接 続 文 字 列 は、 以 下 の 一 般 的 な 形 式 のコロン 区 切 り 表 現 となっています。CN_IPTCP:server_address[port]server_address はマスタ・サーバで、これには IP アドレス、サーバの DNS 名 、または 特 別 な 名 前 localhost を 指 定 できます。Server プロパティ ( 指 定 されたサーバへの 接 続 を 要 求 するメカニズム) の 設 定 から 戻 ると、 接 続 を 試 みた 結 果 を 反 映 してこのプロパティは 再 設 定 されます。 接 続 に 成 功 していると、スレーブ・サーバ・アドレスを 指 定 した 最 後 の 部 分 が 追 加 されます。 最 近 のリリース (スーパーサーバの 導 入 以 降 ) では、この 部 分 は 必 ず 2 番 目 の 部 分 と 同 じになるので 重 複 した指 定 となります。 接 続 に 失 敗 していると、プロパティの 値 は 空 の 文 字 列 "" に 変 更 されます。server_address でコロンを 使 用 する IPv6 アドレスでは、 混 乱 が 発 生 する 可 能 性 があります。IPv6 では、 複 数 のループバック・アドレス 形 式 を 使 用 できます。<strong>Caché</strong> <strong>Direct</strong> では、これらすべての 形 式 をサポートしています。ただし、アプリケーション・コードで 設 定 した 前 提 条 件 によっては、 新 しいアドレスを 使 用 すると 不 適 切 な 動 作 になる 可 能 性 があります。 以 下では、<strong>Caché</strong> <strong>Direct</strong> で IPv6 アドレスがどのように 扱 われるかについて 説 明 します。1. 接 続 文 字 列 は、 上 記 と 同 じ 一 般 的 な 形 式 です。これは、ポート 番 号 を 囲 む 角 括 弧 を 検 索 することによって、server_address のエクステントを 認 識 します。2. 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 のように、アドレスの 下 位 バイトから 順 に 記 述 して 表 現 できます。これらのループバックはすべて 同 等 で、 実 際 のアドレスを 表 すものではありません。 意 味 のある 比較 を 行 うため、<strong>Caché</strong> <strong>Direct</strong> では、これらすべてのアドレスを、 接 続 ソフトウェアで 認 識 して 適 切 に 処 理 できる 名 前localhost に 変 換 します。これは、そのアドレスがレジストリから 取 得 したものであるか、 明 示 的 にアプリケーション・コードから 取 得 したものであるかには 関 係 ありません。<strong>Caché</strong> <strong>Direct</strong> の 使 用 法 49


以 前 のバージョンをお 使 いの 方 へのご 注 意3. <strong>Caché</strong> <strong>Direct</strong> では、アドレスが IPv6 形 式 (コロンを 使 用 した 形 式 ) の 場 合 、3 番 目 の 部 分 が 接 続 文 字 列 に 付 加 されなくなりました。 接 続 に 成 功 すると、Server プロパティは 接 続 先 のサーバを 表 す 値 に 設 定 されます。IPv6 形 式 のアドレスの 場 合 は、 指 定 した 文 字 列 を 簡 潔 にしたような 形 式 になります。IPv4、DNS 名 、または localhost を 使 用 している 場 合 は、5.1 以 前 の <strong>Caché</strong> のバージョンとの 後 方 互 換 性 を 維 持 するため、 重 複 指 定 となる 3 番 目 の 部 分 が引 き 続 き 使 用 されます。4. IPv6 環 境 での 区 切 り 文 字 としてコロンのみを 扱 うアプリケーション・コードは 適 切 に 機 能 しない 可 能 性 があります。一 般 的 な 考 え 方 として、 接 続 文 字 列 が 意 味 する 内 容 を 人 間 が 容 易 に 認 識 できれば、ソフトウェアでも 容 易 に 認 識 できます。 接 続 文 字 列 の 解 析 ルールは 以 下 のとおりです。1. 最 初 の 部 分 は 必 ず CN_IPTCP: と 同 じになります。2. 次 の 部 分 (IPv4 形 式 または IPv6 形 式 ではサーバとポート) は、ポート 番 号 の 後 の 閉 じ 角 括 弧 で 終 了 します。これにより、アドレスにあるコロンにより 生 じる 混 乱 を 避 けることができます。3. Cache セキュリティの 導 入 により、ユーザ 名 とパスワードは 接 続 文 字 列 では 指 定 しないようになりました。ただし、<strong>Caché</strong><strong>Direct</strong> ではどちらのパラメータも、 拡 張 した IPv6 形 式 で 引 き 続 き 正 しく 認 識 および 処 理 できます。B.2 以 前 の 共 有 接 続 の 動 作従 来 の VisM コントロールは、シングル・スレッドの 共 有 接 続 メカニズムでした。これは、プロセス 中 に VisM コントロールすべてで 共 有 される MServer プロパティを 持 っていました。 実 際 、このプロパティは、サーバへの 接 続 を 反 映 した 計 算値 でした。VisM で 変 更 すると、このプロパティは 現 在 のサーバから 切 断 され、 新 しいサーバ・プロセスへの 新 しい 接 続 が作 成 されます。このプロパティに 空 の 文 字 列 が 設 定 されている 場 合 、サーバから 切 断 されます。通 信 は、 別 のスレッドで 行 われました。B.3 新 しいアーキテクチャ新 しい VisM コントロールの 新 しい 内 部 構 造 は、VisM オブジェクト、これらが 接 続 されている CDConnects、およびその下 で CDConnects にアタッチされているサーバ・プロセスの 3 層 から 構 成 されています。CDConnect には、 特 にこの 説明 に 関 連 する 次 のような 性 質 があります。• CDConnect は、 複 数 の 呼 び 出 し 元 に 接 続 できます。これは、 複 数 の VisM クライアントが 同 じサーバ・プロセスを 共有 できることを 示 します。• CDConnect をあるサーバ・プロセスから 切 断 し、すべての 呼 び 出 し 元 と 共 に 別 のサーバ・プロセスに 接 続 することができます。• CDConnect をサーバ・プロセスに 接 続 する 必 要 はありません。• CDConnects は 複 数 存 在 することがあります。これらの CDConnects はそれぞれ、 専 用 のサーバと VisM クライアントを 持 ちます。現 在 の 3 層 と、CDConnect 層 の 設 計 方 法 により、<strong>Caché</strong> <strong>Direct</strong> アプリケーションの 柔 軟 性 はさらに 高 まっています。これまでは 不 可 能 だったクライアント/サーバ 関 係 を 作 成 できます。また、 同 時 に 別 々の 接 続 が 可 能 なので、マルチスレッド・アプリケーションを 作 成 できます。 接 続 はそれぞれ、 独 立 した 通 信 スレッドを 持 ち、これを 管 理 します。それでも、 各 接続 の 同 期 がとられている 必 要 があります。これは、サーバ・ジョブ 自 体 はシングルスレッドで、 一 度 に 処 理 できるメッセージは 1 つのみだからです。50 <strong>Caché</strong> <strong>Direct</strong> の 使 用 法


動 作 に 関 する 注 意B.4 動 作 に 関 する 注 意ここで 説 明 する 変 更 により、 下 位 互 換 性 の 問 題 が 発 生 する 場 合 があります。 新 しい VisM は、ほとんどの 一 般 的 な 場 合と 同 じ 動 作 を 試 みます。それができない 場 合 、 最 も 予 期 される 動 作 を 試 みます。このバージョンの VisM には、Server というプロパティがあり、これは<strong>Caché</strong> への 接 続 に 使 用 されます。 下 位 互 換 性 のために、VisM には、 古 い 名 前 の MServer というプロパティもあります。ほとんどの 場 合 、どちらのプロパティでも 使 用 できますが、VisM コントロールがサーバに 接 続 されていない 場 合 は、プロパティによって 動 作 が 異 なります。• アプリケーションが MServer プロパティを 取 得 していても、VisM はまだ 接 続 されていないという 場 合 、 最 新 の 接 続が 存 在 する 場 合 にはこれを 共 有 し、その 接 続 をMServer プロパティとして 返 します。• 同 じ 状 況 で、アプリケーションが Server プロパティを 取 得 した 場 合 、VisM は 接 続 されず、Server プロパティは 空 の文 字 列 のまま 残 ります。アプリケーションで Server プロパティまたは MServer プロパティが 設 定 されている 場 合 の 動 作 は 次 のとおりです。• VisM が 接 続 されていなかった 場 合 、 新 しい 接 続 が 作 成 されます。 既 存 の VisM やその 接 続 には 影 響 はありません。この 動 作 は、<strong>Caché</strong> <strong>Direct</strong> の 前 のバージョンの 動 作 とは 異 なります。• VisM が 接 続 されていた 場 合 、VisM が 使 用 している ( 他 の VisM と 共 有 している 可 能 性 のある) 接 続 オブジェクトがサーバから 切 断 されます。 接 続 文 字 列 が 空 ではない 場 合 、 新 しいサーバに 接 続 されます。この 影 響 を 受 けるのは、このチャネルを 共 有 している VisM のみです。これは、 他 の VisM すべてのサーバを 変 更 する、<strong>Caché</strong> <strong>Direct</strong> の 従来 のバージョンとの 互 換 性 を 持 ちます。また、このバージョンの VisM には 新 しいメソッドも 用 意 されています。 詳 細 は、"VisM コントロールの 使 用 に 関 する 基 本 "の 章 を 参 照 してください。これらのメソッドは、Connect()、SetServer()、および DeleteConnection() です。<strong>Caché</strong> バージョン 2007.1 以 降 、SetServer() の 最 初 の 引 数 として、 接 続 タグを 使 用 できるようになりました。また、Serverプロパティ (または、MServer プロパティ) に 接 続 タグを 設 定 することもできます。B.5 その 他 のアーキテクチャの 変 更• このバージョンから、<strong>Caché</strong> スーパーサーバが 従 来 の <strong>Caché</strong> <strong>Direct</strong> マスタ・サーバ・ルーチンに 取 って 代 わります。従 来 、マスタ・サーバは 接 続 から 要 求 を 受 信 し、 新 しいポートにスレーブ・サーバ・プロセスを 生 成 し、 呼 び 出 し 元 を新 しいポートにリダイレクトしていました。 呼 び 出 し 元 はマスタ・サーバから 切 断 され、 正 しいポート 上 のスレーブ・サーバに 接 続 されました。今 バージョンから、スーパーサーバは 接 続 要 求 を 受 信 し、スレーブ・サーバ・プロセスを 生 成 してから、 途 中 で 切 断されずに、 呼 び 出 し 元 を 直 接 このプロセスに 転 送 します。その 他 のポートは 使 用 されません。• <strong>Caché</strong> <strong>Direct</strong> サーバが Unicode サーバの 場 合 、メッセージはすべて Unicode で 送 信 されるため、ロケールの 問 題が 解 消 されます (ただし、これは 8 ビット・サーバには 当 てはまりません。 詳 細 は、"Unicode とロケールの 問 題 " を 参照 してください)。• 使 用 している <strong>Caché</strong> <strong>Direct</strong> のバージョンによっては、メッセージの 処 理 や、クライアントとサーバの 相 互 作 用 の 制 御などを 行 うフックが 追 加 されていることもあります。• <strong>Caché</strong> <strong>Direct</strong> では、<strong>Caché</strong> セキュリティが 透 過 的 にサポートされるようになったため、NewTask 処 理 にログイン・フック (^%CDSwitch("SecHook")) はほとんど 必 要 なくなりました。このフックは 引 き 続 きサポートされますが、マニュアルには 記 載 されません。<strong>Caché</strong> <strong>Direct</strong> の 使 用 法 51


C例 : Visual Basic でのプリンタのサポートインターシステムズは、<strong>Caché</strong> ObjectScript から Windows の 既 定 のプリンタ (VB Printer オブジェクト) を 使 用 したコールバックの 例 を 示 す <strong>Caché</strong> <strong>Direct</strong> サンプルを 提 供 できます。このサンプルの 副 産 物 として、Visual Basic フォームが 1 つ提 供 されますが、このフォームはどのようなプロジェクトにでも 組 み 入 れることができ、 必 要 に 応 じて 使 用 または 拡 張 できます。また、Screen や Clipboard などの Visual Basic オブジェクトをサポートするように 拡 張 することも 簡 単 にできます。このサンプル・ルーチンは、それ 自 体 を Windows の 既 定 のプリンタに 出 力 します。このとき 数 種 類 のフォントが 使 用 され、コメントは 斜 体 で、ページのヘッダと 数 値 は 異 なるフォントで 印 刷 されます。このルーチンの 記 述 は 非 常 に 単 純 で、 必 要となる 印 刷 機 能 のほとんどが 含 まれています。 印 刷 モデルは Visual Basic (および Windows) のモデルです。<strong>Caché</strong> のモデルではありません (Write コマンドへのスラッシュ・パラメータをカスタム GBI デバイスに 実 装 できますが、このサンプルより 機 能 が 優 れていることも、 便 利 なこともありません。<strong>Caché</strong> 規 則 に 対 して1 つ 妥 協 されているのは、<strong>Caché</strong> ObjectScriptモデルが 後 に 続 く、Print メソッドのパラメータです。このほうが 簡 単 で 馴 染 みある 方 法 となるためです。Print() メソッドへの 引 数 は 二 重 引 用 符 で 囲 まれた 文 字 列 となることに 注 意 してください。これは、ObjectScript 変 数 の 名 前 は、Basic にとって 何 の 意 味 もないからです。C.1 概 要一 般 に、<strong>Caché</strong> ObjectScript ルーチンから Basic コードを 実 行 するには、このコードをボタンの Click イベントに 配 置 して、このボタンの Value プロパティを 1 に 設 定 します。これにより、Click イベントが 起 動 され、Basic コードが 実 行 されるようになります。このバリエーションとして、 他 のアクションに 応 じて 起 動 される 他 のイベントがあるという 事 実 を 活 用 できます。 特 に、テキスト・コントロールは、Text プロパティへの 変 更 に 対 応 して Change イベントを 起 動 します。これにより、<strong>Caché</strong> からの 呼 び 出 し 1 回 で、Text プロパティに 適 切 な 文 字 列 を 設 定 し、Change イベント・コードにこれを 解 析 させることができるので 便 利 です。 結 果 がある 場 合 、 同 じテキスト・コントロールの Tag プロパティに 返 されます。このアプローチは、まったく 一 般 的 な 方 法 で、 独 立 した 隠 しフォームで 使 用 できます。また、すべて Basic で 記 述 されます。C.2 内 部 コマンドの 構 文サンプルには、コマンド 文 字 列 を 書 式 設 定 し、これをプリンタ・オブジェクトに 送 信 するための 簡 単 な ObjectScript ルーチンがいくつか 含 まれています。Text プロパティには、コマンドと 数 個 の 引 数 から 構 成 される 文 字 列 が 含 まれます。このコマンドは、Printer オブジェクトを 使 って 実 行 される、プロパティの 設 定 や 取 得 、メソッドの 実 行 などの 操 作 に 対 応 します。<strong>Caché</strong> <strong>Direct</strong> の 使 用 法 53


例 : Visual Basic でのプリンタのサポートC.2.1 プロパティの 設 定プロパティを 設 定 するには、SetProp() の 後 に、property_name=value の 形 式 で 1 つ 以 上 のプロパティ 名 と 値 のペアをコンマで 区 切 って 指 定 します。これにより、1 つの 呼 び 出 しで、 複 数 のプロパティを 設 定 できます。 例 えば、Printer1 インスタンスに 直 接 アクセスするには、 次 のようにします。Set _Printer1!txtPrint.Text="SetProp:FontName=Arial,FontSize=12,FontBold=1"また、ヘルパー・ルーチンを 通 じてプリンタにアクセスするには、 次 のようにします。Do SetProp^%CDPrt("FontName=Arial,FontSize=12,FontBold=1")C.2.2 プロパティの 取 得プロパティの 値 を 取 得 するには、GetProp()の 後 に、コンマで 区 切 ったプロパティ 名 を 指 定 します。このクエリに 対 する 応答 は、Tag プロパティに、SetProp() 引 数 と 同 じ 形 式 で 設 定 されます。 例 えば、プリンタに 直 接 アクセスするには、 次 のようにします。Set _Printer1!txtPrint.Text="GetProp:FontName,FontSize,FontBold"また、ヘルパー・ルーチンを 通 じてプリンタにアクセスするには、 次 のようにします。Set prop=$$GetProp^%CDPrint("FontName,FontSize,FontBold")その 後 、Tag プロパティに、 次 の 形 式 の 文 字 列 が 設 定 されます。"FontName=Arial,FontSize=12,FontBold=1"このプロパティは、 関 数 の 結 果 としても 返 されます。C.2.3 メソッドの 実 行このサンプルで 使 えるメソッドは、NewPage()、Scale()、TextHeight()、TextWidth()、Print()、および EndDoc() です。これらのメソッドにはそれぞれ、ヘルパー・ルーチンを 通 じて 実 行 可 能 な 同 等 のコマンドがあります。Print() メソッドの 引 数 は、Basic の 規 約 ではなく、Write コマンドと 同 様 、<strong>Caché</strong> ObjectScript 形 式 制 御 規 約 に 従 って 指定 します。 例 えば、プリンタに 直 接 アクセスするには、 次 のようにします。Set _Printer1!txtPrint.Text="NewPage"Set _Printer1!txtPrint.Text="Scale:0,0,80,60" or "Scale"Set _Printer1!txtPrint.Text="TextHeight:"12""Set _Printer1!txtPrint.Text="TextWidth:"50""Set _Printer1!txtPrint.Text="Print:!,?8,""Some text"""Set _Printer1!txtPrint.Text="EndDoc"ヘルパー・ルーチンを 通 じてプリンタにアクセスするには、 次 のようにします。Do NewPage^%CDPrintDo Scale^%CDPrint(0,0,80,60) or Do Scale^%CDPrint( )Set ht=TextHeight^%CDPrint("12")Set wid=TextWidth^%CDPrint("50")Do Print^%CDPrint("!,?8,""Some text""")Do EndDoc^%CDPrintPrint() メソッドへの 引 数 は 二 重 引 用 符 で 囲 まれた 文 字 列 にする 必 要 があります。これは、<strong>Caché</strong> ObjectScript 変 数 の 名前 は、Basic にとって 何 の 意 味 もないからです。 内 部 引 用 を 二 重 にして、 適 切 に 文 字 列 を 引 用 しているルーチンについては、サンプル・コードの quote^CDPrTest を 参 照 してください。54 <strong>Caché</strong> <strong>Direct</strong> の 使 用 法

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!