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é は、オペレーティング・システムやハードウェア上の全ての違いを自動的に処理します。

A Failover Cluster

 

Cachéの利点

迅速なアプリケーション開発
Caché ObjectScriptでの複雑なデータベース・アプリケーション開発は、他の主要言語に比べ画期的に速くなります――10倍から100倍以上速く行える場合がよくあります。迅速とは、プロジェクトの成功率が高くなることを意味します――少人数の開発者で、アプリケーションの変更が必要なときに、迅速に対応できます。

短期間での習得
Basicは、世界で最も一般的に知られているコンピュータ言語です。Visual Basicになじみのある開発者は、Basicでのコードの記述やCachéオブジェクト・モデルを簡単に学習できます。

高速でスケーラブル
データベースにダイレクト・アクセスできるCaché 仮想マシンは、低価格ハードウェアで数万ものユーザまで使用可能な、高速アプリケーションを提供します。

柔軟性
Caché 仮想マシンで実行するコードは、変更なしに他のハードウェアやオペレーティング・システムで実行できます。コードは、データベースに格納され、自動的にアプリケーション・サーバに送信されます。

 

CACHÉ OBJECTSCRIPT

Caché ObjectScriptは強力なオブジェクト指向プログラミング言語で、データベース・アプリケーションを迅速に開発するように設計されています。この言語の重要な特徴は以下の通りです。

構造の概要

Caché ObjectScriptはコマンド指向であるため、例えば、以下のような構文をもちます。

set x=a+b
do rotate(a,3)
if (x>3)

テキスト処理のために特に有用な、組み込みのシステム関数一式をもっています。それらの名前は全て記号'$'で始まり、変数と配列名を区別します。例えば以下のようになります。

$extract(string,from,to)  

// get a set of characters from a string

$length(string)

// determine the length of a string

 

演算式の処理は電卓のように左から右に順次実行されますが、括弧により、実行順序を制御できます。

柔軟なデータ格納構造

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”)

これらは全て同じ配列に格納されてます。

データベースのダイレクト・アクセス

Direct Accessグローバル参照というデータベースへの直接参照は、本質的には、山形記号「^」で始まる多次元配列の参照です。この記号は、一時的なプライベート・データ処理ではなく、データベース内のデータ参照を示します。各データベース配列を、グローバルと呼びます。

多次元配列や変数は、宣言、定義、ストレージの事前確保を行うことなく、データベースのデータのアクセスや保存ができます。グローバル・データは、単純に現われ、データの存在する場所に格納されます。例えば、データベースにデータを格納するのに、以下のように記述することができます。

set ^Person(“Smith”,”John”)=”I’m a very good person”

また、後にデータを取り出すときには、以下のコードを使用することができます。

set x=^Person(“Smith”,”John”)

プログラマは、グローバル・データ配列のデータ構造を全く自由につくることができます
多次元データ・モデルを参照)。

オブジェクト参照

Caché ObjectsはODMGのデータ・モデルに準拠していますが、強力な機能拡張もあります。

Caché ObjectScriptでは、オブジェクトにアクセスするときに“oref”(参照するオブジェクトを指定する変数値)を使用します。“oref”の後に、ドット記号がきて、次にプロパティ名かメソッドがきます。オブジェクト参照は、表現式が使われるどこにでも使用できます。

set name=person.Name

// 'person' is a variable whose value is an oref

// the person’s name is put into
// the variable ‘name’

if (person.Age>x)

// see if the person’s age is
// greater than ‘x’

set money=invoice.Total()

// ‘Total()’ is a method that
// calculates the sum of

// all of the invoice’s
// line items

 

戻り値が不要の場合、DOコマンドでメソッドを実行できます。例えば以下のようになります。

do part.Increment()

// ‘Increment()’ is a method whose
// return value, if any,
// is not of interest

 

