Skip to main content

This is documentation for Caché & Ensemble. See the InterSystems IRIS version of this content.Opens in a new tab

For information on migrating to InterSystems IRISOpens in a new tab, see Why Migrate to InterSystems IRIS?

Caché 2010.1

この章では、Caché 2010.1 の以下の項目について説明します。

Caché 2010.1 の新機能と強化機能

今回の 2010.1 リリースでは、Caché に次の主な新機能が加わりました。

さらに、このバージョンの Caché では、次の分野の機能が向上しています。

さらに、これ以外にも、さまざまな点で機能強化や改善がなされています。特に既存のインストール環境をアップグレードする場合は、"アップグレード・チェックリスト" で詳細な変更内容を確認してください。

主な新機能

クラス・コンパイラとルーチン配信の機能向上

バージョン 2010.1 では、オブジェクト実装のパフォーマンスと信頼性を高める、数多くの機能向上を実現しています。これらの多くは基本的な実装に対する変更なので、開発者が意識することはありません。しかし、その効果は大幅に短縮されたコンパイル時間とランタイム・パフォーマンスの向上という観点から明白です。これまでに、コンパイルに要する時間が半分になったという報告もあります。クラス・コンパイラの機能向上により、サポート対象の開発オプションの充実、使いやすさの向上、およびコンパイル時間の短縮が実現しています。対応するオブジェクト・ランタイムおよび配信メカニズムも強化され、パフォーマンスとスケーラビリティが向上しています。バージョン 2010.1 では、ランタイムのスーパークラスの解決、頻繁に生成されるプロパティ・メソッド (Get、Set、isModified、setModified など) のシステム実装、および共有クラス・キャッシュがサポートされます。

クラス・インスタンスの使用中にクラスをコンパイルする際に発生するエラーを回避する、新しいコンパイラおよびクラス配信のメカニズムがあります。スーパークラスの変更によりサブクラスのリコンパイルが必要となるかどうかを判断するコンパイラのロジックも改善されました。これにより、不要なリコンパイルが回避されます。詳細は、"Cache オブジェクトの使用法" の “クラス・コンパイラに関する留意事項” を参照してください。

Java ダイナミック・オブジェクト・インタフェース

このバージョンの Caché では、Java プログラム向けに新しい高性能なインタフェースを導入し、次の機能を提供しています。

  • 多次元ストレージ (MDS) API

    Java アプリケーションで JNI (Java Native Interface) を使用して Caché グローバルに直接アクセスし、それを操作できるようになりました。Cache グローバルを Java オブジェクトに変換する必要はありません。この結果、Java アプリケーションと Caché を同じプロセス空間で実行できるようになりました。このインタフェースでサポートされている Caché の先進的な機能は次のとおりです。

    • ロック (増分、非増分、排他、共有など)

    • トランザクション

    • 多次元データ構造で表したグローバルの繰り返し処理

    • Java 配列または Java 文字列の自動解析による Caché $LIST の作成または更新

  • Java ダイナミック・オブジェクト API

    この API を使用すると、JNI、Light C++ バインディング、および Caché コールインに基づくプロセス内接続を介して、Caché に保存されているオブジェクトに Java から迅速にアクセスできます。この API は動的なので、Java アプリケーションのコンパイル時にアクセス対象のクラスを認識しておく必要がなく、そのための独立したコード作成手順が不要になります。

  • プロセス内 JDBC

    これにより、JDBC はダイナミック・オブジェクト API のように、Caché への非 TCP/IP 接続を使用できます。アプリケーションは JDBC を介して、Java ダイナミック・オブジェクト API の各メソッドと同じトランザクション・コンテキストで、SQL クエリおよびその他の SQL 文を実行できます。

迅速なアプリケーション開発

ダイナミック SQL

このリリースの Caché は、ダイナミック SQL 向けの新しいインタフェースをサポートしているので、実行時に SQL 文を定義して実行できます。ダイナミック SQL の実装には、%SQL.StatementOpens in a new tab クラスおよび %SQL.StatementResultOpens in a new tab クラスを使用するようになりました。%SQL.StatementOpens in a new tab クラスでサポートしているメソッドは次のとおりです。

  • %New – 新しい statement オブジェクトをインスタンス化します。

  • %Prepare – SQL 文を作成します。これには、実行時のパラメータをサポートする SQL 文などがあります。

  • %Execute – 作成済み文を実行します。

ダイナミック SQL 文を実行すると、%SQL.StatementResultOpens in a new tab クラスのインスタンスである結果オブジェクトが作成されます。%SQL.StatementResultOpens in a new tab には、実行した SQL 文に応じて、単なるデータ、単一の結果セット、または複数の結果セットを保持できます。このクラスには、結果セットの繰り返し処理、エラー処理などの機能があります。また、文のメタデータの検査、表示用のデータ形式の操作、および関連するその他の操作などの機能も備えています。

ダイナミック SQL の詳細は、"ダイナミック SQL の使用法" の章を参照してください。

パフォーマンスとスケーラビリティ

ECP のスケーラビリティの向上

これまでのバージョンでは、ディスク入出力を伴う同期要求 (Set、Kill、$INCREMENT など) が ECP アプリケーション・サーバの要求バッファにあると、そのバッファ内の後続する要求は、このディスク入出力が完了するまで待機していました。今回のバージョンでは、このディスク入出力の完了処理と並行して、要求バッファ内のこの同期要求以降にある読み取り命令 (または取得命令) のうち、処理可能なものをデータベース・サーバの ECP サーバ・プロセス・デーモンが引き続き処理するようになりました。これにより、アプリケーション・サーバの応答が速くなっています。

信頼性、可用性、保守性、監視

DataCheck

DataCheck 機能では、2 つのシステムにあるデータの状態を比較し、それらのデータ間の一貫性を判断するメカニズムを提供します。このメカニズムでは、それぞれのシステムにあるデータが移行中である可能性を考慮し、互いの状態が一致しない範囲を再確認する機能を備えています。この機能の主な用途として、シャドウイングのソースと宛先の一貫性の確認が挙げられます。

シャドウイングでの圧縮

Caché バージョン 2010.1 では、プライマリからシャドウに送信するジャーナル・データを圧縮する機能を導入しています。ソース (プライマリ) のジャーナル・ブロックをソース側で圧縮し、レシーバ (シャドウ) に送信します。これを受信したレシーバでは、圧縮を解除した上でソースのジャーナル・ファイルのシャドウ・コピーとして保存します。

ECP の応答性のメトリック

良好なパフォーマンスをアプリケーション・サーバで実現するには、データ・サーバの応答を速くすることが重要になります。応答時間の測定を可能にするために、新しいプロパティとして ResponseTimeSYS.Stats.ECPAppSvrOpens in a new tab クラスに追加されています。このプロパティを使用すると、アプリケーション・サーバが現在接続しているデータ・サーバの応答性を測定できます。複数のデータ・サーバに接続している場合は、すべてのデータ・サーバ接続の合計応答時間が得られます。平均の応答時間を計算するには、ResponseConn に保存されている接続数を使用します。

セキュリティ

個別の代行認証と代行承認

このリリースでは、アプリケーションで代行認証メカニズムを使用することにより、Kerberos 認証と OS 認証で別々のサード・パーティ・テクノロジを使用できるようになりました。これにより、例えば、ユーザのロール定義には LDAP (Lightweight Directory Access Protocol) を使用し、ユーザの認証には Kerberos を使用するといったことが可能です。

ドキュメント

$ZUTIL ドキュメントの削除

このリリースでは、ドキュメント化されている $ZUTIL 関数のそれぞれと同じ情報と機能を持つクラス・コンポーネント (メソッドやプロパティ) が用意されています。これは、Caché アプリケーションで使用する多彩な言語で利用できるシステム・サービスに、より現代的なインタフェースを提供することを目的としています。

この移行に伴い、ObjectScript のリファレンス資料から $ZUTIL 関数のドキュメントが削除されました。現在、$ZUTIL 関数のドキュメントは、分離したドキュメントとして旧ドキュメント・アーカイブに収められています。このドキュメントが今後更新される予定はありません。

アプリケーションでは、引き続き $ZUTIL 関数を使用できます。ただし、これまで $ZUTIL 関数を追加することで対応してきた機能面の更新は、今後はすべて、クラスのパラダイムを使用して行われます。

この新しい方法を採用するようにアプリケーションを変換することをお勧めします。この移行に役立つように、このリリースの変換チェックリストに $ZUTIL 関数の識別子と新しい等価機能を示したテーブルがあります。この情報は、ObjectScript のリファレンスにもしばらくの間、同内容で掲載されます。

Note:

現在、システム変数 ($NAMESPACE$DEVICE) で実現されている $ZUTIL の機能もあります。また、DDP と DCP のサポート廃止によって影響を受ける $ZUTIL 関数については、この情報では触れていません。

PDF ページ・サイズの変更

PDF 形式のドキュメントのページ・サイズがこのバージョンで変更されました。これまでは、高さ 9 インチ、幅 7 インチのページ・サイズを前提としてきました。今後は、高さ 11 インチ、幅 8.25 インチのページ・サイズとなります。余白もわずかに少なくなり、0.75 インチとなります。

この新しい形式により、これまでよりも大きなテーブル、図、プログラム・コードなどの掲載が可能になります。この新しい形式は、A4 サイズと U.S. レター・サイズの両方に合わせたもので、用紙を綴じるときにその縁を切り落とす必要がないので、紙資源の浪費を防止できます。

計画に従った変更

データベース・エクステントの非推奨

データベース・エクステントの採用は、ファイル・サイズに対する厳しい制限の対応策として初期のリリースで導入されたものです。当時のデータベースは、個々のファイルに対するサイズの制限を簡単に超えていました。データベース・エクステントを使用することにより、複数の物理ファイルにまたがる論理データベースが実現できます。

しかし、基礎となるテクノロジでは、この制限が無意味になっています。つまり、オペレーティング・システム、高度なファイル・システム、およびボリューム・マネージャにより、現在はきわめて大きなファイルを扱うことができます。 データベース・エクステントは過去の遺物となっていました。 システム管理を簡素化するため、このリリースからデータベース・エクステントはサポート対象外となります。

Caché、Ensemble、HealthShare、および TrakCare の今後のバージョンでは、データベース・エクステントはサポートされなくなります。 なお、データベース・エクステントを適切なファイルに集約するツールの提供を予定しています。

DCP、DDP、および LAT の非推奨

ECP (Enterprise Cache Protocol) は 2002 年に導入されました。 それ以来、ほとんどのお客様が ECP を採用してスケールアウト・アーキテクチャを展開してきました。 ネットワーク・データベースで使用されていた初期のテクノロジである DCP と DDP は急速に使用されなくなり、現在では Caché と初期の M テクノロジとのデータ共有がほとんど唯一の用途となっています。

このような状況から、2010 年後半の Caché と Ensemble のリリースより、DCP と DDP をサポート対象外とする予定です。 Windows での LAT のサポートも同時期に廃止されます。

Caché 2010.1 アップグレードのチェックリスト

目的

このセクションでは、Caché 2010.1 の機能のうち、今回のバージョンで変更されたために、既存のシステムの管理、運用、または開発の作業に影響を及ぼすものを取り上げます。

前回リリースよりも前のリリースからアプリケーションをアップグレードする場合は、その中間に存在するリリースのアップグレード・チェックリストにも目を通すことを強くお勧めします。このドキュメントでは、2009.1 と 2010.1 の違いのみを取り上げています。

このドキュメントの冒頭に記載したアップグレードの説明は、このバージョンに適用されます。

管理者

このセクションでは、以前のバージョンの Caché の管理作業を熟知しているユーザを対象に、バージョン 2010.1 の管理に関する新機能と変更点を説明します。ここでは、各項目について簡単に説明します。ほとんどの場合は、ドキュメントの別の箇所に詳しい説明があります。

バージョン間の相互運用性

前回リリースとの相互運用性を示すテーブルが、サポート対象プラットフォームのドキュメントに掲載されています。

管理ポータルの変更

今回のリリースでは、新機能に対応し、また、既存マテリアルを使用しやすく構成し直すため、管理ポータルに多数の変更が加えられています。主な変更点は、以下のとおりです。

操作上の変更

アプリケーションでジャーナリング状態の変更をするには管理者特権が必要

