- Cachéテクノロジガイド
- 機能と特徴
- デモンストレーション
- 導入事例
- ホワイトペーパー・アナリスト
レポート・カタログダウンロード - 製品仕様・ドキュメント
- Caché開発者向け情報
- Caché FAQ
- Caché eラーニング
(USページ) - 無償ダウンロード
Caché テクノロジガイド
第3章:
Cachéアプリケーション・サーバ
Cachéアプリケーション・サーバは、先進のオブジェクト・プログラミング機能を提供します。高度なデータ・キャッシング機能を備え、さまざまな技術への簡単なアクセスを統合します。また、洗練されたデータベース・アプリケーションの迅速な開発が可能で、そのアプリケーションは高性能でサポートも簡単です。
具体的には、Caché アプリケーション・サーバは、以下の機能を備えています。
- Caché ObjectScriptとBasicの2つのスクリプト言語をもつCaché仮想マシン
- 透過的なルーティングを行い、同一または別コンピュータ上のCaché多次元データ・サーバへのアクセス機能
- クライアント側キャッシュ機能をもつ接続ソフトウェア。これにより、一般的に使用されている技術(Java、C++、C#、COM,.NET, Delphi)からCaché Objectsに高速にアクセスできます。Cachéは、自動的にクライアントとアプリケーション・サーバ間のネットワーク機能を提供します。
- SOAPとXMLとの互換性
- ODBCとJDBCを使用したSQLアクセス(高速性を提供するためのクライアントとアプリケーション・サーバの洗練されたキャッシュ機能を含む)
- リレーショナル・データベースへのアクセス
- 高性能で開発が容易なWebアプリケーション向けCaché Server Pages
- Caché スタジオ―迅速な開発のためのIDE(統合開発環境)とCaché アプリケーションのデバッグ
- クリプト言語用のコード。データベースに格納され、オンラインで変更可能変更を全てのアプリケーション・サーバに自動的に伝搬させます。
Caché 仮想マシンとスクリプト言語
Caché アプリケーション・サーバの中心は非常に高速なCaché 仮想マシンで、Caché のスクリプト言語をサポートしています。
- Caché ObjectScriptは、極めて柔軟なデータ構造をもつ強力で習得しやすいオブジェクト指向言語です。
- Caché Basicを使うと、Visual BasicプログラマがCachéを簡単に使用し始めることができます。VBScriptと同様ですが、Caché Basicはオブジェクトをサポートし、Caché多次元配列にダイレクト・アクセスするよう拡張されています。
- Caché MVBasicは、MultiValue(Pick)アプリケーションにおいて使われるBasicプログラミング言語の一種です。MVBasicはオブジェクトをサポートし、Caché多次元配列にダイレクト・アクセスするよう拡張されています。
Caché 仮想マシンのデータベース・アクセスは、高度に最適化されています。Caché仮想マシンの全てのユーザ・プロセスは、共有データベース・キャッシュにアクセスする共有メモリを呼び出し、多次元データ構造にダイレクト・アクセスできます。他の全ての技術(Java、C++、ODBC、JDBC)は、Caché 仮想マシンから接続し、データベースにアクセスします。
完全な相互運用性
Caché ObjectScript、BasicとMVBasicは同じCaché 仮想マシンに実装されるため、完全に相互運用できます。
- 全てのオブジェクト・メソッドは、いずれかの言語で記述できます。また、同じクラスはどちらの言語でも使用できます。
- それぞれの言語は、一方の言語で記述されたコードを呼び出すことができます。
- 変数、配列、オブジェクトを共有します。
迅速な開発/柔軟な稼動
Caché 仮想マシンで稼動するように、Caché ObjectScriptとBasic言語でできるだけ多くのコードを記述することで、ほとんどの場合、プログラマはアプリケーションを素早く開発でき、そのプログラムは、より高いスケーラビリティをもちながら、非常に高速に稼動します。さらにそのようなコードは、ハードウェアやオペレーティング・システムを変更しても、コードの変更は不要です。Caché は、オペレーティング・システムやハードウェア上の全ての違いを自動的に処理します。

Cachéの利点迅速なアプリケーション開発 短期間での習得 高速でスケーラブル 柔軟性 |
CACHÉ OBJECTSCRIPT
Caché ObjectScriptは強力なオブジェクト指向プログラミング言語で、データベース・アプリケーションを迅速に開発するように設計されています。この言語の重要な特徴は以下の通りです。
構造の概要
Caché ObjectScriptはコマンド指向であるため、例えば、以下のような構文をもちます。
set x=a+b
do rotate(a,3)
if (x>3)
テキスト処理のために特に有用な、組み込みのシステム関数一式をもっています。それらの名前は全て記号'$'で始まり、変数と配列名を区別します。例えば以下のようになります。
|
|
|
|
演算式の処理は電卓のように左から右に順次実行されますが、括弧により、実行順序を制御できます。
柔軟なデータ格納構造
Caché ObjectScriptはコマンド指向であるため、例えば、以下のような構文をもちます。
- オブジェクト・プロパティ
- 変数
- スパース多次元配列(添え字にはあらゆるデータ型を使用できます)
- スパース多次元配列型データベース・ファイル(グローバル)
まれな例外を除いては、Caché ObjectScriptのいずれの場所でも変数、配列、オブジェクトのプロパティ、グローバル参照を使用できます。
多くのコンピュータ言語では、データ型はハードウェアのストレージ概念の拡張です(例えば、整数、変動数、文字など)。しかし、Caché ObjectScriptでは、ユーザはそうしたデータ型を考慮する必要はありません。こうしたコンピュータ中心のデータ型は、単に迅速な開発の障害となるだけです。宣言と次元の記述が必要な場合、抑制どころかさらにエラーを生じさせます(2バイト整数のオーバーフローや、文字列オーバーフロー時のメモリ 割り当てや、他のストレージの破壊などのエラー)。しかし、Person、Invoice、Animalなどのオブジェクトのタイプは、価値が高く、人間の思考方法と一致していると見られています。
したがって、Caché ObjectScriptのオブジェクト・プロパティ・タイプは強制されていますが、他の3種類のストレージ(変数・配列・グローバル)は、完全にポリモフィック(多態性)で、エンティティのタイプがなく、宣言や定義も不要です。使用されると、Existenceに現れ、何を保存するのか、表現中のどこに使用されるかというデータの要求により型を変えます。配列でさえ、特定のサイズや次元、添え字データ型やデータの指定が不要です。例えば、開発者は、以下のシンプルな設定によりPersonと呼ばれる配列を生成することもできます。
set Person(”Smith”,”John”)=”I’m a good person”
この例では、データは、添え字用に文字列データを使用する2次元配列に格納されます。この配列の他のノードでは、2次元以外の構造の場合や、数値や文字列が混同している、あるいは添え字に他のデータ型を使用している場合もあります。例えば、以下のようなデータを格納している場合があります。
abc(3)
abc(3,-45.6,”Yes”)
abc(”Count”)
これらは全て同じ配列に格納されてます。
データベースのダイレクト・アクセス
グローバル参照というデータベースへの直接参照は、本質的には、山形記号「^」で始まる多次元配列の参照です。この記号は、一時的なプライベート・データ処理ではなく、データベース内のデータ参照を示します。各データベース配列を、グローバルと呼びます。
多次元配列や変数は、宣言、定義、ストレージの事前確保を行うことなく、データベースのデータのアクセスや保存ができます。グローバル・データは、単純に現われ、データの存在する場所に格納されます。例えば、データベースにデータを格納するのに、以下のように記述することができます。
set ^Person(“Smith”,”John”)=”I’m a very good person”
また、後にデータを取り出すときには、以下のコードを使用することができます。
set x=^Person(“Smith”,”John”)
プログラマは、グローバル・データ配列のデータ構造を全く自由につくることができます
(多次元データ・モデルを参照)。
オブジェクト参照
Caché ObjectsはODMGのデータ・モデルに準拠していますが、強力な機能拡張もあります。
Caché ObjectScriptでは、オブジェクトにアクセスするときに“oref”(参照するオブジェクトを指定する変数値)を使用します。“oref”の後に、ドット記号がきて、次にプロパティ名かメソッドがきます。オブジェクト参照は、表現式が使われるどこにでも使用できます。
|
|
|
|
|
|
|
|
|
戻り値が不要の場合、DOコマンドでメソッドを実行できます。例えば以下のようになります。
|
|
“oref”は、データベース・オブジェクトIDとは異なります。オブジェクトIDは、データベース・オブジェクトに永続的に結びつける値で、データベース・オブジェクトの検索と保存に使用します。オブジェクトをメモリ上にロードすると、再利用可能なoref値を割り当て、そのオブジェクト・データにアクセスするために使われます。その後、同じデータベース・オブジェクトがメモリ上に読み込まれた場合、異なるoref値を割り当てます。

HTMLとSQLアクセス方法
Webアプリケーションを構成するHTMLとSQLコマンドは、Caché ObjectScriptコードに埋め込むことができます。
コードの呼び出し
オブジェクト指向言語の中には、コードを全て、メソッドの一部として組み込まなければならないものもあります。Caché ObjectScriptにそのような制限はなく、コードは直接あるいはオブジェクト構文から、しばしば呼び出すことができます。
コードは、DOコマンドによって実行される場合もあります。
do rotate(a,3)
値を返すコードは、関数としても呼び出されます。以下はその例です。
set x=a+$$insert(3,y)
これは、プログラマが書いたプロシジャあるいはサブルーチン“insert”を呼び出しています。
コードは、オブジェクト・メソッドを実行することもできます。
|
|
|
|
|
|
|
|
|
パラメータは、値渡しと参照渡しのいずれの場合もサポートしています。
ルーチン
Caché ObjectScriptコードは、基本的に“ルーチン”というまとまりで構成されます。各ルーチン(通常32KBまで)は、独立して編集、格納、コンパイルを行うという意味において最小単位です。ルーチンは、実行時に動的にリンクされており、プログラマにとって別のリンク・ステップはありません。ルーチンのコードはデータベースに保存されています。したがって、ルーチンはあらかじめ各コンピュータにインストールするのではなく、必要に応じてネットワーク経由で動的に呼び出すことができます。
ルーチン内では、コードは、プロシジャと/あるいはサブルーチンの一式として構成されます(オブジェクト・メソッドはプロシジャですが、さまざまな構文からアクセスできます)。
同じルーチン内のコードを呼び出す場合、プロシジャやサブルーチン名のみが必要です。それ以外の場合、ルーチン名を追加する必要があります。
|
|
|
|
値を返すプロシジャやサブルーチンは、“$$”関数構文を使用して呼び出す必要があります。
|
|
Caché スタジオからルーチンの編集やコンパイルを行います。

オブジェクト・メソッド
クラス定義とそのメソッド・コードは、グローバル・データ・ファイルに格納され、クラス・コンパイラがそれぞれのクラスをルーチンにコンパイルします。メソッドは、オブジェクト構文でのみ呼び出されますが、各メソッドはルーチン内のプロシジャです。例えば、PatientクラスがAdmitメソッドを定義し、Pat変数が特定のPatientオブジェクトを識別する場合、以下の構文を使用して、そのオブジェクトのAdmidメソッドを呼び出します。
|
|
|
|
プロシジャとパブリック/プライベート変数
プロシジャとはルーチン内のコード・ブロックのことで、他の言語の関数と類似しています。プロシジャには、名前、形式パラメータ・リスト、パブリック変数リスト、‘{ }'で区切られたコード・ブロックなどです。例えば以下のようになります。
Admit(x,y)[name,recnum] { ...code goes here}
Caché ObjectScript では、共通の変数とプロシジャ特有の変数があります。プロシジャで使用する変数はプライベート変数で、パブリック・リストにリストされない限り、プライベートとして扱われます。上記の例で、‘name’と‘recnum’はそれぞれの名前でパブリック変数にアクセスしますが、他の全ての変数は、このプロシジャの起動中のみ存在します。‘%’記号で始まる変数名は、常に暗黙的にパブリックです。
プロシジャは、サブルーチンを組み込むことができますが、入れ子にはできません。
サブルーチン
ルーチンは、プロシジャより軽いサブルーチンも組み込むことができます。サブルーチンは、パラメータ・リストを組み込んで値を返すことができます。パブリック・リストあるいは正式なブロック構造はもちません。サブルーチンは、プロシジャ内に埋め込むことができる、あるいはルーチンのプロシジャと同じレベルに置くことができます。
サブルーチンは、呼び出し側と同じ一連のパブリック/プライベート変数を使って呼び出すことができ、より速く呼び出すことができます。プロシジャに埋め込まれたサブルーチンは、プロシジャと同じ変数を使用し、プロシジャ内からのみ呼び出すことができます。プロシージャ外のサブルーチンにおける変数参照は、全てパブリック変数になります。
BASIC
Basicは、世界で最も一般的なアプリケーション・プログラミング言語です。Caché のBasicは、他のCaché アプリケーション・サーバ機能と同様に、データ・サーバの中心となるデータ構造(多次元配列)へのダイレクト・アクセスをサポートするように拡張されています。VisualBasic構文を使用して、Caché オブジェクト・モデルを直接サポートし、Caché 仮想マシンで実行します。
Basicは、クラス・メソッドあるいはCaché ルーチンのどちらとしても使用できます(ルーチンのCaché ObjectScriptの説明を参照)。BasicとCaché bjectScriptは、相互に呼び出すことができ、どちらの言語でもプロセス・メモリ内の同じ変数、配列、オブジェクトにアクセスできます。
配列は以下のように拡張され、さらに強力なりました。
- 配列名の前の‘ ^ ’記号は、データベースの多次元配列
(他のプロセスに共有される永続配列)への参照を意味します。 - 添え字は、文字列、整数、10進数など全てのデータ型が使用可能です。
- データは、同じ配列の複数の添え字レベルに格納できます。(例:A(“colors”)やA(“colors”,3)など)
- 配列の宣言は不要で、常にスパース配列になっています。ノードが挿入された分だけCachéは領域を確保します。
- トラバース(横断)機能は、指定された添え字レベルで、次の(前の)添え字を識別できます。
他の拡張機能は以下の通りです。
- Start、Co㎜it、Rollbackのトランザクション処理コマンド
- データベースで使用するアトミック・インクリメント関数
- Caché アプリケーション・サーバとのよりよい統合を可能とする拡張
Basicのオブジェクト・アクセス
Caché では、クラスはパッケージに組み込まれ、クラス名は後にピリオドがついてパッケージ名に含まれています。例えば、Sample.PersonはSampleパッケージのPersonクラスです。
BasicのNewコマンドを使用してオブジェクトを生成します。
|
|
Basicは、既存オブジェクトにアクセスできるようOpenIDコマンドが追加されました。
|
|
以下は、Personのプロパティにアクセスするコード例です。
|
|
|
|
|
|
データベース・クラスは、Saveメソッドを使用してデータをディスクに保存します。例えば以下のようになります。
person.Save()
初めてオブジェクトが格納される場合には、オブジェクトIDを生成して、Personのデータを保存します。オブジェクトが変更されると(Employerなど)、それらは自動的に保存されます。

MVBASIC
MVBasicは、Basicの一種でCachéに提供されたスクリプト言語のひとつですが、MutiValue(Pick)システム用に書かれたアプリケーションを実行するためのものであり、MultiValueファイルへのアクセスや操作が可能になるなど、他にも様々な機能をサポートしています。
MVBasicはクラスメソッドとしても、またCachéルーチン(Cachéオブジェクトスクリプトの「ルーチン」を参照下さい)としても使用することができます。MVBasicは、Cachéオブジェクトスクリプト、またはBasicを呼び出すことが可能です(その反対も可)。それら3つの言語は、プロセスメモリ内の同じ変数、配列、そしてオブジェクトへアクセスすることが可能です。
Caché MVBasicは、オブジェクトアクセスを含め、Caché Basicと同じ拡張性をもっています。しかしながら曖昧さが起きることが考えられる為、オブジェクト参照のピリオド背パレータ"." ではなく、2つの文字列 "- >" が使われます。
C++
全てのCaché クラスは、Cachéクラスのそれぞれのプロパティに対応するメソッドとクラスのメソッドを、C++のクラスに投影することができます。C++のプログラムからは、それらのクラスを他のローカルのC++クラスと同様に認識します。Cachéは自動的にクライアントとサーバ間の通信を行います。クラスのプロパティはクライアントにキャッシュされ、C++メソッドの呼び出しにより、対応するサーバ側のメソッドを呼び出します――データベースにオブジェクトを格納し、後で取得するメソッドなどを含みます。
JAVA
Javaは、ますます一般的になってきたプログラミング技術ですが、Javaアプリケーションとデータベースの接続は大きな課題です。Javaをリレーショナル・データベースに接続するには、SQLの骨の折れるコーディングが必要です。しかし、これには非常に時間がかかり、Javaがもつオブジェクト技術の多くの利点を損なわせます。どのようにデータに永続性を与えるかを考えずに、オブジェクトを直接格納でき、データベースにアクセスするのにオブジェクト構文を使用するCachéのアプローチは、とてもシンプルで、一般的に好まれる方法です。
Java Supported Several Ways

Enterprise Java Beans(EJB)を好んで使用する開発者がいる一方で、Plain Old Java Objects(POJO)だけしか使用しない開発者もいます。また、初めにデータベース・スキーマを定義し、自動的に各々のデータベース・クラスにJavaクラスを当てはめていく方法を好む者もあれば、初めにJavaクラスを定義し、自動的にCachéでデータベース・スキーマを生成する方法を好む開発者もいます。Cachéはこれら全てのアプローチをサポートしています。
- Caché クラスは、Javaクラスとして投影されるため、プロパティとメソッドはJavaオブジェクトとしてアクセスされます。
- Caché クラスは、EJB(Enterprise Java Beans)としても投影できます。
- JDBCは、完全なJavaベース・ドライバ
(タイプ4)を使用して、高性能なSQLアクセスを提供します。 - インターシステムズ社のJalapeño(ハラペーニョ)テクノロジにより、POJOのクラス定義からCachéのクラスが生成できます。
投影されたクラスからのオブジェクト・アクセス
全てのCaché クラスはJava(EJB)クラスに投影することができます。メソッドは、Cachéクラスのそれぞれのプロパティとメソッドに対応しています。Javaプログラムからは、これらのクラスは他のローカルJavaクラスと同じものとして認識します。生成されたJavaクラスは、インターシステムズが提供するJavaライブラリを使用し、クライアントとサーバ間の通信を行います。
パフォーマンスを最適化するため、クラスのプロパティはクライアントにキャッシュされ、Cachéオブジェクトの状態は、Cachéアプリケーション・サーバに維持管理されます。Javaメソッドは、Cachéアプリケーション・サーバ上の対応するメソッドを呼び出します。データベースにてオブジェクトを格納し、後でそのオブジェクトを取り出すメソッドなどです。どのCachéデータベース・サーバにデータが存在するのか、あるいは、オブジェクト・データが、Cachéアプリケーション・サーバを経由してリレーショナル・データベースに格納されているかさえも、クライアントにとっては、全く透過的です。
Javaで記述されたCaché メソッド
Caché クラスのメソッドは、Caché スタジオを使用してJavaで記述できます。しかし、Caché ObjectScriptやBasicと異なり、Javaメソッドは仮想マシンからは実行されません。代わりに、生成されたJavaクラスに組み込まれ、Java仮想マシンで実行されます。このようなコードは、Java以外のメソッドからはアクセスできません。
J2EEアプリケーションの永続性
EJB(Enterprise Java Beans)を使用するJ2EEアプリケーションの開発者は、データベースにアクセスする必要性が生じるまで、主にオブジェクトを使用して開発します。その後、通常はSQLに戻ることを強いられます。JDBCインタフェースを経由して、Cachéは、そうしたアプリケーションへの高速SQLレスポンスを提供します。しかし、SQLアクセスは一般的には好ましいアプローチとはいえません。
オブジェクト・データベースは、EJBプログラマにとってより自然なアクセス技法です。Caché は、EJBとしてCaché クラスを投影し、自動的にBMP(Bean-Managed Persistence)に高性能な永続メソッドを生成します。これにより、SQLとオブジェクト/リレーショナル・マッピングのオーバーヘッドをなくし、J2EEアプリケーションにより高いスケーラビリティを提供します。
インターシステムズ社のJalapeñoテクノロジもまたJ2EEアプリケーションが使用可能で、同様の利点が得られます。.
"Java-in"開発を可能にするJalapeño
Cachéクラスから開発を始め、Javaコンポーネントへ投影する代わりに、インターシステムズ社のJalapeñoテクノロジでは逆のアプローチをとることができます。Java開発者はオブジェクトクラスを好きな開発環境で定義し、自動的にCachéでこれらのクラスに永続性を与えることが可能です。開発者が作成したJavaクラスは変更されることはありません。Cachéはオブジェクトを格納、検索に使用するAPIを備えたライブラリクラスを提供し、開発者のクラスに対してクエリを実行します。
Cachéの利点柔軟性 パフォーマンス J2EEとのネイティブな互換性による迅速な開発 |
CACHÉ AND JALAPEÑO
現在、Java 開発者は新しいデータベース・アプリケーションを作成する際にいくつかの問題を抱えています。Java開発者は、通常、SQL を使用して標準のリレーショナル・データベースにデータを保存します。この方法では、リレーショナル構造に Java オブジェクトをマップし、SQL クエリを記述してデータにアクセスする必要があります。これは時間がかかる複雑な作業であることが多く、これらの作業をすべて行うと、開発の過程で相当の時間を割かれることになります。代案としてオブジェクト・データベースを使用することも考えられますが、オブジェクト・データベースではSQL および SQL ベースのレポート・ツールがサポートされていないことが多く、スキーマ定義も必要になります。
Jalapeño (JAva LAnguage PErsistence with NO mapping) は、オブジェクト・アクセスを使用して堅牢な Cachéオブジェクト・データベースでオブジェクトを容易に扱うことを可能にし、同時にそのデータに高性能な SQLでアクセスできるようにするインターシステムズのテクノロジです。オブジェクトは、プロパティやリレーションシップなどを持つ実際のオブジェクトとしてデータベースに保存されますが (オブジェクトのシリアル化状態を単純に保存するなどの方法はとりません)、オブジェクトのリレーショナル・マッピングは必要ありません。
Jalapeño を使用すると、Java開発者は Java IDE を選択し、他の POJO クラスと同様にデータベース・クラスを作成できます。次に、どのクラスがデータベース・クラスであるのかをJalapeño に指示します。一般的には、Jalapeño 永続性ライブラリで提供される開発者のIDE へのプラグインを使用して指示します。Jalapeño はこのクラスを解析し、対応するオブジェクト(および SQL) データベースのスキーマを自動的に作成し、このオブジェクトの保存および検索するためのすべてのランタイムサポートを生成します。
開発者が持つ POJO クラスは変更されないので、引き続き開発者の手でクラスを変更できます。
実行時のアプリケーションは、通常の方法で POJO オブジェクトのプロパティとメソッドに直接アクセスします。データベース・オブジェクトを保存および取得する場合、アプリケーションは Jalapeño で提供される"ObjectManager" クラスの API を使用します。ObjectManagerクラスには、データベースへの接続の確立、SQL クエリのサポート、トランザクション・セマンティクス (開始、コミット、ロールバックなど)を提供するメソッドも用意されています。
プロパティやそのタイプのリストなどのクラスの簡単な記述だけでは、データベースに要求する内容をすべて記述するには不十分です。少なくともオブジェクトID を含むプロパティを指定する必要があります。一般的には、クエリの効率を上げるためにインデックスも指定する傾向にあります。開発者は、Javaソース・ファイルに標準の Java アノテーションを付加することにより、プロパティやインデックスを初めとするデータベースの仕様を指定できます。
さらに、Jalapeño は "スキーマ・エボリューション"をサポートしています。スキーマ・エボリューションでは、新しいプロパティを追加したり、プロパティ定義を変更するなど、引き続きクラスを修正でき、すでに入力済みのデータを無効にすることなく、スキーマ定義を適応できます。これにより、スムーズで反復可能な開発プロセスが実現します。
Jalapeño は Caché と連携した場合に最高の機能を発揮しますが、標準の DDL (データ定義言語) を使用して、対応するリレーショナル・スキーマにデータベース・スキーマをエクスポートすることもできます。したがって、オブジェクト・アクセスを使用するように Caché で構築されたアプリケーションでも、リレーショナル・データベースに配備できます。この場合、Jalapeño ObjectManager API では、データベースへの接続に標準の JDBC 呼び出しが自動的に使用されます。Cachéオブジェクト・データベースに接続する場合、高性能なオブジェクト・ベースのプロトコルが使用されます。
Jalapeño ライブラリは標準の Javaで実装され、Java 1.5 以上の JVM、あるいは J2EE アプリケーション・サーバ環境で実行されます。
Jalapeño を使用すると、Java開発者はアプリケーションの UI やビジネス・ロジックに集中し、他のクラスと同様にデータベース・クラスを作成して、それ以外の処理はCaché に任せることができます。
以下に、Customer オブジェクトを取得して、その電話番号を"set" メソッドで変更した後、データベースを更新し、メモリ内のオブジェクトを閉じる例を示します。
|
Cachéの利点オブジェクト・リレーショナル・マッピングを必要としない、短期間で無理のない開発 POJOの継続的な使用が容易 SQL アクセス データベースとプラットフォームの独立
|
Cachéと.NET
オープンで柔軟なデータ・アクセスにより、Cachéは.NETをスムースに利用することができます。オブジェクト、SQL、XML、SOAPなど、その2つを接続する多くの方法があります。開発者は、好みの技術を使用してアプリケーションの開発が可能です――その全てにCaché の優れたパフォーマンスやスケーラビリティという利点がもたらされます。
ADO.NET
ADO.NETはADOの新しい形式で、.NETフレームワークでの使用に最適化されています。.NETアプリケーションの“データベースに非依存”を意図しています。ADOのように、Cachéで運用するために、Caché のリレーショナル・データ・アクセスを使用します。
リレーショナルデータアクセスですが、Caché は、ADO.NETをネイティブでサポートしています。また、マイクロソフト ODBC.NETおよび ADO.NETに構築するリードオンリSOAP接続もサポートしています。
Webサービス
.NETには、2種類のWebサービスの方法があります。1つは、HTTPからXMLドキュメントを送信する方法と、もう1つは、SOAPプロトコルを使用して、XMLドキュメント交換を簡素化する方法です。両方のサービスで、Caché はXMLあるいはSOAPドキュメントとしてデータを公開することができるため、.NET Webサービスとシームレスに連動します。
Caché Managed Objects
Caché は、Caché オブジェクトクラスから、.NETアッセンブリ(あるいは、Visual BasicまたはC#ソースコード)を自動生成します。Visualスタジオの開発環境を使って、簡単なアクセスとCaché のManaged .NETプロジェクションを使用したい開発者に対しては、Visualスタジオのプラグインを提供しています。
Caché の利点高速データ 生産性 |
CACHÉ AND XML
HTMLが、データを表示するためのインターネット互換のマークアップ言語であるように、XMLは、アプリケーション間のデータを交換するためのマークアップ言語です。XMLを使用すると、(企業内や異なる企業間の)異なるアプリケーションで、ネットワークを介してデータを共有できます。XMLデータは階層的な多次元構造になっており、Caché 多次元データ・エンジンとの親和性が高くなっています。
XMLのエクスポート
Caché クラスとXMLとの互換性を維持するためにすることは、Caché にある%XMLAdaptorクラスからXMLを継承するだけです。これにより、以下のことを行うのに必要なメソッドの全てを提供します。
- クラスにDTD(文書型定義)かXMLスキーマのいずれかを生成する。DTDとスキーマは、XMLデータ構造を定義する文書です。Cachéは、自動的にDTDとXMLスキーマを生成しますが、クラスのXML形式をカスタマイズしたい場合は開発者自身が行うことも可能。
- 定義済みのDTDあるいはスキーマに沿って、XMLとして(クラスのインスタンス)データを、自動的にフォーマットする。
XMLのインポート
Caché は、開発者が以下を実行できるメソッドを提供する、他のクラスを搭載しています。
- XMLスキーマのインポートと、対応するCachéクラスの自動生成
- 単純なAPIで、Caché クラスのインスタンスとしてXMLドキュメント内のデータをインポート
- 組み込みのXML(SAX)パーサによるXMLドキュメントの解析と検証
Caché とWebサービス
Webサービスを使うと、インターネットを介しあるいは組織やシステム内で、アプリケーションの機能を共有することができます。そのインタフェースはWSDL(Webサービス定義言語)で記述され、SOAPプロトコルに沿ってフォーマットされたXMLドキュメントを返します。
Caché は、あらゆるクラス・メソッド、SQLストアド・プロシジャ、クエリを、Webサービスとして自動的に公開することができます。Cachéは、Webサービス用にWSDL記述子を生成し、サービスが呼び出されると、SOAP/XMLに適切にフォーマットされた応答を返します。また、サービスをテストするために、Webページを自動的に生成することで、クライアント・アプリケーションを構築する必要もなく、迅速な開発が可能になります。
Cachéの利点XMLへの簡単な接続 高速XMLアプリケーションの迅速な開発 インスタントWebサービス |
CachéとMultiValue
Caché は、MultiValue アプリケーション (Pick ベース・アプリケーションとも呼ばれる) の開発と実行に必要な機能をすべて備えています。MultiValue の機能は次のとおりです。
- MVBasic 言語
- ファイル・アクセス
- クエリ言語
- データ・ディクショナリ
- “procs”
- コマンド・シェル
この MultiValue 機能は、MultiValue の独立した実装としてではなく、Caché の一部として提供され、Cachéの高度な多次元データベース・エンジン、実行時機能、および開発テクノロジを使用しています。これは、MultiValue ユーザが、すべてのCaché 機能を最大限に利用できることを意味します。
MultiValue のファイル・アクセス
MultiValue アプリケーションは、通常、レコードの読み取りと書き込みの処理、および MultiValueクエリによってアクセスするファイルのセットとしてデータベースを扱います。Caché での MultiValue ファイルは、各レコードが 1つのグローバル・ノードである多次元 "グローバル" 構造として保存されます。この機能は、グローバル・ノードごとに複数のデータ要素を保存するCaché の機能に依存しています。
例えば、送り状を保存する MultiValue ファイルの構造が次のようになっているとします。
Invoice # |
Item ID |
Customer |
Attribute 1 |
InvoiceDate |
Attribute 2 |
Parts |
Attribute 3 (MultiValued) |
Quantities |
Attribute 4 (MultiValued) |
Prices |
Attribute 5 (MultiValued) |
… |
… |
Caché 内部では、この MultiValue ファイルを、次のように等価的な多次元グローバル構造として表します。
^Invoice(invoice #) =
Customer ^ InvoiceDate ^ PartNo1 ] PartNo2 ^ Quantity1 ] Quantity2 ^ Price1 ] Price2
「^」は標準属性の区切り文字 (ASCII 254) を表し、「]」はサブ属性の区切り文字 (ASCII 253) を表します。
MultiValue ファイルには、通常の READ コマンドと WRITE コマンド、および MultiValueクエリを使用して、MultiValue プログラムからアクセスできます。また、オブジェクト・アクセス、多次元配列への直接アクセス、SQLなど、Caché のあらゆる通常のメカニズムを使用して、MVBasic などの言語によってアクセスすることもできます。
MultiValue ファイルには、さまざまなインデックス・タイプ (ビットマップ・インデックスなど) や照合順序を付けてインデックスを作成できます。
MultiValue クエリ言語
MultiValue クエリ言語は、MultiValueファイルのデータ選択とレポート形式機能を提供します。クエリ言語は、MVBasic、コマンド・シェル、および "procs"で使用できます。Caché は、MultiValue クエリを Caché SQLクエリに変換し、相関機能、レポート形式機能などの各種機能をサポートするコードを追加します。これらのクエリでは Caché のきわめて高性能なSQLエンジンが使用されるため、信頼性の強化や実行の最適化が実現し、精度の高い一連のインデックス機能を使用できます。もちろん、MultiValue開発者は、必要なときに Caché SQL を直接使用することもできます。
MultiValue データ・ディクショナリ
MultiValue ファイルには、MultiValue データ・ディクショナリ内に対応するファイルの記述があります。これは、MVBasicコードや従来の MultiValue "ED" エディタで直接編集できます。MultiValueクエリ言語は、このディクショナリを使用しています。
MultiValue ファイルには、対応する Caché クラス定義もあります。クラス定義は、オブジェクト・アクセスまたは SQLアクセスでデータを使用可能にする場合に不可欠です (MultiValueクエリ言語を使用する必要はありません)。また、ファイルのインデックスを作成するときもクラス定義が必要になります。
古い MultiValue アプリケーションをインポートする場合は、MultiValue ディクショナリから Cachéクラス定義を自動的に作成できます。ただし、SQLアクセスまたはオブジェクト・アクセスが必要なときにデータをさらに有益なものにするには、ほとんどの場合、作成されたクラスを編集する必要があります。スタジオのウィザードを使用すれば、MVディクショナリからのクラス作成を自動化でき、後からマッピングもできます。デフォルトでは、これらのクラスは (データを読み取ることはできても、オブジェクトや SQL で更新できないように) 読み取り専用になっているため、MVディクショナリから個別に編集します。
新しい MultiValue ファイルを作成するときは、まず MVAdaptor スーパークラスを継承する Cachéクラスを作成することをお勧めします。これにより、データ保管用に MultiValueと互換性のあるファイル形式が使用され、MultiValueデータ・ディクショナリ内にファイルの記述が自動的に作成されます。オブジェクト・アクセス、SQLアクセス、および多次元グローバルへの直接アクセスなどのあらゆる Cachéアクセス手段を使用して、ファイルのデータへのアクセスとその更新が可能になります。したがって、開発者は通常、MultiValueディクショナリではなく、クラス定義を編集することが普通です。これは、クラスの編集が MultiValue ディクショナリに自動的に反映されるからです。
MultiValueとオブジェクト
MVBasicは、オブジェクトアクセスを表現するのに、ピリオドではなく'- >'構文を使用する以外は、Basicと同様の方法でオブジェクトを使用する拡張性を持っています。クラスのメソッドで使われている言語とは関係なく、クラスディクショナリの中のどのクラスでも使用することができます。
以下は'Person'がオブジェクト参照をしている場合のコード例です。
|
|
|
|
|
|
|
|
MultiValueコマンドシェル
MultiValueコマンドシェルは、ターミナル環境から実行されます。通常のMultiValueコマンドシェルの機能に加え、CachéではMVBasicのコマンドを直接コマンドシェル内で実行することができます。以下は、実行例です。
:; DIM A(34)
:; FOR I = 1 TO 34 ; A(I) = I; NEXT
:; FOR I = 1 TO 34 ; CRT A(I):” “: ; NEXT
以下のような結果が呼び出されます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
Cachéの利点古いアプリケーションを活性化 新しいアプリケーションを迅速に構築 MultiValueユーザへ、優れた信頼性、高パフォーマンス、拡張性を提供 |
|
第3章: |