“oref”は、データベース・オブジェクトIDとは異なります。オブジェクトIDは、データベース・オブジェクトに永続的に結びつける値で、データベース・オブジェクトの検索と保存に使用します。オブジェクトをメモリ上にロードすると、再利用可能なoref値を割り当て、そのオブジェクト・データにアクセスするために使われます。その後、同じデータベース・オブジェクトがメモリ上に読み込まれた場合、異なるoref値を割り当てます。

Caché Technology Guide

HTMLとSQLアクセス方法

Webアプリケーションを構成するHTMLとSQLコマンドは、Caché ObjectScriptコードに埋め込むことができます。

コードの呼び出し

オブジェクト指向言語の中には、コードを全て、メソッドの一部として組み込まなければならないものもあります。Caché ObjectScriptにそのような制限はなく、コードは直接あるいはオブジェクト構文から、しばしば呼び出すことができます。

コードは、DOコマンドによって実行される場合もあります。

do rotate(a,3)

値を返すコードは、関数としても呼び出されます。以下はその例です。

set x=a+$$insert(3,y)

これは、プログラマが書いたプロシジャあるいはサブルーチン“insert”を呼び出しています。

コードは、オブジェクト・メソッドを実行することもできます。

set money=invoice.Total()

// Total() returns the

// invoice total amount due

do part.Increment()

// ‘Increment()’ is a method

// whose return value,

// if any, is not of interest

パラメータは、値渡しと参照渡しのいずれの場合もサポートしています。

ルーチン

Caché ObjectScriptコードは、基本的に“ルーチン”というまとまりで構成されます。各ルーチン(通常32KBまで)は、独立して編集、格納、コンパイルを行うという意味において最小単位です。ルーチンは、実行時に動的にリンクされており、プログラマにとって別のリンク・ステップはありません。ルーチンのコードはデータベースに保存されています。したがって、ルーチンはあらかじめ各コンピュータにインストールするのではなく、必要に応じてネットワーク経由で動的に呼び出すことができます。

ルーチン内では、コードは、プロシジャと/あるいはサブルーチンの一式として構成されます(オブジェクト・メソッドはプロシジャですが、さまざまな構文からアクセスできます)。

同じルーチン内のコードを呼び出す場合、プロシジャやサブルーチン名のみが必要です。それ以外の場合、ルーチン名を追加する必要があります。

do transfer()

// calls ‘transfer’ in
// the same routine

do total^invoice()

// calls ‘total’ in the
// routine "invoice"

 

値を返すプロシジャやサブルーチンは、“$$”関数構文を使用して呼び出す必要があります。

set x=$$total^invoice()

// calls the same ‘total’
// procedure but uses the
// return value

Caché スタジオからルーチンの編集やコンパイルを行います。

Caché Technology Guide

 

オブジェクト・メソッド

クラス定義とそのメソッド・コードは、グローバル・データ・ファイルに格納され、クラス・コンパイラがそれぞれのクラスをルーチンにコンパイルします。メソッドは、オブジェクト構文でのみ呼び出されますが、各メソッドはルーチン内のプロシジャです。例えば、PatientクラスがAdmitメソッドを定義し、Pat変数が特定のPatientオブジェクトを識別する場合、以下の構文を使用して、そのオブジェクトのAdmidメソッドを呼び出します。

do Pat.Admit()

// Call the admit method
// for Patient

set x = Pat.Admit()

// Calls the same method
// but uses the return value

 

プロシジャとパブリック/プライベート変数

プロシジャとはルーチン内のコード・ブロックのことで、他の言語の関数と類似しています。プロシジャには、名前、形式パラメータ・リスト、パブリック変数リスト、‘{ }'で区切られたコード・ブロックなどです。例えば以下のようになります。

Admit(x,y)[name,recnum] { ...code goes here}