"no journaling" プロセス・フラグの設定やクリアをプログラマ・モードで DISABLE^%SYS.NOJRN または ENABLE^%SYS.NOJRN を使用して行うには、%Admin_Manage:USE 特権が必要になりました。この特権がない場合、<PROTECT> エラーが生成されます。

ジャーナル管理にはジャーナル履歴のログ・ファイルが不可欠

このバージョン以降、ジャーナル・リストアの機能が向上し、ジャーナル履歴ログを介して処理対象のジャーナル・ファイルを検索するオプションが追加されました。この履歴ファイル journal.log は管理者のディレクトリに格納されており、ユーザが変更してはなりません。

Caution:

インターシステムズが提供するユーティリティ以外の手段で journal.log を変更しないでください。このルールを守らないと、Caché でこのファイルが壊れていると判断されることがあります。そうするとジャーナリングが無効になります。

journal.log が削除された場合は、Caché でジャーナル・ファイルを新規作成するときに journal.log が新規作成されますが、以前のジャーナル・ファイルに関する情報は失われます。

メモリ使用量の変更

このバージョンではオブジェクトに関連する最適化がいくつか導入されました。例えば、システム全体とプロセス別レベルの両方で追加のデータ要素がキャッシュされます。そのため、システムとプロセスの両方のメモリ使用率に関して、目に見える影響が現れるようになります。

システム全体のルーチン・バッファ

このバージョンの最適化では、これまでより多くのルーチン・バッファを使用できるようにする必要があります。そのため、以下の点を考慮する必要があります。

  • 既定のルーチン・バッファ・プールが有効な場合、2010.1 Caché のインストールでは、システム全体でさらに 8 MB が消費されます。

  • ただし、カスタムのルーチン・バッファ・プールが使用されている場合 (例えば、17 MB より大きなプール)、共有メモリ領域のうちでルーチン・バッファに追加で割り当てられる量は、以下のようにルーチン・バッファの使用量/使用率によって異なります。

    • 割り当て量を大まかに見積もっておく必要のある場合は、現在の割り当ての約 20 ~ 30% 分だけルーチン・バッファ・プールを増やします。例えば、現在の割り当てが 50 MB であれば、60 ~ 65 MB に増やします。

    • 正確な見積もりが必要な場合は、システム・ルーチン・バッファの現在の使用率を見直す必要があります。そのためには、^GLOSTAT ユーティリティを実行して "キャッシュされていないルーチン" 統計を監視します。目標はこの値を最小化することであり、目標を達成するためには、ルーチン・バッファ・プールのサイズを大きくします。

ルーチンのプロセス別キャッシング

2010.1 では、パフォーマンスを最適化するために、従来より多くのクラスとクラス情報がプロセスごとにキャッシュされます。そのため、プロセスあたりで必要なメモリ フットプリントが 10 ~ 30 KB 増える場合があります。

システム全体でのクラス記述子のキャッシング

2010.1 では、共有クラス記述子がキャッシュされます。このメモリは、一般的なメモリ・ヒープ (gmheap) から割り当てられます。そのため、以下の点を考慮する必要があります。

  • 2010.1 では、gmheap の既定値は 3200 KB から 6400 KB に増やされました。これは、システム全体でのクラス記述子のキャッシングに起因するメモリ使用量の増加に対応するためです。このために占有されるのは gmheap のうち 1 ~ 1.5 MB です。占有される量は、使用されるクラスおよびオブジェクトの数によって異なります。

  • オブジェクト・ベースのアプリケーションに gmheap の既定以外の値が使用される場合

    • 構成された gmheap が既定の 10% 以内 (つまり 2880 ~ 3520 KB) の場合は、インスタンスがアップグレードされると gmheap が自動的に 1600 KB 増えます。

    • 構成された gmheap が上記の範囲外であると、cconsole.log に警告が記録され、gmheap の値を手動で増やす必要があることが示されます。増加分を大まかに見積もっておくだけで十分な場合は、1600 KB 増やすことをお勧めします。詳細に見積もる必要がある場合は、cstat を利用すると、システム統計を収集してより正確な見積もりを得ることができます。追加のガイダンスおよび情報は、インターシステムズのサポート窓口Opens in a new tabにお問い合わせください。

アップグレード時における gmheap の既定値の増加

このバージョンの Caché では、システムのアップグレード時に、gmheap が最小値まで増やされます。この最小値は、HP 以外のすべてのプラットフォームでは 4800 KB であり、HP プラットフォームでは 9600 KB です。

  • gmheap のサイズが既定値を下回っている場合は、アップグレードのインストール・プロセスで既定値まで増やされます。

  • gmheap のサイズが既定値を上回っている場合は、アップグレード時にメッセージが cconsole.log に書き込まれ、1600 KB 増やすように通知されます。

CacheProvider へのライセンスの追加

今回のバージョンでは、ODBC と DotNet 間でライセンスの使用法の整合性を維持するために、クライアント・ライセンスが標準化されました。

XML へのクラスのエクスポート時における生成済みクラスの削除

クラスを XML 形式にエクスポートする場合、Caché では、エクスポート/コンパイル・リストに存在する他のクラスによって生成されたクラスがすべて削除されるようになりました。この別の項目を生成するクラスをコンパイルすると、削除されたクラスが再作成されるためです。多くの場合、これらの生成済みクラスは SQL プロジェクション用のクラスなどであり、これらも配置済みとしてマークされています。この変更以前は、コレクション・プロパティを持つ永続クラスを含むパッケージをエクスポートしようとすると、配置済みクラスがエクスポートできないことを示すエラー・メッセージが表示されていました。今回のリリース以降、この配置済みクラスはエクスポート・リストから自動的に削除されるため、エラーは報告されなくなります。

切り捨て時におけるグローバル名のエラー・チェック

グローバル名の長さが 31 文字を超える場合、すべての処理でグローバル名が 31 文字に切り捨てられます。 これにより、グローバル名の最後の文字が、最後の文字としては無効なピリオドになる可能性があります。 以前のリリースでは、この状態が検出されず、グローバル処理または LOCK 処理でこの無効なグローバル名が使用されたため、エラーが発生していました。今回のバージョンでは、長い名前が切り捨てられる際に <SYNTAX> エラーが返されます。

以前のバージョンの動作をリストアするには、Config.MiscellaneousOpens in a new tab クラスの GlobalNameTruncated プロパティを設定します。

SNMP および WMI のカウンタの変更

今回のバージョンでは、別途有効化する必要のあったメトリック・カウンタのクラスを不要にし、常に有効でシステム・コードにより緊密に統合されるカウンタを代わりに使用します。これにより、監視に SNMP または WMI のいずれかを使用するオーバーヘッドが著しく削減されます。Lines カウンタは Commands に置き換えられ、GlobalSetsGlobalUpdates となり、GlobalKills は廃止されました。これらの変更は、MIB および MOF で記述されています。

Note:

^PATROL は、新しいカウンタを使用するように変更されました。従来の動作および変数名を利用可能にするには、$$Light^Patrol(0) を有効にします。

一時ファイル管理への変更

このリリースから、Caché での一時ファイルの取り扱いが改善され、これらのファイルを起動時に削除する必要はなくなりました。したがって、Caché の起動では、今後、Temp ディレクトリからファイルが削除されることはありません。

Important:

今後、起動により、Temp ディレクトリにあるユーザ・ファイルが削除されることはありません。アプリケーションが一時ファイルの格納にこのディレクトリを使用している場合、作成したファイルをシステムの再起動時に管理する責任はこのアプリケーションにあります。

プラットフォーム固有の項目

このセクションでは、特定のプラットフォームに関係する項目について説明します。

OpenVMS での $ZF 呼び出しに必要な特権の変更

OpenVMS システムでの $ZF 呼び出しが、本来の意図よりも多くの特権によって実行されるエラーが修正されました。これによりアプリケーションが影響を受ける場合は、インターシステムズのサポート窓口Opens in a new tabまでお問い合わせください。

Windows 以外のプラットフォームに対する Caché レジストリのアクセス許可の明示的な設定

Caché レジストリ・ファイル (cache.reg) のアクセス許可が、インストール・プロセスで明示的に設定されるようになりました。このファイルの所有者は root になるため、ファイルに書き込めるのは root のみとなります。

一部の 64 ビット・プラットフォームでの既定のリソース統計収集の無効化

今回のバージョン以降、Itanium、POWERPC、および x64 プラットフォーム上のシステムの既定では、リソース使用量の統計収集は無効になります。統計収集の有効化および無効化は、Config.MiscellaneousOpens in a new tab クラスで実行します。CollectResourceStats プロパティを True に設定すると、統計収集が有効になり、False に設定すると無効になります。

Microsoft Windows の LAT 構成

cache.cpf ファイルの [LAT] セクションは、このバージョンの Caché では不完全です。システム管理ポータルでは、ServiceName、ServiceDescription、および ServiceRating の通知サービスが構成されません。そのため、LAT デーモン (lat.exe) は、cache.cpf 構成ファイルからではなく、インストール・ディレクトリの lat.ini ファイルから起動パラメータを読み取るようになりました。LAT 機能を使用している場合、既存の cache.cpf ファイルの [LAT] セクションを新しい lat.ini ファイルにコピーするか、テキスト・エディタを使用してその情報を作成する必要があります。

サンプルの [LAT] セクションは、以下のとおりです。通知する LAT サービスは、最大 8 つまで指定できます。このサンプルは以下の 2 つの部分から構成されています。各サービスは、ServiceName、ServiceDescription、および ServiceRating で構成されます。

[LAT] 
NodeName= 
MessageRetransmitLimit=8 
HostMulticastTimer=60 
NodeGroups=0 
UserGroup
s=0 
ServiceName_1=CACHE 
ServiceDescription_1=Cache LAT service 
ServiceRating_1=1 
ServiceName_2=Cache2 
ServiceDescription_2=Second LAT device 
ServiceRating_2=1
Note:

LAT サービスは、Caché バージョン 2010.2 では非推奨になる予定です。

開発者

このセクションでは、以前のバージョンの Caché 上で実行されているアプリケーションの設計者、開発者、および保守担当者に関係する情報を示します。

ここでは、各項目について簡単に説明します。ほとんどの場合は、ドキュメントの別の箇所に詳しい説明があります。

一般的な操作上の変更

インタラクティブな呼び出しおよびコマンドの呼び出しにおける SHELL 環境変数の使用

これまで、インタラクティブな UNIX™ シェルを $zf(-1) (または、“!” または “$”) によって呼び出す場合、シェルの起動には SHELL 変数が定義されていればその設定が使用され、定義されていなければ sh が使用されていました。一方、コマンド名が指定された場合は、常に /bin/sh が使用されていました。

今回のリリースでは、どちらの場合も SHELL 環境変数がチェックされるようになり、変数が定義されていれば使用されます。これにより、/bin/sh の使用に依存する UNIX™ コマンドが影響を受ける場合があります。

ライセンス表示の変更

ライセンス表示関数の出力では、場合によっては複数のフィールドが (列間にスペースを入れないで) 結合されてしまうことがありました。このような出力がファイルに送信され、プログラムがその解析を試みた場合、フィールド間の境界が識別できないためにプログラムが失敗することがありました。

今回のリリースでは、このような場合にフィールド出力は次の行に改行されますが、新しい種類の解析エラーが発生する可能性があります。ライセンス・データを取得および処理する方法として、%SYSTEM.LicenseOpens in a new tab クラスのクエリを使用することをお勧めします。

$SYSTEM.License.Login でのクライアント IP アドレスの追加

##class(%System.License).Login(UserId) を呼び出すアプリケーションでは、ライセンス ID にクライアント IP アドレスが追加されるようになります。 これは、以前にユーザを CSP セッションにログインさせ、ユーザ名ベースのライセンスを有効にして、他のタイプの接続でも $USERNAME がライセンス ID として使用されるようにしていた場合、ライセンスのカウントに影響します。 CSP ログインのライセンス識別子は、他の接続のライセンス識別子と同じではなくなります。

また、$System.License.Login() は、今回のバージョンの Caché で呼び出されると、以前のバージョンの場合とは異なるライセンス識別子を生成します。 これにより、2 つのライセンス・ユニットが使用されることになります。

カーネル・エラー・コードをより正確にするための変更

