この章では、Coherenceの問合せ言語(CohQL)を使用してCoherenceキャッシュと相互作用する方法について説明します。CohQLは、新しい軽量な構文(SQLに似た)で、Coherenceクラスタ上でキャッシュ操作を実行するのに使用します。この言語は、プログラムからでも、コマンドライン・ツールからでも使用できます。
この章は次の各項で構成されています。
注意:
|
次の各項では、CohQLの機能について説明します。各項では、特に記述文、その構文、および例について説明します。問合せの例は、「その他のCoherenceの問合せ言語の例」を参照してください。
注意: 現在のCohQLのリリースでは、サブ問合せはサポートされていません。 |
この項は、次のトピックで構成されています。
詳細は、Coherence問合せ文、句、式をアルファベット順に示している表24-1を参照してください。
表24-1 Coherenceの問合せ言語の文
この文、句、または式 | 参照先の項 |
---|---|
BACKUP CACHE |
|
バインド変数 |
|
CREATE CACHE |
|
CREATE INDEX |
|
DELETE |
|
DROP CACHE |
|
DROP INDEX |
|
ENSURE CACHE |
|
ENSURE INDEX |
|
GROUP BY |
|
INSERT |
|
key()擬似関数 |
|
パス式 |
|
RESTORE CACHE |
|
SELECT |
|
SOURCE |
|
UPDATE |
|
value()擬似関数 |
|
WHERE |
|
この項では、構文の一部の構成要素(パス式、バインド変数、擬似関数など)について説明します。
CohQLのメインの構成要素にパス式があります。パス式は、オブジェクトのインスタンスのグラフを介して移動する際に使用されます。パス式の識別子を使用して、Java Bean感覚でプロパティを表現します。これは、先頭にget
を付加し、最初の文字を大文字にして作成される、ReflectionExtractor
によってバッキングされます。各要素は「ドット」(.
)文字で区切られ、オブジェクトのトラバースを表現しています。たとえば、次のパス式はオブジェクト構造を移動するのに使用します。
a.b.c
これは反射的に次のメソッドを起動します。
getA().getB().getC()
プログラム的に使用する場合には、APIは文字列を単純な一連の問合せ関数に渡します。変数の値を渡し、文字列を連結しない場合には、バインド変数を使用します。バインド変数には、2つの異なる形式があります。
疑問符(?): 疑問符を入力する場所は、位置を示すプレースホルダーを表す数字の直後です。このプレースホルダーにより、問合せを実行する前に提供されたオブジェクトのコレクションの索引が作成されます。この形式の構文は、?
nで、この場合nに任意の数字を使用できます。位置を示すバインド変数は、フィルタの構成でQueryHelper
クラスによって使用されます。例:
QueryHelper.createFilter("number = ?1" , new Object[]{new Integer(42)};
コロン(:): コロンを入力する場所は、キー値のペアとして提供されるオブジェクトの名前付きプレースホルダーとして使用される識別子の直後です。この構文は、:
identifierで、この場合identifierは英数字の組合せで、アルファベット文字で開始します。名前付きのバインド変数は、フィルタの構成でQueryHelper
クラスによって使用されます。例:
HashMap env = new HashMap(); env.put("iNum",new Integer(42)); QueryHelper.createFilter("number = :iNum" , env};
QueryHelper
クラスとフィルタのプログラム的な構成の詳細は、「Javaプログラムにおけるフィルタの作成」を参照してください。
多くのユーザーがオブジェクトをkey
プロパティで格納するため、CohQLでは、key()
擬似関数が用意されています。key()
はキャッシュのキーを表しています。問合せ構文でもvalue()
擬似関数が用意されています。value()
は、key()
で開始されない連鎖内では暗黙的です。key()
擬似関数とvalue()
擬似関数は、通常、WHERE
句で使用され、この句ではキーやキャッシュ・エントリの値がテストされます。key()
とvalue()
の使用例は、「KeyおよびValue擬似関数の例」および「コマンドラインの例」を参照してください。
意味的には必要はありませんが、CohQLはコード・アーティファクトをできるだけJPQLへ移植できるようにするために別名をサポートしています。CohQLは、キャッシュ名と、SELECT
コマンド、UPDATE
コマンド、DELETE
コマンドのドット付きパス式の先頭に続く別名をサポートします。CohQLでは、キャッシュの別名をvalue()
擬似関数の代用およびkey()
擬似関数に対する引数として使用することも可能です。
通常、リテラル引数(cache-name
またはservice-name
など)を引用符で囲む必要はありません。引数に演算子(-
、+
、.
、<
、>
、=
など)や空白が含まれる場合にのみ、引用符(一重または二重)が必要となります。
ファイル名も引用符で囲む必要があります。ファイル名には、通常、パス・セパレータ(/
または\
)およびドットが含まれ、名前が拡張子から区切られます。
コンパイラがunquotedリテラル引数、または問題のある文字が含まれるファイル名を発生する場合には、コンパイラはエラーをスローします。
次の項では、SELECT
文およびWHERE
句について説明します。これらのエンティティは、ほとんどのキャッシュ問合せの基本的な構成要素です。
SELECT
文は、問合せの基本的な構成要素で、キャッシュからデータを取得することを示しています。句は、単純なまたは複雑なパス表現、主要な式、変形関数、複数の式、集計関数などのいくつかの形式を取ることができます。SELECT
文は、別名の使用もサポートします。
SELECT
文の形式は、次のとおりです。
SELECT (properties* aggregators* | * | alias) FROM "cache-name" [[AS] alias] [WHERE conditional-expression] [GROUP [BY] properties+]
アスタリスク(*
)文字は、サブパスのかわりに完全なオブジェクトを表します。cache-name
を持つパスを接頭辞として指定する必要はありません。SELECT
文のFROM
部分は、問合せによりその結果が引き出されるドメインを形成するキャッシュをターゲットとします。cache-name
は、既存のキャッシュの名前です。
その他の例は、「フィルタを強調表示する単純なSELECT * FROM文」を参照してください。
次に例を示します。
キャッシュのdept
から項目を選択します。
select * from "dept"
WHERE
句を使用して、結果セットから返されるエントリをフィルタリングします。CohQLの主要機能の1つは、パス式を使用して、式の評価の際にオブジェクト構造を移動できることです。条件式では、論理演算子、比較式、フィールドのプリミティブおよび関数演算子などを使用できます。
WHERE
句のリテラル構文では、一重引用符を使用して、文字列のリテラルを囲むことができます。その引用符の前に別の一重引用符を接頭辞にして、文字列内でエスケープできます。数式は、Javaプログラミング言語の表記規則に従って定義されます。ブール値は、リテラルのTRUE
とFALSE
で表されます。日付リテラルはサポートされていません。
注意: CohQLには、型情報に対するアクセス権が付与されていません。つまり、ゲッターがリテラルのタイプとは異なる数値型を返した場合、比較の演算子のtrue を想定した部分にfalse を取得することがあるということです。これを回避するには、リテラルの型で、long にはl を、double にはd を、またshort にはs を指定します。デフォルト値は、ピリオド(. )なしのリテラルに対してはInteger で、ピリオド(. )付きのリテラルに対してはFloat です。 |
WHERE
句内の演算子の優先順位は、次のとおりです。
パス演算子(.
)
単項の+
および-
乗算(*
)および除算(/
)
足し算(+
)および引き算(-
)
比較演算子: =
、>
、>=
、<
、<=
、<>
、[ NOT
] BETWEEN
、[ NOT
] LIKE
、[ NOT
] IN
、IS
[ NOT
] NULL
、CONTAINS
[ ALL
| ANY
]
論理演算子(AND
、OR
、NOT
)
WHERE
句は、言語レベルで算術のみをサポートします。
BETWEEN
演算子を条件式で使用して、式の結果が値の包括範囲内に含まれるかどうかを判断できます。数値の式、または文字列の式は、この方法で評価できます。形式は、BETWEEN
lower
AND
upper
となります。
LIKE
演算子は、"_
"および"%
"のワイルドカードを使用できます。
IN
演算子を使用して、単一の値のパス式がコレクションのメンバーかどうかを確認できます。このコレクションは、インラインリストとして定義されているか、バインド変数として表されています。インラインリストの構文は、次のとおりです。
"("
literal
*
")
"
CONTAINS [ ALL | ANY ]
は、Coherenceデータ・モデルで通常非正規化データが使用されるため、非常に便利な演算子です、 CONTAINS
演算子を使用して、多値のパス式に指定した値が含まれているどうかを判断できます。例:
e.citys CONTAINS "Boston"
CONTAINS
のALL
およびANY
形式は、IN
演算子と同じ構文を持つインラインリストまたはバインド変数となります。
注意: Coherenceで用意されているプログラムのAPIを使用すると、WHERE 句の条件式構文に基づいたスタンドアロンのCoherenceフィルタを作成できます。「Javaプログラムにおけるフィルタの作成」を参照してください。 |
その他の例は、「フィルタを強調表示する単純なSELECT * FROM文」を参照してください。
次に例を示します。
キャッシュdept
内のすべての項目を選択します。ここでは、deptno
キーの値が10になります。
select * from "dept" where deptno = 10
次の項では、キャッシュの作成と削除の方法を説明します。また、キャッシュの内容のバックアップとリストアの方法も説明します。
問合せの送信を開始する前に、まず既存のキャッシュに接続するか、新規キャッシュを作成する必要があります。そうするには、CREATE
CACHE
文またはENSURE
CACHE
文を使用できます。この文は、まず指定されたcache-name
でキャッシュへの接続を試行します。キャッシュがクラスタ内に見つからない場合は、現在のキャッシュ構成ファイルに基づいて指定された名前で新規キャッシュの作成が試行されます。この文は、コマンドラインで特に有用です。この文をプログラムで使用している場合、名前の変わりにサービスとクラス・ローダーの情報を指定するオプションがあります(クラス・ローダーにはコマンドラインからはアクセスできません)。
注意: 文では、キャッシュ名とサービス名を引用符(二重引用符(" " )または一重引用符(' ' ))で囲む必要があります。 |
構文は次のとおりです。
[ CREATE | ENSURE ] CACHE "cache-name
" [ SERVICE"service-name"
]
次に例を示します。
dept
という名前のキャッシュを作成します。
create cache "dept"
BACKUP
CACHE
文を使用して、指定されたキャッシュのシリアライズ表現を、指定されたfilename
で表示されたファイルに書き込みます。filename
は、オペレーティング・システム固有のパスであり、一重または二重引用符で囲む必要があります。BACKUP
CACHE
文は、コマンドライン・ツールでのみ使用できます。構文は次のとおりです。
BACKUP CACHE "cache-name
" [ TO ] [ FILE ] "filename
"
注意: バックアップ(および後続のリストア)機能は、開発およびテスト環境で使用されるように設計されており、データの整合性を確認するプロビジョニングがないため、本番のデータ・セットでは使用しないでください。この機能は、本番のバックアップ、スナップショット、またはチェックポイント・ユーティリティとしてサポートされていません。特に:
|
次に例を示します。
dept
キャッシュのシリアライズ表現をtextfile
ファイルに書き込みます。
backup cache "dept" to file "textfile"
RESTORE
CACHE
文を使用して、指定されたキャッシュのシリアライズ表現を、指定されたfilename
で表示されたファイルから読み取ります。filename
は、オペレーティング・システム固有のパスであり、一重または二重引用符で囲む必要があります。RESTORE
CACHE
文は、コマンドライン・ツールでのみ使用できます。構文は次のとおりです。
RESTORE CACHE"cache-name
" [ FROM ] [ FILE ] "filename
"
次に例を示します。
dept
キャッシュをtextfile
ファイルからリストアします。
restore cache "dept" from file "textfile"
DROP
CACHE
文を使用して、指定したキャッシュをクラスタから完全に削除します。キャッシュは、Java destroy()
メソッドへのコールによって削除されます。いずれかのクラスタ・メンバーが、削除されたキャッシュへの参照を保持してそれになんらかの操作の実行を試行すると、そのメンバーはIllegalStateException
を受け取ります。Coherence問合せのDROP
CACHE
文の構文は、次のとおりです。
DROP CACHE "cache-name
"
次に例を示します。
orders
キャッシュをクラスタから削除します。
drop cache "orders"
次の項では、キャッシュ・データの挿入および削除、結果セットのフィルタリングなど、キャッシュ内のデータの操作方法を説明します。
集計の問合せは、SELECT
問合せの変動要素です。結果をグループ化して集計関数を適用し、結果に関する概要を取得する場合には、集計の問合せを使用します。問合せに集計関数を使用しているか、GROUP
BY
句が含まれる場合には、問合せは集計の問合せと見なされます。集計の問合せの最も一般的な形式では、1つ以上のグループ化の式の後にGROUP
BY
句内の同じリード・グループ化の式と組み合せられたSELECT
句の集計関数が続く形式が使用されます。
CohQLがサポートする集計関数は、COUNT
、AVG
、MIN
、MAX
、およびSUM
です。
その他の例は、「予測、集計、グループ化を扱う複雑な問合せ」を参照してください。
次に例を示します。
supplier
でグループ化されたorders
キャッシュからの項目に対して、合計amount
および平均price
を選択します。
select supplier,sum(amount),avg(price) from "orders" group by supplier
UPDATE
文を使用して、キャッシュ内の既存の値を変更します。構文は次のとおりです。
UPDATE "cache-name" [[AS] alias] SET update-statement {, update-statement}* [ WHERE conditional-expression ]
各update-statement
は、パス式、割当て演算子(=)および式で構成されています。割当て文に対する式の選択は制限されています。割当ての右側は、リテラル、バインド変数、静的メソッド、またはリテラルかバインド変数のみでの新規Javaコンストラクタに決定する必要があります。UPDATE
文は、別名の使用もサポートします。
追加の例は、「UPDATEの例」を参照してください。
次に例を示します。
employees
キャッシュでグレード7以上のランクの従業員の場合、給与を1000に、休暇時間を200に更新します。
update "employees" set salary = 1000, vacation = 200 where grade > 7
INSERT
文を使用して、指定されたKEY
の下に指定されたVALUE
を格納します。KEY
句が提供されていない場合には、新しく作成したオブジェクトに対してメッセージgetKey()
が送信されます(可能な場合)。それが可能でない場合には、value
オブジェクトがキーとして使用されます。
INSERT
文はObjects
のMaps
上で機能する点に注意してください。構文は次のとおりです。
INSERT INTO "cache-name" [ KEY (literal | new java-constructor | static method) ] VALUE (literal | new java-constructor | static method)
次に例を示します。
キーwriter
を値David
とともにemployee
キャッシュに挿入します。
insert into "employee" key "writer" value "David"
DELETE
文を使用して、キャッシュ内の指定されたエントリを削除します。構文は次のとおりです。
DELETE FROM "cache-name" [[AS] alias] [WHERE conditional-expression]
DELETE
文のWHERE
句は、SELECT
文の場合と同様に機能します。すべてのconditional-expressions
は、削除するエンティティのセットをフィルタする際に使用できます。DELETE
文は、別名の使用もサポートします。
注意事項: WHERE 句が存在しない場合には、指定したキャッシュ内のすべてのエントリが削除されます。 |
次に例を示します。
bar.writer
キーがDavid
でないemployee
キャッシュからエントリを削除します。
delete from "employee" where bar.writer IS NOT "David"
次の項では、キャッシュ・データの索引の作成と削除の方法を説明します。索引により、Coherenceの組込みオプティマイザがさらに迅速かつ効率的に問合せを分析して、結果を返すことができるようになります。
CREATE
INDEX
またはENSURE
INDEX
を使用して、特定されたキャッシュに索引を作成します。構文は次のとおりです。
[ CREATE | ENSURE ] INDEX [ON]"cache-name
" (value-extractor-list
)
value-extractor-list
は、パス式を使用してValueExtractors
を作成する、カンマ区切りのリストです。1つ以上の要素が存在する場合には、MultiExtractor
が使用されます。KeyExtractor
を作成する場合には、key()
擬似関数を使用してパス式を開始します。
索引の自然な順序が適用されます。
次に例を示します。
orders
キャッシュ内の属性lastname
で索引を作成します。
create index "orders" lastname
次の項では、複数の問合せ文を効率的にキャッシュへ発行する方法を説明します。
SOURCE
文では、文の「バッチ」処理が可能です。SOURCE
文は、指定されたfilename
で表示されたファイルから1つ以上の問合せ文を開いて読み取ります。filename
は、オペレーティング・システム固有のパスであり、一重または二重引用符で囲む必要があります。ファイル内の各問合せ文は、セミコロン(;
)で区切る必要があります。ソーシングはコマンドライン・ツールでのみ使用でき、コマンドの順序で構成されるファイルをロードできます。ソース・ファイルは、そのソースが他のファイルの場合もあります。構文は次のとおりです。
SOURCE FROM [ FILE ] "filename
"
SOURCE
は、@"
filename
"のように"at"記号(@
)を使用して短縮できます。"ピリオド"記号の'.'は、コマンドラインでのみ、'@'の省略として使用できますが、ファイル名を引用符で囲むことはできません。
次に例を示します。
command_file
ファイルの文を処理します。
source from file "command_file"
または
@ "command_file"
または
. command_file
CohQLコマンドライン・ツールには、文をコマンドラインから発行するキャッシュと相互作用する、非プログラム的方法が用意されています。このツールは、com.tangosol.coherence.dslquery.QueryPlus
クラスを使用して操作できます。また便宜上、COHERENCE_HOME
/bin/
に配置された起動スクリプトを使用してこのツールを操作できます。このスクリプトは、Windows(query.cmd
)でもUnix(query.sh
)でも使用できます。
スクリプトは、コンソール・モードでクラスタ・ノードを起動します。記憶域はノード上では有効化されていません。これは、本番環境での推奨設定で、ノードが記憶域有効化キャッシュ・サーバーを持つクラスタに参加することが前提となっています。ただし、記憶域有効化ノードをテスト用に作成するには、スクリプト内のstorage_enabled
設定をtrue
に変更します。
注意: 構成の際には、起動スクリプトではデフォルトのオペレーション構成ファイル(tangosol-coherence.xml )とデフォルトのキャッシュ構成ファイル(coherence-cache-config.xml )が使用されます。これらのファイルは、クラスタの作成/参加およびキャッシュの構成の際にcoherence.jar に格納されます。Coherenceの構成の詳細は、第3章「構成について」を参照してください。 |
スクリプトには、JLINE_HOME
環境変数とCOHERENCE_HOME
環境変数の設定オプションも用意されています。COHERENCE_HOME
がコンピュータで未設定の場合、スクリプト内のその環境変数をCoherenceのインストール場所に設定します。JLINE_HOME
環境変数はJLine JARの場所に設定する必要があります。これは、コマンド履歴内を上下の矢印で移動させるような、コマンドラインの拡張編集機能で使用されます。ただし、JLineはCohQLの使用には必要ありません。
出荷状態では、スクリプトはjline-0.9.94.jar
ライブラリがCOHERENCE_HOME
/bin/
ディレクトリ内に格納されていると想定します。ライブラリが見つからない場合には、JARがロードされなかったことを示すメッセージが表示されます。JARをCOHERENCE_HOME
/bin/
ディレクトリにコピーするか、JARの場所をポイントするJLINE_HOME
変数を変更します。JARは、次の場所からダウンロードできます。
次の手順は、起動スクリプトを使用してCohQLコマンドライン・ツールの起動方法を示しています。この手順は、スクリプトのstorage_enabled
がfalse
に設定されていること(デフォルト)を前提としています。
キャッシュ・サーバー・クラスタ・ノードを起動するか、既存のキャッシュ・サーバー・クラスタが起動していることを確認します。
キャッシュ・サーバー・クラスタ・ノードを起動するには、コマンド・プロンプトまたはシェルを開き、/bin
ディレクトリにあるキャッシュ・サーバー起動スクリプトを実行します(Windowsプラットフォームではcache-server.cmd
、UNIXプラットフォームではcache-server.sh
)。キャッシュ・サーバーが起動し、このクラスタ・メンバーに関する情報が出力されます。
コマンド・プロンプトまたはシェルを開き、/bin
ディレクトリにあるCohQLコマンドライン起動スクリプトを実行します(Windowsプラットフォームではquery.cmd
、UNIXプラットフォームではquery.sh
)。Java環境に関する情報が表示されます。コマンドライン・ツール・プロンプト(CohQL>
)が返されます。
注意: 既存のキャッシュ・サーバー・ノードを結合する場合、起動スクリプトを変更して、同じキャッシュ構成を含む既存のキャッシュ・サーバー・ノードと同じクラスタ設定を使用します。 |
コマンドラインのヘルプを全部表示するには、プロンプトでhelp
と入力します。詳細な説明のないヘルプのリストを表示するには、commands
と入力します。
通常、最初の文は新規キャッシュを作成するか、既存のキャッシュに接続するためのものです。「キャッシュの作成」を参照してください。
「コマンドラインの例」では、コマンドライン・ツールを用いる一連の問合せ文を示しています。
CohQLコマンドライン・ツールには、CohQL>
プロンプトが返す前に読み取られ、実行される一連の引数が組み込まれています。これは、スクリプトを大型のスクリプトの一部として使用する際に(ビルド・プロセスの一部としての使用、入力/出力をパイピングするための使用など)有用です。CohQL>
プロンプトでhelp
と入力し、コマンドライン・ツール内の引数のヘルプを表示します。
表24-2 Coherenceの問合せ言語コマンドライン・ツールの引数
引数 | 説明 |
---|---|
|
トレース・モードを有効にして、デバッグ情報を出力します。 |
|
コマンドライン引数の処理の後、コマンドライン・ツールを終了します。この引数は、標準の入力からリダイレクトする際には使用しないでください。使用すると、コマンドラインの引数が処理を終了すると同時にツールが終了して、リダイレクトされた入力が読み取られません。 |
|
コマンドライン・ツールをサイレント・モードで操作して、無関係な用語を削除します。これにより、標準の入力( |
|
コマンドライン・ツールを拡張言語モードで操作します。このモードにより、更新でオブジェクト・リテラルが許可され、コマンドを挿入できるようになります。使用法の詳細は、コマンドラインのヘルプを参照してください。 |
|
指定した文を実行します。文は一重または二重の引用符で囲む必要があります。任意の数の |
|
指定したファイルの文を処理します。ファイル内の文は、セミコロン(;)で区切る必要があります。ファイルは、オペレーティング・システム固有のパスであり、一重または二重引用符で囲む必要があります。任意の数の |
例
contact
キャッシュ内のすべてのエントリを返し、そのエントリを標準出力に出力してコマンドライン・ツールを終了します。
query.sh -c -l "select * from contact"
dist-example
キャッシュ内のすべてのエントリを返し、そのエントリ(余分な用語を削除)をmyOutput
という名前のファイルに出力してコマンドライン・ツールを終了します。
query.cmd -s -c -l "select * from 'dist-example'" >myOutput
myStatements
という名前のファイルのすべてのセグメントを処理して、コマンドライン・ツールを終了します。
query.sh -c -f myStatements
myInput
ファイルからコマンドを読み取り、出力(余分な用語を削除)をmyOutput
という名前のファイルに出力します。
query.sh -s <myInput >myOutput
例24-1に、コマンドライン・ツールをWindowsで使用する簡単な例を示します。この例ではローカル・キャッシュに対する文をテストするので、起動スクリプト内のstorage_enabled
設定はtrue
に設定されています。この例はキャッシュの作成と削除、エントリの格納と取得、バックアップ・ファイルからのキャッシュのリストアを示します。また、key()
およびvalue()
という擬似関数の使用を強調します。
コマンド・プロンプトでquery.cmd
を起動する際に、Java環境、Coherenceのバージョンおよびエディション、Coherenceキャッシュ・サーバーに関する情報が表示されます。次に、問合せ文を入力できるプロンプト(CohQL>
)を受け取ります。
例には、コマンドを説明する注釈とそれらの出力が太字イタリックのフォントで追加されています。次に例を示します。
< This is an annotation. >
例24-1 コマンドライン問合せの演習
C:/coherence/bin/query.cmd ** Starting storage enabled console ** java version "1.6.0_14" Java(TM) SE Runtime Environment (build 1.6.0_14-b08) Java HotSpot(TM) Server VM (build 14.0-b16, mixed mode) 2010-01-27 16:54:07.501/0.265 Oracle Coherence 3.6.0.0 Internal <Info> (thread=main, member=n/a): Loaded operational configuration from "jar:file:/C:/coherence360/coherence/lib/coherence.jar!/tangosol-coherence.xml" 2010-01-27 16:54:07.501/0.265 Oracle Coherence 3.6.0.0 Internal <Info> (thread=main, member=n/a): Loaded operational overrides from "jar:file:/C:/coherence360/coherence/lib/coherence.jar!/tangosol-coherence-override-dev.xml" 2010-01-27 16:54:07.501/0.265 Oracle Coherence 3.6.0.0 Internal <D5> (thread=main, member=n/a): Optional configuration override "/tangosol-coherence-override.xml" is not specified 2010-01-27 16:54:07.517/0.281 Oracle Coherence 3.6.0.0 Internal <D5> (thread=main, member=n/a): Optional configuration override "/custom-mbeans.xml" is not specified Oracle Coherence Version 3.6.0.0 Internal Build 0 Grid Edition: Development mode Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. 2010-01-27 16:54:09.173/1.937 Oracle Coherence GE 3.6.0.0 Internal <D5> (thread=Cluster, member=n/a): Service Cluster joined the cluster with senior service member n/a 2010-01-27 16:54:12.423/5.187 Oracle Coherence GE 3.6.0.0 Internal <Info> (thread=Cluster, member=n/a): Created a new cluster "cluster:0xC4DB" with Member(Id=1, Timestamp=2010-01-27 16:54:08.032, Address=130.35.99.213:8088, MachineId=49877, Location=site:us.oracle.com,machine:tpfaeffl-lap7,process:4316, Role=TangosolCoherenceQueryPlus, Edition=Grid Edition, Mode=Development, CpuCount=2, SocketCount=1) UID=0x822363D500000126726BBBA0C2D51F98 2010-01-27 16:54:12.501/5.265 Oracle Coherence GE 3.6.0.0 Internal <D5> (thread=Invocation:Management, member=1): Service Management joined the cluster with senior service member 1< Create a cache named "employees". >
CohQL> create cache "employees" 2010-01-27 16:54:26.892/19.656 Oracle Coherence GE 3.6.0.0 Internal <Info> (thread=main, member=1): Loaded cache configuration from "jar:file:/C:/coherence360/coherence/lib/coherence.jar!/coherence-cache-config.xml" 2010-01-27 16:54:27.079/19.843 Oracle Coherence GE 3.6.0.0 Internal <D5> (thread=DistributedCache, member=1): Service DistributedCache joined the cluster with senior service member 1 2010-01-27 16:54:27.095/19.859 Oracle Coherence GE 3.6.0.0 Internal <D5> (thread=DistributedCache, member=1): Service DistributedCache: sending Config Sync to all Result< Insert an entry (key-value pair) into the cache. >
CohQL> insert into "employees" key "David" value "ID-5070"< Change the value of the key. >
CohQL> update employees set value() = "ID-5080" where key() like "David" Result David, true< Retrieve the values in the cache. >
CohQL> select * from "employees" Result ID-5080< Retrieve the value of a key that does not exist. An empty result set is returned >
CohQL> select key(), value() from "employees" where key() is "Richard" Result< Delete an existing key in the cache. An empty result set is returned. >
CohQL> delete from employees where key() = "David" Result< Delete the contents of the employees cache. An empty result set is returned. >
CohQL> delete from "employees" Result< Destroy the employees cache. >
CohQL> drop cache "employees"< Re-create the employees cache. >
CohQL> create cache "employees" Result< Insert more entries into the cache. >
CohQL> insert into "employees" key "David" value "ID-5080" CohQL> insert into "employees" key "Julie" value "ID-5081" CohQL> insert into "employees" key "Mike" value "ID-5082" CohQL> insert into "employees" key "Mary" value "ID-5083"< Retrieve the keys and value in the enployees cache. >
CohQL> select key(), value() from "employees" Result Julie, ID-5081 Mike, ID-5082 Mary, ID-5083 David, ID-5080< Save a serialized representation of the cache in a file. >
CohQL> backup cache "employees" to "emp.bkup"< Delete a key from the cache. >
CohQL> delete from "employees" where key() = "David" Result< Retreive the cache contents again, notice that the deleted key and value are not present. >
CohQL> select key(), value() from "employees" Result Julie, ID-5081 Mike, ID-5082 Mary, ID-5083< Delete the contents of the cache. >
CohQL> delete from "employees" Result< Retrieve the contents of the cache. An empty result set is returned. >
CohQL> select * from "employees" Result< Restore the cache contents from the backup file. >
CohQL> restore cache "employees" from file "emp.bkup"< Retrieve the cache contents. Note that all of the entries have been restored and returned. >
CohQL> select key(), value() from "employees" Result Julie, ID-5081 Mike, ID-5082 Mary, ID-5083 David, ID-5080< Destroy the employees cache. >
CohQL> drop cache "employees"< Exit the command-line tool. >
CohQL> bye
FilterBuilder
APIは、Javaプログラム内から結果セットをフィルタリングする文字列指向の方法で、使用の際にはCoherence APIの詳細を覚える必要はありません。そのために、APIにはcom.tangosol.util.QueryHelper
クラスに過負荷のcreateFilter
ファクトリ・メソッドのセットが4つ用意されています。
次のリストは、createFilter
メソッドの異なる形式について説明しています。渡された文字列は、Coherence問合せのWHERE
句の構文(「エントリの結果セットでのフィルタリング」を参照)を使用しますが、リテラルのWHERE
は使用しません。Object
配列またはMap
を指定する形式は、バインド変数で参照されるオブジェクトを渡すためのものです。各形式は用意されたCoherence問合せ文字列からフィルタを構築します。
public static Filter createFilter(String s)
: s
は、Filter
を表すCoherenceの問合せ内のString
です。
public static Filter createFilter(String s, Object[] aBindings)
: s
は、Filter
およびaBindings
がバインド変数に使用するObjects
の配列であることを表すCoherenceの問合せ内のString
です。
public static Filter createFilter(String s, Map bindings)
: s
は、Filter
およびbindings
がバインド変数に使用するObjects
のMap
であることを表すCoherenceの問合せ内のString
です。
public static Filter createFilter(String s, Object[] aBindings, Map bindings)
: s
は、Filter
, aBindings
がバインド変数に使用するObjects
の配列であり、bindings
がバインド変数に使用するObjects
のMap
であることを表すCoherenceの問合せ内のString
です。
これらのファクトリ・メソッドは、不具合、構文的に不正確な文、セマンティックなエラーがあると、FilterBuildingException
をスローします。この例外がRuntimeException
のサブクラスであるため、エラーの捕捉は必要ありませんが、エラーの捕捉をしないとプロセスが終了する可能性があります。
例
次の文では、メソッドのcreateFilter(String s)
の形式を使用します。これはマサチューセッツ州に住み、別の州で働く従業員のフィルタを構築します。
.. QueryHelper.createFilter("homeAddress.state = 'MA' and workAddress.state != 'MA'") ...
この文は、Coherence APIを使用する次のフィルタ/エクストラクタと同じです。
AndFilter(EqualsFilter(ChainedExtractor(#getHomeAddress[], #getState[]), MA), NotEqualsFilter(ChainedExtractor(#getWorkAddress[], #getState[]), MA)))
QueryHelper
クラスもcreateExtractor
メソッドを提供し、それによりフィルタ構築時に値エクストラクタを作成できます。エクストラクタは、オブジェクトからの値の抽出(並べ替えやフィルタリングなど)とその抽出の識別の両方に使用されます。次の例は、索引作成時のcreateExtractor
の使用を示しています。
cache.addIndex(QueryHelper.createExtractor("key().lastName"),/*fOrdered*/ true, /*comparator*/ null);
この項では、その他の例を使用して、インスタンス化されたオブジェクト(Filters
、ValueExtractors
、Aggregators
など)によるそれらと同等のCoherence APIコールを示します。Filters
を強調する単純なselect
*
の例を使用すると、Filter
部分のみを注目する場合にFilterBuilder
APIの変換を把握できます。例の完全なセットを使用すると、QueryBuilder
APIとコマンドライン・ツールの変換を把握できます。
この例では、識別子を修飾するキャッシュ名が削除されたパス構文の短縮された形式が使用されています。
例のJava言語形式でも、EntryProcessors
のかわりにReducerAggregator
が予測に使用されています。KeyExtractor
の使用についても、Coherence 3.5ではReflectionExtractor
に対する特定の変更を必要としなくなったことにも注意してください。
40
がprice
キーの値より大きい、キャッシュorders
から項目を選択します。
select * from "orders" where 40 > price
price
キーが100にまったく等しく、insurance
キーの値が10より小さいか、shipping
キーの値が20以上である、キャッシュorders
から項目を選択します。
select * from "orders" where price is 100 and insurance < 10 or shipping >= 20
price
キーが100にまったく等しく、insurance
キーの値が10より小さいか、またはshipping
キーの値が20以上のいずれかである、キャッシュorders
から項目を選択します。
select * from "orders" where price is 100 and (insurance < 10 or shipping >= 20)
price
キーの値が100
に等しいか、bar
キーが20
に等しい、キャッシュorders
から項目を選択します。
select * from "orders" where price = 100 or shipping = 20
insurance
キーの値がnullでない、キャッシュorders
から項目を選択します。
select * from "orders" where insurance is not null
emp_id
キーが1から1000の値を持つか、bar.emp
キーが"Smith
"でない、キャッシュemployees
から項目を選択します。
select * from "employees" where emp_id between 1 and 1000 or bar.emp is not "Smith"
item
キーが値"coat
"に類似しているキャッシュorders
から項目を選択します。
select * from "orders" where item like "coat%"
emp_id
の値が5、10、15、または20のセット内にある、キャッシュemployees
から項目を選択します。
select * from "employees" where emp_id in (5,10,15,20)
emp_id
がリスト5
、10
、15
、および20
を含む、キャッシュemployees
から項目を選択します。
select * from "employees" where emp_id contains (5,10,15,20)
emp_id
が5
、10
、15
、および20
のすべての項目を含む、キャッシュemployees
から項目を選択します。
select * from "employees" where emp_id contains all (5,10,15,20)
emp_id
が5
、10
、15
、および20
のいずれかの項目を含む、キャッシュemployees
から項目を選択します。
select * from "employees" where emp_id contains any (5,10,15,20)
foo
キーの値が10より小さく、セット10、20で発生する、キャッシュemployees
から項目を選択します。
select * from "employees" where emp_id < 10 in (10,20)
キャッシュContactInfoCache
で従業員の家庭のstate
とage
を選択し、state
およびage
でグループ化します。
select homeAddress.state, age, count() from "ContactInfoCache" group by homeAddress.state, age
orders
キャッシュから擬似frobit
キーを選択します。空の結果セットが返されます。
select frobit,supplier,sum(amount),avg(price) from "orders" group by supplier
$1000より大きいorders
キャッシュ内の項目の場合、その項目、その価格と色を選択します。
select item_name,price,color from "orders" where price > 1000
orders
キャッシュから、項目に対する合計amount
を選択します。
select sum(amount) from "orders"
color
属性がred
またはgreen
である、orders
キャッシュから、項目に対する合計amount
を選択します。
select sum(amount) from "orders" where color is "red" or color is "green"
orders
キャッシュからの項目に対して、合計amount
および平均price
を選択します。
select sum(amount),avg(price) from "orders"
employees
キャッシュの可能な重複行からlast
name
とcity
のコピーを選択します。ここでは、state
はカリフォルニアです。
select distinct lastName,city from "employees" where state = "CA"
employees
キャッシュでランクがグレード7以上の従業員の場合、給与を10%ごと増加して、休暇を50時間追加します。
update "employees" set salary = salary*1.10, vacation = vacation + 50 where grade > 7
この項では、key()
およびvalue()
という擬似関数の使用方法の例を示します。その他の例は、「コマンドラインの例」を参照してください。
ContactInfoCache
から、自宅の住所がマサチューセッツで勤務先は別の州である従業員を選択します。
select key().firstName, key().lastName from "ContactInfoCache" homeAddress.state is 'MA' and workAddress.state != "MA"
ContactInfoCache
キャッシュから、年齢が42より高い従業員を選択します。
select key().firstName, key().lastName, age from "ContactInfoCache" where age > 42