Caché ObjectScript では、共通の変数とプロシジャ特有の変数があります。プロシジャで使用する変数はプライベート変数で、パブリック・リストにリストされない限り、プライベートとして扱われます。上記の例で、‘name’と‘recnum’はそれぞれの名前でパブリック変数にアクセスしますが、他の全ての変数は、このプロシジャの起動中のみ存在します。‘%’記号で始まる変数名は、常に暗黙的にパブリックです。

プロシジャは、サブルーチンを組み込むことができますが、入れ子にはできません。

サブルーチン

Subroutinesルーチンは、プロシジャより軽いサブルーチンも組み込むことができます。サブルーチンは、パラメータ・リストを組み込んで値を返すことができます。パブリック・リストあるいは正式なブロック構造はもちません。サブルーチンは、プロシジャ内に埋め込むことができる、あるいはルーチンのプロシジャと同じレベルに置くことができます。

サブルーチンは、呼び出し側と同じ一連のパブリック/プライベート変数を使って呼び出すことができ、より速く呼び出すことができます。プロシジャに埋め込まれたサブルーチンは、プロシジャと同じ変数を使用し、プロシジャ内からのみ呼び出すことができます。プロシージャ外のサブルーチンにおける変数参照は、全てパブリック変数になります。


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コマンドを使用してオブジェクトを生成します。

person = New Sample.Person()

// creates a new
// Person object

 

Basicは、既存オブジェクトにアクセスできるようOpenIDコマンドが追加されました。

person = OpenID Sample.Person(54)

// opens the Person
// object with OID 54

 

以下は、Personのプロパティにアクセスするコード例です。

person.Name = ”Smith, John”

// sets the person’s name

person.Home.City

// references the
// person’s home city

person.Employer.Name

// brings the person’s
// employer object into

// memory and accesses
// the employer’s name

 

データベース・クラスは、Saveメソッドを使用してデータをディスクに保存します。例えば以下のようになります。

person.Save()

初めてオブジェクトが格納される場合には、オブジェクトIDを生成して、Personのデータを保存します。オブジェクトが変更されると(Employerなど)、それらは自動的に保存されます。

Caché Technology Guide

 

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
Caché & Java Access

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éの利点

柔軟性
Javaの開発者は、Cachéオブジェクトのアクセスに関して、SQLかJDBC、もしくは、JavaクラスやEJBをオブジェクトに投影するなどの選択肢があります。(35)Javaの開発者は、Cachéオブジェクトのアクセスに関して、SQLかJDBC、もしくは、JavaクラスやEJBをオブジェクトに投影するなどの選択肢があります。Jalapeñoを使えば、好きなJavaの開発環境で全ての開発を行うことができます。Cachéは、開発者が作成したクラスを変更することなく、自動的にデータベースからオブジェクトを格納、検索するためのメソッドを生成します。

パフォーマンス
Caché への接続方法に関係なく、全てのJavaアプリケーションは、Cachéの優れたパフォーマンスとスケーラビリティという利点を得ることができます。

J2EEとのネイティブな互換性による迅速な開発
J2EE開発者は、Caché のポストリレーショナル・データベースと接続できるシンプルな方法があり、Cachéクラスは、EJBクラスとして簡単に投影できます。Caché クラスがBMP(Bean-Managed Persistence)により投影されると、Caché は自動的にEJBを使用してCachéデータベースにアクセスするメソッドを生成します。開発者は、永続メソッドを手作業でコーディングする必要がなく、アプリケーションをすばやく完成することができます。

 

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" メソッドで変更した後、データベースを更新し、メモリ内のオブジェクトを閉じる例を示します。

Customer customer = (Customer) objectManager.openById(Customer.class, customerId);
customer.setPhoneNumber("16176210600");
objectManager.update(customer, true);
objectManager.close();

Cachéの利点

オブジェクト・リレーショナル・マッピングを必要としない、短期間で無理のない開発
Jalapeño では POJO クラスの内省機能を利用して、オブジェクト・データベース・スキーマが自動的に作成されます。データはオブジェクトとして保存され、このデータの標準SQL 表現も自動的に作成されます。オブジェクト・リレーショナル・マッピングが不要であるため、開発期間の短縮が可能です。