引数のスタック・スペースがなくなると、場合によってはその状態が <STORE> エラー、<STACK> エラー、または <ASTACK> エラーとして報告されていました。 今回のリリースでは、引数のスタック・スペース不足が検出された場合にはその状態が常に <ASTACK> として報告され、ヒープ・ストレージがなくなった場合には <STORE> エラーが生成されるようになりました。エラー コード <STACK> は、今後使用されません。

Note:

引数スタックおよび文字列スタックは、同じメモリ・ブロックを共有します。 プログラムが一方のスタックで過度の容量を使用している場合、もう一方のスタックから領域を割り当てるときにエラーが検出される可能性があります。 そのため、これらのスタックのいずれかが大量に消費されている場合、<ASTACK> および <STRINGSTACK> の両方がエラーになる可能性があります。

ObjectScript の変更

$ZOBJ<xxx> 関数の置換

$ZOBJ<xxx> 関数が、標準の Caché 関数に置き換えられました。$ZOBJ<xxx> 関数はアプリケーションで引き続き使用できますが、ドキュメントには記載されません。代替関数の呼び出しシーケンスは以前と同じままであるため、アプリケーションの使用法の更新にはテキスト置換のみが必要です。代替関数を以下のテーブルに示します。

以前の関数 新しい (代替) 関数
$ZOBJCLASSMETHOD $CLASSMETHOD
$ZOBJMETHOD $METHOD
$ZOBJPROPERTY $PROPERTY
$ZOBJCLASS $CLASSNAME
Note:

$ZOBJCLASS 関数は、以前のバージョンでは記載されていませんでした。

廃止および非推奨となった機能の説明の削除

今回のバージョンの Caché では、従来の DDP および DCP ネットワーキング機能のドキュメントが削除されました。これらの機能自体は非推奨に分類されており、将来のリリースで削除される予定ですが、代替機能は提供されていません。また、本来の意図どおりに機能していないその他いくつかの機能についても同様です。以下に、同等の代替機能が提供されない機能のリストを示します。

$ZUTIL 関数 説明
67, 1, … 指定プロセスのアクティブ状態を返し、リセットします。
68, 6, … 現在のプロセスに、高信頼性 SET ネットワーキング・モードを有効または無効にします。
68, 27, … 現在のプロセスに、ネットワーク・ハードニングの設定を有効または無効にします。
68, 28, … 現在のプロセスに、ルート・レベルのグローバル・ノードの削除を制限または許可します。
68, 55, … 現在のプロセスの TCP デバイスの $X/$Y 動作を選択します。
69, 6, … システム全体に高信頼性 SET ネットワーキング・モードを設定します。
69, 13, … 非同期 SET/KILL エラーのログを設定します。
69, 14, … コンソールに、非同期エラーのログを設定します。
69, 19, … システム全体に DDP パスワード・セキュリティを設定します。
69, 20, … DSM-DDP を使用して、NULL 添え字を含むグローバル・ノードを転送します。
69, 27, … システム全体のネットワーク・ハードニングの設定を有効または無効にします。
69, 28, … システム全体でルート・レベルの (添え字のない) グローバル・ノード削除を制御します。
69, 31, … DCP 障害後のシステム全体のネットワーク・ロック処理を設定します。
69, 35, … システム全体でドメインスペース接続のサイレント再試行を設定します。
69, 55, … システム全体の TCP デバイスの $X/$Y 動作を選択します。
69, 67, … システム全体でスタックおよびレジスタ使用状況のメッセージ・ボックスを抑制または表示します。
90, 4, … 指定されたネームスペースで起動します (UNIX™/OpenVMS)。
100 現在の Windows オペレーティング・システムを指定します。
113 ルーチンとディレクトリ・ブロックを再利用します。
130, … ドメイン ID またはインデックスを設定し、返します。
133, … メトリック・カウンタの設定を管理します。
ドキュメントからの $ZUTIL 関数の削除

今回のバージョンでは、Objectscript の $ZUTIL 関数がドキュメントに記載されなくなりました。これらの関数は以前のリリースと同じようにアプリケーションで引き続き使用できますが、これらの関数で実行される動作を別の方法で実行することも可能になりました。ここでは、置き換えられた関数、それらの説明、および同じ目的を達成するための新しい方法をリストに示します。これらの代替機能を使用するように、アプリケーションを移行することをお勧めします。

Note:

現在の置換リストは "Caché Objectscript リファレンス" にあります。

プロセスおよびシステムに関連しない関数
コード 説明 クラス プロパティ/メソッド

4, …

Cache プロセスを終了します。

SYS.ProcessOpens in a new tab

Terminate()

5, …

現在のネームスペースを返したり、または他のネームスペースへ切り替えたりします。

<Special variable>

$NAMESPACE

9, …

指定デバイスにメッセージを送信します。

%Library.DeviceOpens in a new tab

Broadcast()

12, …

ファイル名またはディレクトリ名をキャノニック形式に変換します。

%Library.FileOpens in a new tab

NormalizeDirectory()

15, …

RMS ファイル名をキャノニック形式に変換します。

%Library.FileOpens in a new tab

NormalizeFilename()

18, …

現在のプロセスで未定義変数の処理の方法を設定します。

%SYSTEM.ProcessOpens in a new tab

Undefined()

20, …

ルーチンのデータセットを含むネームスペースを指定します。

Config.MapRoutinesOpens in a new tab

RoutineSearchPath

21, …

プロセス・プライベート・グローバルの位置を返します。

%SYSTEM.ProcessOpens in a new tab

PrivateGlobalLocation()

21

すべてのプロセス・プライベート・グローバルを削除します。

%SYSTEM.ProcessOpens in a new tab

KillPrivateGlobals()

22, 0, …

改ページ制御コード、およびバックスペース制御コードのシーケンスを指定します。

%Library.DeviceOpens in a new tab

SetFFBS()

28, …

照合変換を実行します。

$SYSTEM.Util

Collation()

39, …

パーセント (%) ルーチンへの検索パスを指定します。

Config.MapRoutinesOpens in a new tab

PRoutineSearchPath()

49, …

データベースの情報を取得します。

SYS.DatabaseOpens in a new tab

<various class properties>

53

TCP デバイス名を子プロセスに渡します。

%SYSTEM.INetInfoOpens in a new tab

TCPName()

53, …

TCP 統計を返します。

%SYSTEM.INetInfoOpens in a new tab

TCPStats()

55, …

現在の言語モードを返したり、変更したりします。

SYS.ProcessOpens in a new tab

LanguageMode

56, 2

最後の ObjectScript エラーのソース・ファイルとコード行の位置を割り出します。

%SYSTEM.ProcessOpens in a new tab

ErrorLine

56, 6

シーケンシャル・ファイル・エラーのオペレーティング・システム・エラー・コードを返します。

%SYSTEM.ProcessOpens in a new tab

OSError()

62, …

コマンド行コードの構文チェックを実行します。

%Library.RoutineOpens in a new tab

CheckSyntax()

67, 0, …

指定プロセスのアクティブ状態を返します。

%SYS.ProcessQueryOpens in a new tab

IsGhost

67, 4, …

プロセス状態を返します。

%SYS.ProcessQueryOpens in a new tab

State

67, 5, …

指定プロセスのルーチン名を返します。

%SYS.ProcessQueryOpens in a new tab

Routine

67, 6, …

指定プロセスのネームスペース名を返します。

%SYS.ProcessQueryOpens in a new tab

NameSpace

67, 7, …

指定プロセスのデバイス名を返します。

%SYS.ProcessQueryOpens in a new tab

CurrentDevice

67, 8, …

指定プロセスで実行する行数を返します。

%SYS.ProcessQueryOpens in a new tab

LinesExecuted

67, 9, …

指定のプロセスで生成されたグローバル参照数を返します。

%SYS.ProcessQueryOpens in a new tab

GlobalReferences

67, 10, …

指定プロセスのジョブ・タイプを返します。

%SYS.ProcessQueryOpens in a new tab

JobType

67, 11, …

指定プロセスの所有者のユーザ名を返します。

%SYS.ProcessQueryOpens in a new tab

UserName

67, 12, …

クライアント・アプリケーションのシステム名を返します。

%SYS.ProcessQueryOpens in a new tab

ClientNodeName

67, 13, …

クライアント・アプリケーションで実行可能なファイル名を返します。

%SYS.ProcessQueryOpens in a new tab

ClientExecutableName

67, 14, …

以前は、クライアント・アプリケーションを実行しているオペレーティング・システムを返しました。現在は、CSP セッション ID を返します。

%SYS.ProcessQueryOpens in a new tab

CSPSessionID

67, 15, …

クライアント・アプリケーションの IP アドレスを返します。

%SYS.ProcessQueryOpens in a new tab

ClientIPAddress

71, …

現在のプロセスに対し、日付を固定値に設定します。

%SYSTEM.ProcessOpens in a new tab

FixedDate()

78, 21

オープン・トランザクションのジャーナル・ファイルを検索します。

%SYS.Journal.TransactionOpens in a new tab

SearchOpen()

78, 22, …

ジャーナリング情報を返します。

%SYS.Journal.FileOpens in a new tab

Info()

78, 23, …

ジャーナル・ファイルを削除します。

%SYS.Journal.FileOpens in a new tab

PurgeOne()

78, 28

ジャーナル・ディレクトリ・ブロック情報を返します。

%SYS.Journal.FileOpens in a new tab

DirectoryBlock()

78, 29

ジャーナル・バッファをフラッシュします。

%SYS.Journal.FileOpens in a new tab

FlushBuffer()

82, 12, …

入出力操作をリダイレクトします。

%Library.DeviceOpens in a new tab

ReDirectIO

86

構成ファイル・パス名と構成名を返します。

%SYS.SystemOpens in a new tab

CPFFileName()

90, 10, …

ネームスペースが定義されているかどうかをテストします。

Config.NamespacesOpens in a new tab

Exists()

94, …

指定プロセスにメッセージを送信します。

%SYSTEM.ProcessOpens in a new tab

Broadcast()

96, 3, …

ユーザ定義のコマンドのエラー番号を返します。

SYS.ProcessOpens in a new tab

ThrowError()

96, 4, …

入出力リダイレクトを反映する $TEST を設定します。

SYS.ProcessOpens in a new tab

IODollarTest()

96, 5, …

$DEVICE 特殊変数を設定します。

<Special variable>

$DEVICE

96, 9

呼び出しルーチン名を返します。

SYS.ProcessOpens in a new tab

CallingRoutine

96, 10

呼び出しルーチン・データベースを返します。

SYS.ProcessOpens in a new tab

CallingDatabase

96, 14

現在のデバイス・タイプを返します。

%Library.DeviceOpens in a new tab

GetType()

110

現在のオペレーティング・システムの名前を返します。

%SYS.SystemOpens in a new tab

GetNodeName()

114, …

イーサネット・アドレスを判別します。

%SYSTEM.INetInfoOpens in a new tab

EthernetAddress()

115, 11, …

ID 列に値を挿入できるかどうかを指定します。

Config.SQLOpens in a new tab

AllowRowIDUpdate

128, 1

デバッグ中に最後のシングル・ステップ箇所に戻ります。

%SYSTEM.ProcessOpens in a new tab

StepInfo()

132

最後に使用したデバイスを主入出力デバイスにします。

%Library.DeviceOpens in a new tab

ChangePrincipal()

140, 1, …

ファイル、ディレクトリおよびディスクの情報を返し、ファイル演算を実行します。

%Library.FileOpens in a new tab

(various)

140, 7, …

ファイル属性のビットマップを返します。

%Library.FileOpens in a new tab

Attributes()

147, …

ホスト・プラットフォームのパス名に含まれるスペースを処理します。

%Library.FileOpens in a new tab

NormalizeFilenameWithSpaces()

158, 0

現在インストールされているプリンタを表示します。

%Library.DeviceOpens in a new tab

InstalledPrinters()

168, …

現在の作業ディレクトリの位置を返したり、設定します。

%SYSTEM.ProcessOpens in a new tab

CurrentDirectory()

186, …

現在のプロセスに、プログラマ・プロンプトでの表示を設定します。

%SYSTEM.ProcessOpens in a new tab

TerminalPrompt()

188

秒の小数部を含むローカルな日付と時刻をシステム全体に返します。

<Function>

$NOW

189

TCP デバイスが切断されているかどうかを確認します。

%SYSTEM.INetInfoOpens in a new tab

Disconected()

193, …

協定世界時 (UTC) をローカルの日付と時刻に変換します (または、その逆の変換)。