POJOの継続的な使用が容易
開発者は、アプリケーション内で他のクラスと同様にデータベース・クラスにアクセスできます。Jalapeñoは、実行時 API を使用してデータベースのオブジェクトを保存および取得するためのすべてのコードを生成します。

SQL アクセス
開発者がオブジェクト・リレーショナル・マッピングを行わなかった場合でも、Jalapeñoの JDBC API を使用すれば、データベース内のすべてのオブジェクトに SQL で自動的にアクセスできます。

データベースとプラットフォームの独立
Caché は主要なプラットフォームで使用できます。Jalapeño は Caché と連携した場合に最高の機能を発揮しますが、標準の DDL を使用して、対応するリレーショナル・スキーマにデータベース・スキーマをエクスポートすることもできます。したがって、オブジェクト・アクセスを使用するように Caché で構築されたアプリケーションでも、リレーショナル・データベースに配備できます。

 

 

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é を使用するWebアプリケーションは、Caché 多次元データ・エンジンが提供する高性能で優れたスケーラビリティという利点を得ます。

生産性
開発者は、慣れ親しんだ環境で好みのツールを使用するとき、より生産性が向上します。SQLとオブジェクト・データ・アクセスの両方を提供することで、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への簡単な接続
Caché の多重継承という機能の利点により、Caché クラスはXMLと双方向のインタフェースを備えることができます。その結果、Cachéクラスは、XMLドキュメントとスキーマに素早く簡単に変換できます。同様に、XMLスキーマとドキュメントは、Cachéクラス定義とオブジェクトに変換できます。

高速XMLアプリケーションの迅速な開発
Caché に生来的に備わる多次元データ構造は、XMLドキュメントとの適合性に優れ、開発者はXMLとCachéドキュメントのデータ交換のための“マップ”を、手動でコーディングする必要はありません。したがって、XMLを利用可能なアプリケーションを迅速に開発できます。また、処理のオーバーヘッドも少なく、アプリケーションも高速です。

インスタントWebサービス
Caché メソッドは、わずか数回のマウスの操作でWebサービスとして公開できます。Caché は自動的にWSDL記述子を生成し、サービスが呼び出されたSOAPレスポンスを自動生成します。

 

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'がオブジェクト参照をしている場合のコード例です。

person->Name = "Smith, John" 

// sets the person’s name

person->Home->City 

// references the
// person’s home city

person->Employer->Name

// brings the person’s employer object into
// memory and accesses the employer’s name

person->Save()

// saves the person to disk

 

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éの利点

古いアプリケーションを活性化
Cachéは古いMultiValueのアプリケーションをブラウザインターフェース、オブジェクトアクセス、堅牢なSQLとWebサービスで活性化させます。MultiValueアプリケーションは、要求の多い環境下でその力を発揮し、常に進化し続ける先進的なデータベースとして存在し続けています。

新しいアプリケーションを迅速に構築
MultiValueはCaché上で言語やファイルアクセスとして実装されるので、Cachéが本来持っている全ての機能を使用して、新機能を迅速に構築することができます。MultiValueのプログラマは、MVBasic言語を使いながらでも、オブジェクトプログラミングの利点を活用し、他のアプリケーションとやりとりすることができます。

MultiValueユーザへ、優れた信頼性、高パフォーマンス、拡張性を提供
CachéはMultiValueユーザへ、劇的に高いパフォーマンスと拡張性を提供します。加えて、Cachéは病院のように、24時間稼動で、ダウンタイムが許されない状況で使われています。Cachéは高度なジャーナリングとトランザクションプロセスを提供する“強靭なデータベース”であり、且つフォルト・トレランスの構成をとることができます。

 



Previous Page

前ページ
第2章

第3章:
Cachéアプリケーション・サーバ

次ページ
第4章

Next Page