<Function>

$ZDATETIME

プロセスおよびシステムに関連する関数
コード 説明 クラス プロパティ/メソッド

68,0

現在のプロセスで未定義変数の処理の方法を設定します。

%SYSTEM.ProcessOpens in a new tab

Undefined()

68, 1, …

現在のプロセスの NULL 添え字の使用を有効/無効にします。

%SYSTEM.ProcessOpens in a new tab

NullSubscripts()

68, 2, …

現在のプロセスに、シーケンシャル・ファイル OPEN モードを設定します。

%SYSTEM.ProcessOpens in a new tab

OpenMode()

68, 3, …

シーケンシャル・ファイルの自動作成オプションを現在のプロセスに設定します。

%SYSTEM.ProcessOpens in a new tab

FileMode()

68, 5, …

現在のプロセスで、引数のない BREAK コマンド処理を有効または無効にします。

%SYSTEM.ProcessOpens in a new tab

BreakMode()

68, 7, …

現在のプロセスに返されるグローバルからの拡張グローバル参照を保持、または削除します。

%SYSTEM.ProcessOpens in a new tab

RefInKind()

68, 11, …

現在のプロセスへの行呼び出しを有効または無効にします。

%SYSTEM.ProcessOpens in a new tab

LineRecall()

68, 15, …

現在のプロセスに対し、入出力デバイスの切断検知を有効または無効にします。

%SYSTEM.ProcessOpens in a new tab

DisconnectErr()

68, 21, …

現在のプロセスに同期コミット・モードを設定します。

%SYSTEM.ProcessOpens in a new tab

SynchCommit()

68, 22, …

現在のプロセスの $X が更新されたときの、エスケープ・シーケンスの処理を設定します。

%SYSTEM.ProcessOpens in a new tab

DX()

68, 26, …

現在のプロセスに、プログラマ・プロンプトでのネームスペース表示を設定します。

%SYSTEM.ProcessOpens in a new tab

TerminalPrompt()

68, 30, …

現在のプロセスに、エラー処理の振る舞いを設定します。

%SYSTEM.ProcessOpens in a new tab

PopError()

68, 32, …

現在のプロセスに、日付範囲と無効な日付の振る舞いを設定します。

%SYSTEM.ProcessOpens in a new tab

ZDateNull()

68, 34, …

非同期エラーが現在のプロセスに割り込むことができるかどうかを設定します。

%SYSTEM.ProcessOpens in a new tab

AsynchError()

68, 39, …

現在のプロセスでキャッシングを有効または無効にします。

%SYSTEM.ProcessOpens in a new tab

EnableCaching()

68, 40, …

現在のプロセスに、シーケンシャル・ファイルの EOF 処理を設定します。

%SYSTEM.ProcessOpens in a new tab

SetZEOF()

68, 42, …

現在のプロセスに $JOB 形式を設定します。

%SYSTEM.ProcessOpens in a new tab

NodeNameInPid()

68, 43, …

現在のプロセスに、グローバル・ベクトルの消去を設定します。

%SYSTEM.ProcessOpens in a new tab

OldZU5()

68, 45, …

現在のプロセスに、文字列から数値への変換での切り捨てモードを設定します。

%SYSTEM.ProcessOpens in a new tab

TruncateOverflow()

68, 51, …

ネームスペースを変更したときに、現在のプロセスのディレクトリを変更するかどうかを設定します。

%SYSTEM.ProcessOpens in a new tab

SwitchOSdir()

68, 60, …

現在のプロセスの非同期の Telnet 切断エラーの処理を設定します。

%SYSTEM.ProcessOpens in a new tab

AsyncDisconnectErr()

68, 63, …

現在のプロセスで、"e" の科学的記数法の記号としての使用を有効または無効にします。

%SYSTEM.ProcessOpens in a new tab

ScientificNotation()

68, 66, …

現在のプロセスの行末の Telnet NUL を抑制します。

%SYSTEM.ProcessOpens in a new tab

TelnetNUL()

68, 67, …

現在のプロセスのスタックおよびレジスタ使用状況のメッセージ・ボックスを抑制または表示します。

%SYSTEM.ProcessOpens in a new tab

ExceptionLog()

68, 70, …

INF 値および NAN 値を返す $DOUBLE を有効または無効にします。

%SYSTEM.ProcessOpens in a new tab

IEEEError()

68, 71, …

現在のプロセスに IP アドレス形式を設定します。

%SYSTEM.ProcessOpens in a new tab

IPFormat()

68, 72, …

未定義変数に対する MVBasic の処理方法を設定します。

%SYSTEM.ProcessOpens in a new tab

MVUndefined()

69, 0, …

システム全体に、未定義の変数に対する既定の処理方法を設定します。

Config.MiscellaneousOpens in a new tab

Undefined

69, 1, …

システム全体に、NULL 添え字モードの既定を設定します。

Config.MiscellaneousOpens in a new tab

NullSubscripts

69, 2, …

システム全体に適用する、シーケンシャル・ファイルを開くときの既定のモードを設定します。

Config.MiscellaneousOpens in a new tab

OpenMode

69, 3, …

システム全体にシーケンシャル・ファイルの自動作成を設定します。

Config.MiscellaneousOpens in a new tab

FileMode

69, 5, …

システム全体に引数のない BREAK 処理を有効にします。

Config.MiscellaneousOpens in a new tab

BreakMode

69, 7, …

システム全体でグローバルからの拡張グローバル参照を保持、または削除します。

Config.MiscellaneousOpens in a new tab

RefInKind

69, 8, …

システム全体に ZA と ZD ロック・モードを設定します。

Config.MiscellaneousOpens in a new tab

ZaMode

69, 10, …

ジャーナルが一杯のときのシステム動作を設定します。

Config.JournalOpens in a new tab

FreezeOnError

69, 11, …

システム全体に行呼び出しモードを設定します。

Config.MiscellaneousOpens in a new tab

LineRecall

69, 13, …

非同期 SET/KILL エラーのログを設定します。

Config.MiscellaneousOpens in a new tab

NetErrToLog

69, 15, …

システム全体の入出力デバイスの切断検知を設定します。

Config.MiscellaneousOpens in a new tab

DisconnectErr

69, 21, …

システム全体に同期コミット・モードを設定します。

Config.MiscellaneousOpens in a new tab

SynchCommit

69, 22, …

システム全体にエスケープ・シーケンスの $X 更新モードを設定します。

Config.MiscellaneousOpens in a new tab

DX

69, 24, …

システム全体に適用される、OpenVMS の STOP/ID に対する $ZF のプロセス削除の動作を設定します。

Config.MiscellaneousOpens in a new tab

StopID

69, 26, …

システム全体に、プログラマ・プロンプトのネームスペース表示を設定します。

Config.MiscellaneousOpens in a new tab

TerminalPrompt

69, 30, …

システム全体にエラー処理の動作を設定します。

Config.MiscellaneousOpens in a new tab

PopError

69, 32, …

システム全体で日付範囲と無効な日付の動作を設定します。

Config.MiscellaneousOpens in a new tab

ZDateNull

69, 34, …

システム全体に、非同期エラーがプロセスへ割り込むことができる機能を設定します。

Config.MiscellaneousOpens in a new tab

AsynchError

69, 35, …

システム全体でドメインスペース接続のサイレント再試行を設定します。

   

69, 37, …

システム全体に物理的なカーソル・モードを設定します。

Config.NLS.LocalesOpens in a new tab

PhysicalCursor

69, 39, …

システム全体に今後のプロセス用キャッシュを設定します。

Config.MiscellaneousOpens in a new tab

EnableCaching

69, 40, …

システム全体にシーケンシャル・ファイルの EOF (ファイルの終わり) 処理を設定します。

Config.MiscellaneousOpens in a new tab

SetZEOF

69, 42, …

システム全体に既定の $JOB 形式を設定します。

Config.MiscellaneousOpens in a new tab

NodeNameInPid

69, 43, …

システム全体のグローバル・ベクトル消去を設定します。

Config.MiscellaneousOpens in a new tab

OldZU5

69, 44, …

システム全体に Telnet 転送用の Nagle アルゴリズムの使用を設定します。

Config.MiscellaneousOpens in a new tab

UseNagleAlgorithm

69, 45, …

システム全体で、文字列から数値への変換中に数値を切り捨てます。

Config.MiscellaneousOpens in a new tab

TruncateOverflow

69, 49, …

システム全体にトランザクション・ロールバックのログを設定します。

Config.MiscellaneousOpens in a new tab

LogRollback

69, 51, …

システム全体に、ネームスペースの既定のディレクトリ割り当ての動作を設定します。

Config.MiscellaneousOpens in a new tab

SwitchOSdir

69, 60, …

システム全体に非同期の Telnet 切断エラーの処理を設定します。

Config.MiscellaneousOpens in a new tab

AsyncDisconnectErr

69, 63, …

小文字 “e” の科学的記数法の記号としての使用をシステム全体で有効または無効にします。

Config.MiscellaneousOpens in a new tab

ScientificNotation

69, 66, …

システム全体で行末の Telnet NUL を抑制します。

Config.MiscellaneousOpens in a new tab

TelnetNUL

69, 68, …

システム全体でジャーナル・ファイルの暗号化を有効または無効にします。

Security.SystemOpens in a new tab

DBEncJournal

69, 69, …

システム全体で長い文字列の使用を有効または無効にします。

Config.MiscellaneousOpens in a new tab

EnableLongStrings

69, 70, …

システム全体で INF 値および NAN 値を返す $DOUBLE を有効または無効にします。

Config.MiscellaneousOpens in a new tab

IEEEError

69, 71, …

システム全体に IP アドレス形式を設定します。

Config.MiscellaneousOpens in a new tab

IPV6

69, 72, …

システム全体での未定義変数に対する MVBasic の処理方法を設定します。

Config.MiscellaneousOpens in a new tab

MVDefined

69, 73, …

グローバル名の互換性チェックを設定します。

Config.MiscellaneousOpens in a new tab

GlobalNameTruncated

$ZDATEH および $ZDATETIMEH 形式 4 の解析

バージョン 2008.1 では、$ZDATEH および $ZDATETIMEH 関数が、ヨーロッパの日付形式だけでなく、すべての明確な日付形式を受け入れるように誤って変更されました。 今回のバージョンでは適切な動作にリストアされたため、$ZDATEH(date,4) および $ZDATETIMEH(datetime,4) では、ヨーロッパの日付形式を使用した文字列のみ受け入れます。

バージョン 2008.1 以降の動作を想定しているアプリケーション向けには、ヨーロッパの日付順序 (DD/MM/YYYY) を使用する日付形式コード 15 が新たに追加されていますが、これはその他すべての明確な形式の日付入力も受け入れます。

$INUMBER および $FNUMBER を使用した数値形式の解析がロケールに依存しない

2008.2 より前のバージョンでは、$INUMBER および $FNUMBER 関数にはヨーロッパの数値形式 (小数点には “,”、グループ・セパレータには “.”、マイナス記号には “-”、プラス記号には “+”) を使用していました。バージョン 2008.2 では、これらの関数は、解析でシステムの既定のロケールを使用してマイナス記号およびプラス記号を決定するように変更されました。これは通常、“-” および “+” になりますが、必ずそうなるとは限りません。

今回のバージョンでは、2008.2 より前の動作に戻されました。そのため、小数点には “,”、グループ・セパレータには “.”、マイナス記号には “-”、プラス記号には “+” が常に使用されます。

不正な $HOROLOG 日時の検出の改善

$HOROLOG 文字列 (または $ZTIMESTAMP 文字列) を受け取る一部のルーチンでは、入力文字列が完全には検証されません。 不正にフォーマットされた文字列があると、その動作は未定義になります。 未定義の動作は、Cache のバージョンによって異なることもあります。

正式な形式の $HOROLOG 文字列 (または $ZTIMESTAMP 文字列) は、<date> の直後にコンマ (,) が続き、その直後に <time> が続きます。 必要に応じて、コンマと <time> は共に省略できます。これは暗黙的に 0:00:00 (1 日の開始時) または特定の時刻を参照しない日付と見なされます。

<date> の部分は、数値のみで構成されます。 <date> には、小数部分も指数部分もその他の数値以外の文字も含めることはできません。

<time> の部分は数値の列ですが、必要に応じて小数点 (.) と小数点以下の数値を続けることができます。 <time> には指数を含めることはできません。

ルーチンが、<time> 文字列のみ (前に <date> やコンマがない) を受け取る場合、先頭にマイナス記号 (-) を付けて負の期間を表すことができます。

$INCREMENT の変更

従来は、大きな数値が格納された変数で $INCREMENT() を実行すると、元の値に比べて増分値が非常に小さい場合、変数の値は変化しませんでした。そのため、$INCREMENT() を続けて呼び出しても、同じ値が返されました (この値は誤りです)。今回のバージョン以降、このような場合、インクリメント処理が不正な結果を返すのではなく、<MAXINCREMENT> エラーがスローされるようになりました。

ルーチンの変更

KillAllObjects は何も実行しない

パーティションからすべてのオブジェクト・メモリを削除するために使用されていた KillAllObjects^%apiOBJ() 関数が、空命令に変更されました。アプリケーションでオブジェクトを削除するには、オブジェクトが範囲外になるようにします。

ルーチン・コンパイラの変更

ルーチン・コンパイラにおける生成済みコードのスキップ

ルーチン・コンパイラ ^%RCOMPIL は、今後、生成済みコードをコンパイルしません。これまでは、*.mac のコンパイルを試行した際に、クラスのコンパイルによって生成された MAC コードが存在しても、その生成済みクラスの MAC コードがコンパイルされていました。その結果、そのクラス内のメソッドが実行できなくなっていました。今回のリリースでは、生成済みとしてマークされている他のコードもコンパイルされなくなります。これには、MAC コードおよびクラスから得られる .INT コードや、クエリ・キャッシュ・コードなどが挙げられます。

Note:

"生成済み" ルーチンをコンパイルすることは可能ですが、その生成済みルーチンの名前が、コンパイル対象ルーチンの 1 つとして正しく指定されている場合のみです。

クラスの変更

ネームスペースの変更と OREF

クラス・インスタンスに対して OREF を作成してから、アプリケーションを実行するネームスペースを変更するとします。以前のバージョンでは、2 番目のネームスペースでこの OREF のメソッドにアクセスしようとすると、実行するコードが見つからないために、通常 <NOROUTINE> エラーが発生していました。Caché では、OREF が作成されたネームスペースでなく現在のネームスペースでコードを探していました。

このバージョン以降、アプリケーションが OREF を作成してそのネームスペースを変更することができます。アプリケーションがこの OREF を使用しようとするときには、元のネームスペースからコードを実行します。ただし、実行中にグローバル・データまたはロックを参照した場合、その参照は現在のネームスペースを基準としたものになります。つまり、実行コードによって %Save() が実行された場合、データの保存先は、コードを実行しているネームスペースではなく現在のネームスペースになります。同様に、$GET(^Global) を実行するメソッドは、元のネームスペースではなくこのネームスペースでグローバル・データを検索します。

アプリケーションでネームスペースが変更されると、データの可視性が変更されます。ネームスペースをまたいで OREF にアクセスすると、元のネームスペースから見えるグローバル・データは保持されません。ネームスペース A でオブジェクトが開かれ、^MyGlobal からデータがロードされるとき、^MyGlobal はネームスペース A 内にあると予測されます。ネームスペース A から OREF のあるネームスペース B に変わると、その OREF から ^MyGlobal にアクセスしたときに、ネームスペース B 内のデータが検索されます。

Caution:

Caché では、この状態をチェックすることはできません。他のネームスペースで作成されたオブジェクト参照を使用すると、実行時に検出できないデータの喪失または破損が発生する場合があります。

クラスの削除

2009.1 バージョンに存在していた以下のクラスは、今回のバージョンで除外されています。

  • パッケージ %BI – SOAP

  • %CPT パッケージ – RegenerateImpl、RegenerateSource

  • %CSP.UI.System パッケージ – MappingsTablePane、MappingsTitlePane、MenuTree

  • %Compiler パッケージ – JavaScript

  • %ISQL パッケージ – SP

  • %Net パッケージ – Event

  • %TSQL パッケージ – SP、SPContext、SimpleStreamLexer

  • %XSQL パッケージ – CacheMetadata、Convert、Debug、DelimitedReader、Settings、Transaction

  • %cspapp.exp パッケージ – utilexpglobaledit、utilexproutineinfo、utilsysdbglobalinfo

  • %cspapp.mgr パッケージ – utilconfiggblmappings、utilconfigprjmappings、utilconfigrtnmappings、utilsysaccess

クラスの予約

以下のクラスは、2010.1 の初期バージョンや Caché の以前のバージョンで公開されていましたが、インターシステムズ専用に予約されています。

  • パッケージ %TSQL – FileBuffer、LineBuffer、ResultSet、StreamLineBuffer、StreamLineBufferWF、SysFunc、Transformer

  • パッケージ %TSQL.sys – cacheMsgXRef、messages、messagesXRef、snf

  • パッケージ %XSQL.DS – Call、ContextStatement、Cursor、DML、IResultSet、Statement、TSQL、TempTable、spexecutesql

  • パッケージ %XSQL.DSI – Call、Cursor、DeferredStatement、GlobalPrivateTable、IteratorFunction、JPAQuery、Statement、TSQL、TempTable、spexecutesql

  • パッケージ %XSQL – Compile、DLLInterfaceUtil、Dictionary、Exception、Format、Reporting、StatementBatch

  • パッケージ %XSQL.Informix – FunctionQuery

  • パッケージ %XSQL.System – CacheMessageXRef、Message、MessageXRef

  • パッケージ SYS.WSMon – Client、EventSink、Service、wsDatabase、wsEvent、wsResource、wsSystem

  • パッケージ SYS.WSMon.wse – Delivery、EndpointReference、Identifier、MyRefProp、ReferenceProperties、Renew、RenewResponse、Subscribe、SubscribeResponse、Unsubscribe、UnsubscribeResponse

  • パッケージ SYS.WSMon.wsen – Enumerate、EnumerateResponse、Items、Pull、PullResponse、Release

  • パッケージ SYS.WSMon.wsman – Client、Locale、MaxEnvelopeSize、OperationTimeout、RequestTotalItemsCountEstimate、ResourceURI、SelectorSet、Service、TotalItemsCountEstimate

クラス・コンポーネントの予約

以下のクラス・コンポーネントは、インターシステムズ用に予約されています。今後、これらはクラス・リファレンスに表示されません。また、予告なく変更される場合があります。これらのコンポーネントを使用している場合、公開されている他の API コンポーネントへの置き換えについてインターシステムズのサポート窓口Opens in a new tabまでお問い合わせください。

クラス タイプ 名前
%Installer.ClassMapping メソッド %OnGenerateCode
%Installer.ClassMapping メソッド %OnGenerateCode
%Installer.Configuration メソッド %OnAfterGenerateCode、%OnBeforeGenerateCode、generateCode
%Installer.CopyClass メソッド %OnGenerateCode
%Installer.CopyDir メソッド %OnGenerateCode
%Installer.CopyFile メソッド %OnGenerateCode
%Installer.Credential メソッド %OnGenerateCode
%Installer.CSPApplication メソッド %OnGenerateCode
%Installer.Database メソッド %OnGenerateCode
%Installer.Default メソッド %OnGenerateCode
%Installer.Else メソッド %OnGenerateCode
%Installer.Error メソッド %OnBeforeGenerateCode
%Installer.ForEach メソッド %OnAfterGenerateCode、%OnBeforeGenerateCode
%Installer.GlobalMapping メソッド %OnGenerateCode
%Installer.If メソッド %OnAfterGenerateCode、%OnBeforeGenerateCode
%Installer.IfDef メソッド %OnAfterGenerateCode、%OnBeforeGenerateCode
%Installer.IfNotDef メソッド %OnAfterGenerateCode、%OnBeforeGenerateCode
%Installer.Import メソッド %OnGenerateCode
%Installer.Installer メソッド CopyClass、CopyDir、CopyFile、CreateDatabase、CreateNamespace、CreateResource、CreateRole、CreateUser、CSPApplication、DeleteVariable、EnableEnsemble、eval、Evaluate、GetVariable、GlobalMapping、Import、InstallFromCommandLine、IsLoggable、IsVariableDefined、LoadManifestXML、LoadPage、Log、PopNS、Production、ProductionExists、PushNS、RoutineMapping、SetVariable、special、SystemSetting
プロパティ Logger、LogLevel、NSStack、Variables
%Installer.Invoke メソッド %OnBeforeGenerateCode
%Installer.LoadPage メソッド %OnBeforeGenerateCode
%Installer.Log メソッド %OnBeforeGenerateCode
%Installer.Manifest メソッド %OnAfterGenerateCode、%OnBeforeGenerateCode
%Installer.Namespace メソッド %OnAfterGenerateCode、%OnBeforeGenerateCode
%Installer.Production メソッド %OnAfterGenerateCode、%OnBeforeGenerateCode
%Installer.Resource メソッド %OnGenerateCode
%Installer.Role メソッド %OnGenerateCode
%Installer.RoutineMapping メソッド %OnGenerateCode
%Installer.RunInstall メソッド %OnGenerateCode
%Installer.Security メソッド %OnAfterGenerateCode、%OnBeforeGenerateCode
%Installer.Sequence メソッド findChild
%Installer.Setting メソッド %OnGenerateCode
%Installer.SystemSetting メソッド %OnGenerateCode
%Installer.Var メソッド %OnGenerateCode
%Library.ProcedureContext プロパティ Results
%Net.FtpSession メソッド endCommand
%Net.POP3 メソッド GetHeadersArray
%SYSTEM.Config.SharedMemoryHeap メソッド DisplayUsage
%ZEN.Component.abstractPage メソッド %IsEmbedded
クラス・コンポーネントの削除

以下のクラス・コンポーネントは、今回のバージョンで除外されています。

クラス タイプ 名前
%Activate.UI.Wizard プロパティ lblExit、lblFinish
パラメータ DOMAIN、TEMPLATEMODE
%CPT.CalloutDump メソッド DumpParseTreeNodeMap、DumpSourceAndMap
%CSP.UI.Portal.Config.Device メソッド DrawLocatorExtra、onloadHandler、UpdateDetails
%CSP.UI.Portal.Config.Devices メソッド DrawLocatorExtra、saveItem、validate
%CSP.UI.Portal.Config.ValueEditor メソッド DrawLocatorExtra
%CSP.UI.Portal.FileManTemplate メソッド %OnAfterCreatePage
%CSP.UI.Portal.NLS メソッド AddLocator
%CSP.UI.Portal.NLSEdit メソッド AddLocator
%CSP.UI.Portal.ObjectGateway メソッド doStart、doStop、itemChanged
プロパティ msgConfirmSaveStart、msgConfirmStart、msgConfirmStop
%CSP.UI.Portal.ObjectGateways メソッド deleteSetting、editSetting、editSettingD
プロパティ PID
%Compiler.Informix.COS メソッド %OnClose、InformixDT2CacheDT、SeparateName、delimitIdentifier、getTypeCategory、normalizeIdentifier、resolveTableName
プロパティ blockTypeStack、codeStack、contextStack、exceptionDepth、exceptionStack、opStack
%Library.IProcedureContext プロパティ Message、RowCount、SQLCode
%Library.IResultSet プロパティ %RowCount、%SQLCode
%Library.ODBCCatalog メソッド co25Close、co25Execute、co25Fetch、cr25Close、cr25Execute、cr25Fetch、ek25Close、ek25Execute、ek25Fetch、ik25Close、ik25Execute、ik25Fetch、pc25Close、p25Execute、pc25Fetch、ti25Close、ti25Execute、ti25Fetch
クエリ co25、cr25、ek25、ik25、pc25、ti25
  パラメータ CHARSET、CONTENTTYPE
%Library.ObjectJournalTransaction メソッド PurgeUpToTxn
%Library.ProcedureContext プロパティ ReturnValues
%Library.qccServer メソッド OnPage
%MV.File プロパティ %AAA01VarType、%AAA02FileName、%AAA03Namespace、%AAA04DictFlag、%AAA05Global、%AAA06Account、%AAA07TargetAccount、%AAA08TargetFileName、%AAA09IsBinary、%AAA10IsTranslated、%AAA11COSName、%AAA12LockName、%AAA13Class、%AAA14IndexType、%AAA15IndexRoutine、%AAA16IndexName、%AAA17IndexColl、%AAA18BSCAN、%AAA19IndFlag、%AAA20IndNames、%AAA21IndColl、%AAA22IndMV、%AAA23Options、%AAA24TriggerRoutine、%AAA25TriggerOperations、%AAA26FireTriggers、%AAA27CasePreserveName、%AAA28IOTable、%AAA29ClassNamespace、%AAA30SectionName
%MV.PropertyParameters パラメータ MVITYPERTN
%MV.SelectList プロパティ %AAA01Type、%AAA02LastReturnedId、%AAA03NextOffset、%AAA04GlobalName、%AAA05Namespace、%AAA06Values、%AAA07Count、%AAA08IndexName、%AAA09IndexFlags、%AAA10IndexColl、%AAA11InReverse、%AAA12LastReturnedMVPos、%AAA13LastReturnedKey、%AAA14CurSub、%AAA15MaxSub、%AAA16ExplodeFlag
%ResultSet.Static メソッド %RowCountGet
%Studio.Project メソッド deployToGbl
%SOAP.Security.SecurityTokenReference プロパティ ID
%SYS.PTools.Stats プロパティ CursorName、NameSpace、RoutineName
%SYSTEM.CPU プロパティ nTheadsPerCore
%TSQL.Transformer メソッド ExecuteStringAsTSQL、ExpandTable
%UnitTest.Manager メソッド ParseQualifiers、RunOneDirTest、RunTestSuite、SaveLog
%UnitTest.Report メソッド IsSuccess、NoNameSpace
%UnitTest.Utility メソッド processError
%ZEN.Auxiliary.dataController メソッド %GetDataByName、%GetTypeByName、%OnNew、%SetDataByName、autoRefreshHandler、clearAutoRefresh、getData、getDataAsArrays、getDataAsObject、getDataByName、getDimSize、getDimensions、getError、getLabel、getModelId、getPropertyName、getTypeByName、hasData、invokeAction、isModelReadOnly、isPropertyValid、notifyController、onDelete、onloadHandler、raiseDataChange、register、sendEventToViews、setData、setDataByName、setModelId、startAutoRefresh、unregister、update
パラメータ DEFAULTVISIBLE
プロパティ alertOnError、autoRefresh、dataBag、dataLoaded、dataReadOnly、defaultSeries、modelChanged、modelError、modelId、oncreate、ondelete、onerror、onnotifyController、onsave、readOnly、timerid
%ZEN.Component.abstractPage メソッド %DrawJSTestIncludes
パラメータ SYSTEMPACKAGES、SYSTEMSVGPACKAGES
プロパティ %ComponentIncludes、%IncludePackages
%ZEN.Report.Aggregate.StDev プロパティ Sum、SumOfSquares
%ZEN.Report.Display.inline プロパティ field
%ZEN.Report.Display.p プロパティ field
%ZEN.Report.reportPage メソッド %IsTypeNumeric、OnSVGAttribution
%ZEN.SVGComponent.svgPage パラメータ SYSTEMSVGPACKAGES
%ZEN.Utils メソッド NeedsIncludeFiles、WriteIncludeFiles
Config.CommonMapProperties パラメータ SECTIONTYPE
Config.CommonMethods パラメータ NAMESPACE
Config.Config.MapPackages パラメータ NAMESPACE
Config.Config.MapRoutines パラメータ NAMESPACE
Config.MapGlobals メソッド NameIsValid
パラメータ NAMESPACE
Config.Miscellaneous プロパティ NamespacePrompt
Config.Namespaces メソッド MapPkg、MapSub、MapUserGlobals、MapUserPackages、MapUserRoutines
Config.MapPackages パラメータ NAMESPACE
Config.MapRoutines パラメータ NAMESPACE
メソッド返り値の変更

今回のバージョンの Caché では、以下のメソッド返り値が変更されました。

  • %CSP.UI.System.ExportPane パッケージ – DrawResult

  • %CSP.UI.System.ImportPane パッケージ – DrawResult

  • %Library.CacheIndex パッケージ – Check

  • %Monitor.Manager パッケージ – SystemCountersActive

  • %UnitTest.Manager パッケージ – PurgeLog

  • %ZEN.Dialog.fileSelect パッケージ – GetSubDir

メソッド・シグニチャの変更

今回のバージョンの Caché では、以下のメソッドの呼び出しシーケンスが変更されました。

クラス名 メソッド名
%BI.WebScheduler addNewPivotTask
%CPT.COSCallout Compile
%CPT.CalloutCheckTree CheckParseTreeNode、CheckParseTreeNodeAnn、CheckParseTreeNodeChild、CheckParseTreeNodeSource、ReportAnn、ReportChild、ReportNode
%CPT.CalloutDump ExpandAnnIndex、ExpandAnnValue、ExpandChildIndex、ExpandNodeType
%CPT.CalloutIndex BuildNodeIndex、ListEnumIndex、ListNodeIndex、UpdateNodeIndexForEnum、UpdateNodeIndexForNode、UpdateNodeIndexFromLine
%CPT.CalloutTesting TestStream
%CPT.CalloutTypeIndex BuildTypeIndex、IsEqualOrDescendantOf、ListTypeClassHierarchy、ListTypeIndex、UpdateTypeIndexForNode、UpdateTypeIndexForNodeClass、UpdateTypeIndexFromLine
%CPT.ISQLCallout Compile
%CSP.Session Unlock
%CSP.UI.Portal.SSL SaveData
%CSP.UI.System.AutoPageCSP GetLocator
%Collection.ListOfObj GetObjectIdNext
%Compiler.Informix.Flo preparseSQL、parseStream
%Compiler.LG.PropWrapper SetIIJJKK
%Compiler.TSQL.Flo preparseSQL、sqlact
%Compiler.XML.Generator.Adaptor GenArrayCode、GenExportCode、GenListCode、GetSimpleExport
%Debugger.System StackVars
%Installer.Installer CreateDatabase
%Library.ArrayOfObjects %AddToSaveSet
%Library.CacheIndex Check
%Library.Collation FMDLTDate
%Library.GlobalEdit GetGlobalSize、GetSize
%Library.ListOfObjects %AddToSaveSet
%Library.ProcedureContext ResolveTableName
%Library.RegisteredObject %AddToSaveSet
%Library.RelationshipObject %AddToSaveSet
%Library.RoutineMgr UserType
%Library.SyntaxColor Color
%Monitor.Manager SystemCountersActive
%Net.FetchMailProtocol Fetch
%Net.POP3 Fetch
%Net.Remote.Gateway %Connect
%SOAP.Descriptor GetSoapParameters
%SOAP.Security.SecurityTokenReference Validate
%SOAP.WSDL.Reader GetCacheElement
%SOAP.WebRequest GetSoapParameters
%SQL.Manager.Catalog SetFieldSelectivity、SetTableExtentSize
%SYS.PTools.SQLStats Export、Init、Report、Start、Stop
%SYS.PTools.Stats Init、Report、Start、Stop
%SYS.ZENReportServer %ServeTransform
%Studio.Project Deploy、deployToDatabase、NormalizeName
%UnitTest.Manager AutoLoad、DebugLoadTestSuite、DebugRunTestCase、LogStateEnd、RunTest
%UnitTest.ODBCSQL processORSToStream
%XML.Utils.SchemaReader GetCacheElement、ProcessElement、ProcessSequence
%XML.Writer Object、RootObject
%XML.XSLT.Transformer TransformFile、TransformFileWithCompiledXSL、TransformStream、TransformStreamWithCompiledXSL、TransformStringWithCompiledXSL
%ZEN.Component.tabGroup showNextTab、showPreviousTab
%ZEN.Report.Aggregate.StDev ProcessValue
%ZEN.Report.Display.caption %DrawCellFO、%DrawCellToHTML
%ZEN.Report.Display.item %DrawToHTML、%DrawToXSLFO
%ZEN.Report.Display.node %GenerateCode、%StyleXSLFO
%ZEN.Report.Display.tableOutput %DrawCellFO、%DrawCellToHTML、%DrawFooterFO、%DrawFooterToHTML、%DrawHeaderFO、%DrawHeaderToHTML
%ZEN.Report.group %SortChildren
%ZEN.Utils %GenerateIncludeFiles
Config.CPF MoveToActive、UpdateLines
Config.ComPorts Load
Config.CommonMapMethods Load、MoveToActive
Config.CommonMethods Activate、Load、MoveToActive
Config.CommonMapMethods MoveToActive
Config.DTMnetBIOS Load
Config.Databases Load
Config.DeviceSubTypes Load
Config.Devices Load
Config.ECP Load
Config.ECPServers Load
Config.ETHServers Load
Config.IO Load
Config.Journal Load
Config.LAT Load
Config.MagTapes Load
Config.Map MoveToActive
Config.Miscellaneous Load
Config.Monitor Load
Config.Namespaces Load
Config.Net Load
Config.SQL Load
Config.SqlSysDatatypes Load
Config.SqlUserDatatypes Load
Config.Startup Load
Config.Telnet Load
Config.UDPServers Load
メソッドの置き換え

次のメソッドは、あるクラスから削除されて別のクラスに追加されました。

  • メソッド : KPI – %BI.Soap から %BI.Util

  • メソッド : Pivot – %BI.Soap から %BI.Util

DBTIME 実装の変更

DBTIME パラメータは、バージョン 2008.2 で初めて導入されました。1 に設定すると、挿入や更新ごとにインクリメントされるグローバルに (既定で) 設定されたインデックスが、プロパティのクラスに定義されました。しかし、削除の場合には、オブジェクトに対するインデックス・エントリは更新されませんでした。

今回のバージョン以降、DBTIME によってインデックス定義およびプロパティ定義は生成されません。グローバル ^OBJ.DBTIME が、挿入、更新、および削除ごとに設定されます。最初の添え字はインクリメントされるグローバル・カウンタ ^OBJ.DBTIME、2 番目はファイリング対象オブジェクトのクラス名、3 番目はオブジェクト ID です。各ファイリング・イベントのグローバル・ノードの値は、ファイリングのタイプです (更新は 0、挿入は 1、削除は 2)。この構造は累積的です。これは Cache の各種機能をサポートするために使用され、また、ユーザ・アプリケーションであらゆる目的に使用できます。 ^OBJ.DBTIME からのエントリの削除は自動的に行われないため、ユーザによって実行される必要があります。

コレクションにおける末尾オブジェクトの挿入の許可

リスト・コレクションの SetAt メソッドを使用すると、呼び出し元は要素値およびキーを指定できます。以前のリリースでは、キー位置の要素が未定義の場合、試行に失敗していました。

今回のリリースでは、この動作が変更されました。キーが 1 (最初の要素位置) でない場合で、前の位置にある要素が定義されていなければ、呼び出しは引き続き失敗します。しかしそれ以外の場合、呼び出しは成功し、未定義の位置に対して SetAt(value,key) を呼び出す動作は、挿入と同様の動作になります。つまり、位置 “key” の新しい要素が定義されます。

オブジェクトの挿入で IDENTITY が明示的に設定されている場合の ID カウンタの更新

新しいオブジェクトの IDENTITY プロパティに値が指定され、INSERT_IDENTITY オプションが TRUE に設定されている場合、新しいオブジェクトの ID は IDENTITY プロパティの値に設定されます。

以前のバージョンでは、ID カウンタ値が前に挿入したオブジェクトと同じだった場合、エラーが発生して IDENTITY プロパティなしの後続の挿入が成功しませんでした。今回のバージョンではこれが修正され、IDENTITY プロパティの明示的な値が現在の ID カウンタ値よりも大きければ、その明示的なセットによって ID カウンタが更新されます。またこの修正の一部として、バッチ挿入や直接保存の場合に INSERT_IDENTITY オプションにチェックが付けられないという別のエラーも修正されました。

%OnDetermineClass メソッドのオーバーライドのブロック

%OnDetermineClass は、永続オブジェクト、ストリーム・オブジェクト、およびシリアル・オブジェクトに対して実装されるクラス・メソッドです。これまでは常に PRIVATE になるように定義されていましたが、今回のリリースまでクラス・メソッドに対する PRIVATE が適用されたことはありません。今後、%OnDetermineClass をオーバーライドするアプリケーション・クラスは、メソッド定義を更新して PRIVATE キーワードを削除する必要があります。

%Stream.GlobalCharacterSearchable で使用可能なインデックス

タイプ・クラスが %Stream.GlobalCharacterSearchable のプロパティに基づくインデックスでは、破損が発生する不具合がいくつかありましたが、今回のバージョンの Caché で修正されました。この不具合により、ストリームへの更新が無視され、古いストリーム値に基づくインデックス・エントリが残っていました。また、コンテナ・オブジェクトを削除しても、場合によってはストリームからインデックス・エントリを完全に削除できないことがありました。

これらの不具合の修正の一環として、ストリームのインデックスは %Stream.GlobalCharacterSearchable のインスタンスでのみサポートされることになりました。このクラスのインスタンスは、コンテナを介して処理する必要があります。コンテナからストリーム OID を抽出して、コンテナに保存することなくストリームを更新するという処理は、正当な処理ではありません。

Caution:

既存のデータ構造への変更はないので、この変更は既存のアプリケーションにも正常に反映されるはずです。ただし、従来の動作では、ほとんどのケースでインデックス構造の破損が生じていました。このようなインデックスは、このバージョンをインストールした後に、削除して再構築する必要があります。

NamespacePrompt プロパティの変更

Config.MiscellaneousOpens in a new tab クラスのプロパティ NamespacePrompt は、Config.StartupOpens in a new tab クラスに移動され、TerminalPrompt という名前に変更されました。

クラス・コンパイラの変更

今回のバージョンの Caché では、以前のリリースと同様、引き続きクラス・コンパイラの向上を図っていきます。このセクションでは、アプリケーション変更を必要とする可能性のある変更について詳述します。

クラスの継承順序の既定値の変更

バージョン 2009.1 では、スーパークラスからの継承順序を指定するために Inheritance キーワードが導入されました。そのリリースでは、順序を指定しないクラスの既定値は、キーワード導入以前と同じ “right” でした。

今回のバージョンでは、順序を明示的に指定しないクラスの継承順序の既定値が、“left” に変更されました。

スーパークラスを使用できることが必要

以前のバージョンでは、サブクラスによって、すべてのメソッド・コードがそのサブクラスのスーパークラスからサブクラスにコンパイルされていました。このバージョンでは、サブクラスにはそのスーパークラスに対する参照が含まれているため、余分なコードが不要となり、コンパイルの所要時間が短縮されます。こうした機構では、クラス内のメソッドに対する最初の参照では、参照を解決するためにすべてのスーパークラスにアクセスできることが必要になります。この参照とは、呼び出し側メソッドのネームスペースに存在するか、またはマップしておいたものです。

フラグおよび修飾子の廃止または非推奨化

今回のバージョンの Caché では、コンパイラのフラグおよび修飾子に加えられた以下の変更が、既存の処理に影響する可能性があります。

  • 最適化フラグの無視

    今回のバージョンの Caché では、クラスおよびルーチン配信におけるより動的な特性上、最適化フラグ (“o1”、“o2”、...) が引数として渡された場合は無視されます。これらの最適化をオフにすることによる速度の低下を補うために、システム・コードが最適化されました。

  • 強制フラグ

    強制フラグ “f” は、非推奨になりました。

  • SQL コンパイルの非推奨化

    SQL のみのコンパイルの指定に使用された “q” フラグは、非推奨になりました。

  • 有効状態の保持の非推奨化

    コンパイルの終了後にオブジェクトの有効状態を保持するために使用された “v” フラグは、非推奨になりました。

  • 以下の修飾子は、使用できなくなりました。

    • /deletextent – クラスに関連付けられたエクステントの削除に使用されていました。

    • /version4compatible – バージョン 4 と互換性のある CDL ファイルのエクスポートに使用されていました。

$GET(..<property>) では、<property> が多次元であることが必要

以前のバージョンでは、多次元でないクラス・プロパティに $GET を適用しても、特定の最適化フラグが設定されていればエラーにならない場合がありました。今回はこの点が修正されました。例えば、次のような式があったとします。

$GET(..AClassProperty)

この式が有効となるのは、AClassPropertyMultidimensional とマークされている場合のみです。

Note:

この制約は、クラス・プロパティに関係するその他のコマンド KILLMERGE$DATA()、および $INCREMENT() にも適用されます。

..<property> に対する $PIECE 参照では、<property> が多次元であることが必要

以前のバージョンでは、$PIECE は、..<property> に対する参照を文字列として扱っていました。コンパイラが変更されたため、このような参照は今後 <OBJECT DISPATCH> エラーになります。この形式を使用したアプリケーションでは、プロパティに Multidimensional 修飾子を追加するか、または次のように一時文字列を使用します。

Set ..MyProperty = "Piece1/Piece2" 

Set temp = ..MyProperty 
Set $PIECE(temp,"/",2) = "Piece3" 
Set ..MyProperty = temp 

%this の不正使用の禁止

以前のバージョンの Caché では、以下のシーケンスを使用して、別のオブジェクトのプライベート・プロパティにアクセスすることができました。

New %this
Set %this = OtherOREF
Set Value = ..PrivateProperty

システム変更により、今後は上記のシーケンスが新しいクラス・コンパイラで機能することはありません。アプリケーションがこの疑わしいコードを使用している場合は、必ず更新してください。

システム・コードのパブリック/プライベート保護が変更され、メンバの元がクラス X またはクラス X のスーパークラスである場合に限って、クラス X のメソッドから別のインスタンスのプライベート・メンバにアクセスできるようになりました。これによって、“Set %this=” を、最も一般的な方法ではなく、プライベート・プロパティに直接アクセスするためだけに使用できるようになります。

さらに、クラス・メソッドが以下のコードを実行する場合にも問題が発生します。

Set value=##this.Property

上記のコードは、以前の Caché システム上の %this を暗黙的に参照していました。この %this 値は偶然にも最後に呼び出されるインスタンス・メソッドになっていました。最後のインスタンスは適切に定義されないため、これは非常に危険な用法です。例えば、クラス・メソッドが最初に呼び出された場合、%this はまったく定義されません。そのため、オブジェクトの OREF をクラス・メソッドに明示的に渡すように、アプリケーションを記述する必要があります。

新しいコンパイラでは、“##this” への参照は、現在のクラス・コンテキストである $THIS, に変換されます。

シリアル・オブジェクトの状態の %%OID での保持

以前のバージョンでは、オブジェクトのシリアル状態は内部的に保持されていました。今回の変更では、シリアル状態が %%OID と呼ばれる実際のプロパティで表示されるようになりました。これは、シリアル・オブジェクトおよびストリーム・オブジェクトについても更新されます。シリアル状態は、シリアル・オブジェクトが独立してシリアル化される場合を正しく処理するために %Save で使用されるため、保存の試みに対して %IsModified()=0 を報告しますが、コンテナでは新しいシリアル値がわかりません。%%OID を使用すると、コンテナは常に正しいバージョンのシリアル・オブジェクトを取得することができます。

シリアル・プロパティを "" に設定することによる、そのプロパティの初期化

クラスでシリアル・プロパティを定義する際に、このクラスで新しいインスタンスを作成してそのシリアル・プロパティを参照すると、NewObject() メソッドを使用してシリアル・プロパティが作成されます。その後、アプリケーションでこのプロパティを "" に設定した場合、プロパティは再初期化されます。これにより、親オブジェクトを新規に作成した場合と同様、次の参照では NewObject() を使用してシリアル・プロパティが再作成されます。

NotInheritable キーワードの削除

以前のバージョンの Caché では、ユーザが以下のような式を使用して "継承できない" プロパティを定義することができました。

Property A As %String [ NotInheritable ];

この概念は、オブジェクト継承の妨げになります。現在スーパークラスには、サブクラスにはないインタフェースがあるからです。

今回のバージョン以降の Caché では、上記の式は許可されていません。継承できないプロパティを持つクラスのサブクラスをコンパイルすると、プロパティ “..A” がサブクラスに存在しないために、エラーが発生します。

今回のバージョンにアップグレードすると、アップグレード手順でどのプロパティからも “NotInheritable” は自動的に削除されるため、継承できないプロパティはすべて継承できるプロパティに変換されます。その際に、プロパティの説明に [Previously notinheritable] というコメントが追加されます。

新たに “NotInheritable” としてマークされたプロパティがあると、それらのコンパイル時にエラーが発生します。スタジオは、このキーワードの設定機能や表示機能を削除するように変更される予定です。

プライベート・クラス・メソッドのサポート

Caché でプライベート・クラス・メソッドがサポートされるようになりました。プライベート・クラス・メソッドは、そのクラス (またはサブクラス) 以外から呼び出すことはできません。下位互換性を確保するために、すべてのクラス・メソッドは “public” としてマークされているため、カスタマ・コードは引き続き正常に機能します。これらのメソッドの説明は、文字列 “[Previously private]” を追加するよう変更されています。

今後クラスに新たに追加されるプライベート・クラス・メソッドには、そのクラス以外からアクセスすることはできません。

COSEXPRESSION のサポートの変更

以前のリリースでは、パラメータ定義の COSEXPRESSION は、マクロ置換のように処理されていました。この投影は以下のように行われます。

parameter P1 as COSEXPRESSION = """Red"",""Green"",""Blue""";
...
...

Set X = $LISTBUILD(..#P1)

この場合、以下のように処理されていました。

Set X = $LISTBUILD("Red","Green","Blue")

今回のバージョンの Caché では、COSEXPRESSION は単一値のみを返すように制約されています。そのため、パラメータ定義は、次のように書き換える必要があります。

parameter P1 as COSEXPRESSION = "$LISTBUILD(""Red"",""Green"",""Blue"")";

このように書き換えないと、クラスをコンパイルするときにエラーが報告されます。

スーパークラス参照 ##super

..ClassmethodName() を使用すると、スーパークラスのクラス・メソッドではなく、常に現在のクラスのクラス・メソッドが呼び出されるようになりました。今後、スーパークラスのクラス・メソッドにアクセスするには、##super.ClassmethodName() 式を使用します。

Codemode=Call における可変長引数リストの不使用

“codemode=call” と記述されたメソッドは、可変長引数リストを使用できなくなりました。そのように使用すると、メソッドのコンパイル時にエラーが発生します。引数の固定リストを使用するように、メソッドを書き換える必要があります。

サブクラスに対する %Exists および %ExistsId の結果の標準化

以前のバージョンでは、アプリケーションで %Exists を呼び出して (クラス名が含まれる) 整形式 OID を渡すと、Caché は常に多様な形式でそのクラスの %Exist メソッドに送信していました。例えば、Sample.Employee の %Exists を呼び出して Sample.Person の OID を渡すと、True が返されていました。これを分析すると、エラーと見なされます。Sample.Employee の %ExistsId を呼び出して同じ OID を渡すと、Sample.Employee またはそのサブクラスのインスタンスではないために False が返されるためです。

今回のバージョンではこの動作が変更され、%Exists および %ExistsId がどちらも正しい結果を返すようになりました。アプリケーションがこの誤った動作に依存していた可能性は低いと考えられます。

クラス記述子のサイズ制限

クラスをコンパイルすると、“クラス記述子” と呼ばれるデータ構造が生成されます。これには、クラスおよびそのコンポーネント (プロパティ、メソッド、パラメータ、インデックスなど) に関する要約データが含まれます。グループごとの情報 (定義されているメソッドなど) はそれぞれのテーブルに格納され、Caché 文字列の最大サイズである 32 KB に制限されます。

今回のバージョンの Caché では、テーブル形式が変更されました。各メソッドで格納可能な情報量は増加する一方で、プロパティの情報量は減少しました。そのため、数百ものメソッドやプロパティが含まれるクラスでは、結果として得られるクラス記述子が 1 つ以上のテーブル制限を超えてしまい、<CLASS TOO BIG TO SAVE> エラーが発生する可能性があります。

Note:

このエラーが発生したクラスはリファクタリングして、エントリの数を減らす必要があります。

メソッド、プロパティ、インデックスの中には、クラス・ソースに明示的に表示されるものだけでなく、継承および生成されるコンポーネントも含まれます。また、プロパティによってメソッドが生成される可能性もあります (<propertyname>Get や <propertyname>Set など)。

名前の 180 文字制限

コンパイルされたクラスは、パッケージ名、クラス名、およびコンポーネント名によってインデックス付けされたグローバルに格納されます。これらがそれぞれ長い文字列の場合、グローバル添え字の最大長を超えてしまう可能性があります。その可能性を低減するために、今回のバージョンのコンパイラでは、クラスで宣言されるメソッド、パラメータ、およびプロパティの名前に対して、最大サイズの制限が適用されます。その制限は 180 文字です。

ストアド・プロシージャの返りパラメータ・タイプの確認

以前のバージョンでは、返り値のタイプ・パラメータは無視されました。今回のバージョン以降、クラス・メソッドの返りタイプ・パラメータは、ストアド・プロシージャ・プロジェクションによって処理されます。以下はその例です。

classmethod myproc() as %String(MAXLEN=100) [ sqlproc ] {
...
}

上記の場合、文字列の最大長が 100 である xDBC 列を投影します。以前は、既定の 50 が使用されていました。

オブジェクト・バインディングの変更

Jalapeño に投影されるプロパティの変更

以前のバージョンでは、Private または ServerOnly としてマークされていない (つまり、投影できない) Caché クラスで定義されたすべてのプロパティは、Java の POJO クラスに存在していました。今後は、名前が “%” で始まるプロパティは、POJO で投影されません。これにより、名前が “%” で始まるプロパティを持つユーザ・クラスは影響を受けます。

SQL の変更

埋め込み SQL におけるプロシージャ名の処理の変更

今回のバージョンの Caché では、&SQL 文での未修飾のプロシージャ名の処理方法が、以前のバージョンから変更されました。 今後、未修飾のプロシージャ名に使用されるスキーマ名では、定義されているすべての #import 値が考慮されます。 つまり、クラス・メソッドに埋め込み SQL CALL 文 (“&SQL( ...)”) があって、そのプロシージャ名が未修飾の場合は、現在のクラスのパッケージにマップするスキーマが既定になります。 以前は、システム定義の既定スキーマが既定スキーマになっていました。 DDL 文の既定スキーマについては、システム定義の既定スキーマのままです。

SQL 拡張機能 FOR ALL のサポート終了

今回のバージョンでは、FOR ALL 文はサポートされなくなりました。これは、バージョン 2009.1 で非推奨になっていました。アプリケーションが FOR ALL を使用している場合、変更する必要があります。必要に応じて、FOR ALL 文を以下の文に変換できます。

NOT FOR SOME ...

ただし、目的どおりの結果が得られるように条件を慎重に作成する必要があります。

SQL 文における日付と時刻の変換エラーの報告

DISPLAY モードまたは ODBC/JDBC モードのいずれかの入力として %Date 値を使用する SQL 文では、入力値を有効な %DateOpens in a new tab 論理値に変換できない場合、その SQL 文は SQLCODE=-146 を返します。 同様のエラーとしては、%Time 値を変換できない場合に SQLCODE=-147 が返される場合などがあります。以下はその例です。

&sql(select name into :name from sample.person where dob = '02/29/2009')

上記の場合、“[SQLCODE=-146 日付入力を有効な論理日付値に変換できません]” と返されます。

より包括的な予約語の確認

以前のバージョンでは、以下の例のように予約語は識別子として受け入れられていました。

  • SELECT または FROM 節の AS に続くエイリアスとして

  • FROM 節のテーブルの参照として

今後は、このような場合にエラーが報告されます。ただし、以前も予約語は WHERE、GROUP BY、HAVING、および SELECT 節で使用できず、また列のテーブル修飾名としても使用できなかったため、多くのクエリに影響する可能性は低いと考えられます。

予約語からの ORDER の削除

ORDER は、予約語ではなくなりました。予約語でないキーワードとなったため、標準的な識別子が使用される場所では、どこでも ORDER を使用できるようになりました。

サブクエリでの TOP および ORDER の使用

以前のバージョンでは、TOP を UNION に適用する方法は 2 つありました。

SELECT TOP ...
FROM (SELECT .... UNION ... SELECT ...)
ORDER BY ...

および

SELECT TOP ...
...
UNION
...
SELECT
...
ORDER BY

今回のバージョン以降、最初の構文形式を使用する必要があります。後の例は、TOP をどこで指定しても常に最も外側の処理レベルに適用されるため、不具合と見なされます。

CASE 節の結果の型の変更

以前のバージョンでは、CASE 式で報告される型は、CASE 式の最初のケースの返り値の型でした。今回のバージョンでは、CASE 式のすべての返り値の型の中で、最も互換性の高い型が返されるように変更されました。Caché は、すべての有効な返り値の最大の長さ、有効桁数、小数桁数が使用されるようになりました。これは、数値の返り値のみに適用されます。

返り値の型の優先順位は以下のとおりです (最高順位から最低順位の順)。

  • DOUBLE

  • NUMERIC

  • BIGINT

  • INTEGER

  • SMALLINT

  • TINYINT

例えば、CASE 式が TINYINT、INTEGER、または NUMERIC の値を返す可能性がある場合、NUMERIC の優先順位が一番高いため、この列の型は NUMERIC になります。

SQL ゲートウェイの変更

自動コミットの設定

以前のリリースでは、自動コミットの設定を変更するには、SetAutoCommit^%apiGTWSetAutoCommit^%apiSQL の両方を呼び出す必要がありました。今回のリリースでは、SetAutoCommit^%apiGTW を呼び出すだけで有効になります。

XML の変更

エクスポートされた xsi:type とスキーマの一致

データ型クラスの xsi:type 属性は、実際の値の型を反映するようになりました。 これまで xsi:type 属性は、s:string のように、常に基本的な事前定義された型として設定されていました。

スキーマにおける混在したコンテンツの適切なマーキング

属性が mixed=”true” の “complexType” として定義されたすべての要素に対して、CONTENT=”MIXED” プロパティのほかに、complexType の各要素のプロパティが生成されるようになりました。これまでスキーマ・ウィザードによって要素のプロパティは生成されなかったため、この変更によって XML スキーマから一連の既存クラスが再生成されると、互換性の問題が発生する可能性があります。

%XML.Reader によって SAX パーサのエラーが返される

今回のバージョンの Caché では、%XML.ReaderOpens in a new tab によって SAX パーサの検証エラーが返されるようになりました。 以前は、SAX パーサによって検証エラーが報告されていましたが、エラーが適切に報告されない欠陥がありました。

SAX ネームスペースの変更

Xerces 3.0 (このリリースで使用されるバージョン) では、ネームスペースの処理方法に変更があります。ネームスペースを認識するフラグは、既定ではオンです。これをオフにすると、返された startElement コールバック・データのローカル名が空の文字列になります。従来は、qname (完全修飾名) のコピーでした。

Zen の変更

クライアント側 JavaScript の変更

クライアント側 JavaScript メソッドを使用する Zen アプリケーションでは、このメソッドの宣言を変更する必要があります。以下のようにメソッド・シグニチャが “Method” キーワードで始まっていた場合、

Method test() [Language = javascript] 
{ 
}

以下のように宣言を変更してください。

ClientMethod test() [Language = javascript] 
{ 
}

上記の変更を行わないと、今回のバージョンの Caché で Zen クラスのコンパイルや実行を行うことができません。

インクルード・ファイル処理の変更

Zen コンポーネントでの JavaScript ファイルおよび CSS ファイルの生成方法と、実行時におけるこれらのファイルの使用方法が、今回のリリースで以下のように変更されました。

  • モジュール

    この変更以前の Zen では、Zen コンポーネントを含むクラス・パッケージごとに、JavaScript (.js) ファイルとスタイルシート (.css) ファイルが 1 つずつ作成されていました。今回のバージョンでは、より細分化したメカニズムが存在します。各パッケージ内に、1 つ以上の Zen コンポーネントをモジュールと呼ばれるコレクション単位で配置できるようになりました。

  • ページ上の JavaScript の再編成

    HTML コンテンツの処理後、JavaScript インクルードおよびインライン JavaScript がページ下部に配置されるように、Zen ページが変更されました。これにより、ページの表示速度が向上します。

  • コンポーネント JavaScript およびスタイルシートの動的なロード

    コンポーネントの作成時には、ブラウザでは JavaScript およびスタイルシートが定義済みである必要があります。そのためには、ライブラリ全体を 1 つの大きなインクルード・ファイルに含めます。これにより、ページのロード後に Zen コンポーネントが動的に作成されるようになります。

  • すべてのページ以外のコンポーネントにおけるインクルード・ファイルの使用

    以前のバージョンでは、ページ以外のコンポーネントのページ内に JavaScript およびスタイルシートのインラインを配置できました。今回の変更により、ページ以外のコンポーネントはすべて、インクルード・ファイルを使用します。

  • Zen のバックグラウンド・ファイル生成の廃止

    JavaScript ファイルおよびスタイルシート・ファイルの生成が、コンパイルの一部として実行されるようになりました。そのため、バックグラウンド・ファイルの生成メカニズムは不要になりました。

Zen dynaTree の NodeCount の変更

ZEN dynaTree には、ツリー内のノード数をカウントするプロパティがあります。今回のバージョンの Caché では、最上位レベルのノードだけでなく、ツリー内のすべてのノードがカウントに含まれるようになりました。

Java バインディングの変更

Caché バージョン 2010.1 の互換性の変更

Java バインディングによるオブジェクトのメモリ管理方法が内部的に変更されたため、バージョン 2010.1 ではバージョン間の互換性がなくなりました。Java クライアントでは、5.0.13 から 2009.1 までの任意の Caché バージョンは、同じリリース範囲の Caché サーバと互換性がありました。これらのクライアントが、2010.1 を実行する Caché サーバにアクセスしようとすると、例外を受け取ります。

バージョン 2010.1 を実行する Caché サーバにアクセスする Java クライアントも 2010.1 上で実行する必要があります。

xDBC の変更

バージョンに依存しないカタログ・クエリ

ODBC カタログ・クエリの場合、ODBC 3.5 と 2.5 間で相違点があります。バージョン 2009.1 では、プロトコル数を増やして対応していましたが、今後この方法は使用されなくなります。SQL Server で SQLSetEnvAttr を呼び出すことで、バージョン 3.5 用の返されたデータをバージョン 2.5 用に動的に切り替える (その逆も可能) ことができるためです。これにより、表示する ODBC エラー・メッセージまたはカタログ情報のタイプに応じて、SQL_ATTR_ODBC_VERSION オプションは 2 または 3 のいずれかに設定されます。

今回のバージョンでは、ODBC によってアプリケーションで 2 つの環境設定を動的に切り替えることができます。 SQLAllocEnv を呼び出すと、既定で環境がバージョン 2.5 に設定されます。 バージョン 3.5 のカタログ情報を取得する場合、SQLSetEnvAttr を呼び出す必要があります。 SQLAllocHandle (3.5) を使用すると、ドライバ・マネージャによって out of sequence (順序不整合) エラーが表示され、接続する前に SQLSetEnvAttr を呼び出すよう要求されます。

%Numeric 値の小数桁数の保持

今回のバージョンの Caché では、以前のバージョンとは異なり、JDBC ドライバが %Numeric 0 値の小数桁数の指定を無視することはありません。

コールインとコールアウトの変更

Caché と 外部ルーチン間の互換性

コールインとコールアウトを使用する場合、Caché インスタンスとデータを交換する外部プログラムは、同じ文字コード表示を使用する必要があります。つまり、両方とも文字列に Unicode 表現を使用するか、両方とも 8 ビット表現を使用する必要があります。お互いに異なる文字コードを使用することはできません。この要件が満たされないと、セグメンテーション違反またはアクセス違反が発生する場合があります。

MultiValue の変更

SLEEP 値の解釈の変更

以前のバージョンでは、MV シェルの SLEEP コマンドは 2:14 を 2 時間 14 分の休止と解釈していました。 今回のバージョンでは、これは時刻として解釈されるようになりました。このバージョン以降、値は以下のいずれかの方法で解釈されます。

  • 値の形式が HH:MM[:SS][AM|PM] の場合、値は時刻として解釈されます。システムはその時刻が次に来るまで休止状態になります (同日のその時刻が過ぎている場合は、翌日になる可能性があります)。

  • それ以外の場合、値は現在の時刻からの待機秒数として解釈されます。

Note:

MVBasic の SLEEP および RQM 文に関しても、この解釈が適用されます。

プラットフォーム固有の項目

このセクションでは、特定のプラットフォームに関係する項目について説明します。

オペレータ

システム管理ポータル

システム管理ポータルに数多くの変更や改善が加えられました。詳細は、管理者のセクションを参照してください。

FeedbackOpens in a new tab