この章では、Oracle Coherenceリリース3.7.1(Coherence)を実行するための環境をインストールおよび設定する方法について説明します。
注意: このチュートリアルでは、Oracle Enterprise Pack for Eclipse(OEPE)11gR1(11.1.1.7)とともにEclipse Helios 3.6.2リリースを使用します。EclipseおよびOEPE for Coherenceベースのプロジェクトの構成については、第2章「EclipseおよびOEPEのインストールとCoherenceと併用するための構成」を参照してください。このチュートリアルの例は、Coherenceの3.7リリースで実行されたものです。Coherenceのリリース3.7.1でこれらの例を実行しても、同じ結果になります。 |
oracle
ユーザーとしてソフトウェアをインストールし、システム環境変数を設定するための権限が必要なほか、環境変数の設定、ディレクトリの作成やディレクトリ間の移動など、端末ウィンドウの使用方法を理解している必要があります。Java SE(JDK)バージョン1.6以降の作業用インストールが必要です。また、Microsoft Windowsオペレーティング・システム(XP、Vista、2000、2003、2008のいずれか)を実行している必要があります。
この章では次の項について説明します。
Coherenceをダウンロードしてインストールするには:
Coherenceをデスクトップにダウンロードします。
Coherence(Java Edition)は、1つのzipファイル(通常はcoherence-<
バージョン>.zip
)として提供されています。次のURLからCoherenceをダウンロードできます。
http://www.oracle.com/technology/products/coherence/index.html
zipファイルの内容をC:\oracle\product
というフォルダに抽出します。
zipファイルのcoherence
フォルダに次のサブフォルダが含まれています。
bin
: コマンド・スクリプトが格納されています。
doc
: 製品ドキュメントが格納されています。
lib
: 必要なライブラリ・ファイルが格納されています。
この演習では、現在のCoherenceインストールでJavaプロセスをクラスタ化できるかどうかをテストします。これにより、Coherenceに付属しているCoherenceベースのアプリケーションが予期したとおりに稼働することを確認できます。1 つのマシンでクラスタ化できない場合は、ネットワークとファイアウォールの設定を再構成する必要があります。
この演習を実行するには、Oracle Coherence(Java Edition)リリース3.7.1がインストールされている必要があります。詳細は、「Coherenceのインストール」を参照してください。
Coherenceでは、クラスタ化されたプロセス間の通信を可能するために、様々なネットワーク・アドレスおよびポートを使用します。他のアプリケーションで使用されているため、またはファイアウォールが原因でこれらのアドレスやポートを使用できない場合、Coherenceは信頼性がなくなったり、クラスタ化に失敗したり、まったく動作しなかったりすることがあります。Coherenceではデフォルトで、表1-1に記載されているネットワーク・アドレスおよびポートが使用可能であると想定しています。
表1-1 Coherenceで使用されるネットワーク・アドレスおよびポート
アドレス/ポート/タイプ | 目的 |
---|---|
|
クラスタ・メンバーの検出およびブロードキャスト。変数versionは、Coherenceのリリース・バージョンを表します。たとえば、3.7.0.0リリースのマルチキャスト・アドレスは |
|
クラスタ・メンバー間のプロセス間通信( |
Coherenceには単純なコマンドライン(シェルベース)アプリケーションが2つ付属しており、これらを使用して、Coherenceが正しく動作するかどうかを確認できます。
キャッシュ・サーバーは、クラスタ内の他のアプリケーションのかわりにデータをホストして管理する、単純なアプリケーションです。
キャッシュ・クライアントは、開発者がクラスタ内のキャッシュ・データにアクセスし、処理および更新するための単純なアプリケーションです。また、クラスタに関する情報も提供します。1つのホストまたは複数のホストでこれらのアプリケーションを実行することによって、Coherenceがローカルまたはネットワークで正しく動作しているかどうかを確認できます。
アプリケーションがCoherenceを出荷時の状態で使用すると、Coherenceのキャッシュに格納されたオブジェクトは通常、アプリケーション内でインプロセスで格納および管理されます。ただし、オブジェクトの可用性を向上させるために、Coherenceでは、インメモリーで、アプリケーション・プロセス外でオブジェクトを管理できます。これにより、(故意であるか偶然であるかにかかわらず)アプリケーションが停止した場合でもオブジェクトが失われることはありません。オブジェクトをこのように管理するために、Coherenceではキャッシュ・サーバーを使用します。Coherenceのキャッシュ・サーバーの目的は、アプリケーション・プロセス外のクラスタでアプリケーションの状態を管理することです。これはデータベース・サーバーと同様ですが、記憶域は必要ありません。
サンプル・キャッシュ・サーバー・アプリケーションを設定および実行するには:
端末ウィンドウを開き、PATH
環境変数がJava JDK(例: \oracle\product\jdk160_14_R27.6.5-32\bin
)を含むように設定されていることを確認します。PATH
環境変数にJDKの\bin
フォルダが含まれていない場合は、次のように設定してください。
JAVA_HOME
環境変数をJDKインストールのベースに設定します。
set JAVA_HOME=\oracle\product\jdk160_14_R27.6.5-32
PATH
環境変数にJAVA_HOME\bin
を含めます。
set PATH=%JAVA_HOME%\bin;%PATH%
Coherenceがインストールされているフォルダに移動します。cache-server.cmd
ファイルを編集し、COHERENCE_HOME
変数を、Coherenceのインストール・フォルダを指すように設定します。
cd C:\oracle\product\coherence\bin
cache-server.cmd
ファイルで、COHERENCE_HOME
環境変数を次のように設定します。
COHERENCE_HOME=C:\oracle\product\coherence
例1-1に、COHERENCE_HOME
環境変数の値を編集したcache-server.cmd
ファイルを示します。
例1-1 COHERENCE_HOMEを編集したcache-server.cmdファイル
@echo off
@
@rem This will start a cache server
@
setlocal
:config
@rem specify the Coherence installation directory
set coherence_home=c:\oracle\product\coherence
@rem specify the JVM heap size
set memory=512m
:start
if not exist "%coherence_home%\lib\coherence.jar" goto instructions
if "%java_home%"=="" (set java_exec=java) else (set java_exec=%java_home%\bin\java)
:launch
set java_opts="-Xms%memory% -Xmx%memory%"
"%java_exec%" -server -showversion "%java_opts%" -cp "%coherence_home%\lib\coherence.jar" com.tangosol.net.DefaultCacheServer %1
goto exit
:instructions
echo Usage:
echo ^<coherence_home^>\bin\cache-server.cmd
goto exit
:exit
endlocal
@echo on
coherence\bin
フォルダにあるキャッシュ・サーバー・アプリケーションを実行します。
C:\oracle\product\coherence\bin>cache-server.cmd
最初のキャッシュ・サーバーを起動するときには、キャッシュ・サーバーが既存のクラスタを探すため、多少の遅延があります。キャッシュ・サーバーは参加するクラスタがないと判断すると、クラスタを1つ起動します。起動時に、キャッシュ・サーバーでは例1-2のテキストのような出力が生成されます。
この例では、次のような重要な機能が強調表示されています。
Java JDKのバージョン番号
構成ファイルのロード方法に関する情報。デフォルトでは、coherence.jar
ファイルからロードされます。
Loaded operational configuration from resource "jar:file:/C:/oracle/product/coherence/lib/coherence.jar!/tangosol-coherence.xml"
Coherenceのリリース番号: Oracle Coherence 3.7.0.0...
Coherenceのエディション: Grid Edition: Development mode
マルチキャスト・アドレス。このアドレスはCoherenceのバージョンごとに変わります。Coherenceリリース3.7.1の場合、アドレスでは3.7.0
です。Group{Address=224.3.7.0, Port=37000, TTL=4}
メンバーIDは、クラスタ内のメンバーの数を示します。この演習では、値が1である必要があります。ThisMember=Member(Id=1...
例1-2 Coherenceのキャッシュ・サーバー起動時の出力
C:\oracle\product\coherence\bin>cache-server.cmdjava 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) 2011-03-14 16:16:30.998/1.531 Oracle Coherence 3.7.0.0 <Info> (thread=main, member=n/a):Loaded operational configuration from "jar:file:/C:/oracle/product/coherence/lib/coherence.jar!/tangosol-coherence.xml"
2011-03-14 16:16:31.342/1.875 Oracle Coherence 3.7.0.0 <Info> (thread=main, member=n/a): Loaded operational overrides from "jar:file:/C:/oracl e/product/coherence/lib/coherence.jar!/tangosol-coherence-override-dev.xml" 2011-03-14 16:16:31.357/1.890 Oracle Coherence 3.7.0.0 <D5> (thread=main, member=n/a): Optional configuration override "/tangosol-coherence-override.xml" is not specified 2011-03-14 16:16:31.373/1.906 Oracle Coherence 3.7.0.0 <D5> (thread=main, member=n/a): Optional configuration override "/custom-mbeans.xml" is not specifiedOracle Coherence Version 3.7.0.0 Build 22913
Grid Edition: Development mode
Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. 2011-03-14 16:16:32.638/3.171 Oracle Coherence GE 3.7.0.0 <Info> (thread=main, member=n/a): Loaded cache configuration from "jar:file:/C:/oracle/product/coherence/lib/coherence.jar!/coherence-cache-config.xml" 2011-03-14 16:16:33.295/3.828 Oracle Coherence GE 3.7.0.0 <D4> (thread=main, member=n/a): TCMP bound to /130.35.99.213:8088 using SystemSocketProvider 2011-03-14 16:16:36.873/7.406 Oracle Coherence GE 3.7.0.0 <Info> (thread=Cluster, member=n/a): Created a new cluster "cluster:0x96AB" with Member(Id=1, Timestamp=2011-03-14 16:16:33.295, Address=130.35.99.213:8088, MachineId=49877, Location=site:us.oracle.com,machine:tpfaeffl-lap7,process:1920, Role=CoherenceServer, Edition=Grid Edition, Mode=Development, CpuCount=2, SocketCount=1) UID=0x822363D50000012E4FDFD80FC2D51F98 2011-03-14 16:16:36.873/7.406 Oracle Coherence GE 3.7.0.0 <Info> (thread=main, member=n/a): Started cluster Name=cluster:0x96ABGroup{Address=224.3.7.0, Port=37000, TTL=4}
MasterMemberSet
(ThisMember=Member(Id=1
, Timestamp=2011-03-14 16:16:33.295, Address=130.35.99.213:8088, MachineId=49877, Location=site:us.oracle.com,machine:tpfaeffl-lap7,process:1920, Role=CoherenceServer) OldestMember=Member(Id=1, Timestamp=2011-03-14 16:16:33.295, Address=130.35.99.213:8088, MachineId=49877, Location=site:us.oracle.com,machine:tpfaeffl-lap7,process:1920, Role=CoherenceServer) ActualMemberSet=MemberSet(Size=1, BitSetCount=2 Member(Id=1, Timestamp=2011-03-14 16:16:33.295, Address=130.35.99.213:8088, MachineId=49877, Location=site:us.oracle.com,machine:tpfaeffl-lap7,process:1920, Role=CoherenceServer) ) RecycleMillis=1200000 RecycleSet=MemberSet(Size=0, BitSetCount=0 ) ) TcpRing{Connections=[]} IpMonitor{AddressListSize=0} 2011-03-14 16:16:36.935/7.468 Oracle Coherence GE 3.7.0.0 <D5> (thread=Invocation:Management, member=1): Service Management joined the cluster with senior service member 1 2011-03-14 16:16:37.217/7.750 Oracle Coherence GE 3.7.0.0 <D5> (thread=DistributedCache, member=1): Service DistributedCache joined the cluster with senior service member 1 2011-03-14 16:16:37.295/7.828 Oracle Coherence GE 3.7.0.0 <D5> (thread=ReplicatedCache, member=1): Service ReplicatedCache joined the cluster with senior service member 1 2011-03-14 16:16:37.310/7.843 Oracle Coherence GE 3.7.0.0 <D5> (thread=OptimisticCache, member=1): Service OptimisticCache joined the cluster with senior service member 1 2011-03-14 16:16:37.310/7.843 Oracle Coherence GE 3.7.0.0 <D5> (thread=Invocation:InvocationService, member=1): Service InvocationService joined the cluster with senior service member 1 2011-03-14 16:16:37.326/7.859 Oracle Coherence GE 3.7.0.0 <Info> (thread=main, member=1): Services ( ClusterService{Name=Cluster, State=(SERVICE_STARTED, STATE_JOINED), Id=0, Version=3.7, OldestMemberId=1} InvocationService{Name=Management, State=(SERVICE_STARTED), Id=1, Version=3.1, OldestMemberId=1} PartitionedCache{Name=DistributedCache, State=(SERVICE_STARTED), LocalStorage=enabled, PartitionCount=257, BackupCount=1, AssignedPartitions=257, BackupPartitions=0} ReplicatedCache{Name=ReplicatedCache, State=(SERVICE_STARTED), Id=3, Version=3.0, OldestMemberId=1} Optimistic{Name=OptimisticCache, State=(SERVICE_STARTED), Id=4, Version=3.0, OldestMemberId=1} InvocationService{Name=InvocationService, State=(SERVICE_STARTED), Id=5, Version=3.1, OldestMemberId=1} ) Started DefaultCacheServer...
注意: Coherenceはデフォルトで、マルチキャストを使用してクラスタに参加したり、クラスタ・イベントを配布するように構成されます。マルチキャストを使用すると、クラスタ内の複数のノードにメッセージを効率的に配布することもできます。マルチキャストを使用しないようにCoherenceを構成することもできます。 |
cache-server.cmd
ファイルの出力は、クラスタ内のメンバーが1つであるか複数であるかを示します。Member
Id
の値は1である必要があります。
...
In MasterMemberSet
ThisMember=Member(Id should be equal to 1
)
...
ThisMember
のId
が1より大きい場合、キャッシュ・サーバーがネットワーク内の既存のクラスタに参加していることを意味します。この演習では、クラスタのメンバーは1つのみである必要があります。「Coherenceを自分のホストに制限する」の手順に従って、Coherenceを自分のホストに制限してください。
サンプル・キャッシュ・クライアント・アプリケーションを設定および実行するには:
キャッシュ・クライアントを起動するために、別の端末ウィンドウを開きます。
PATH
環境変数が%JAVA_HOME%\bin
フォルダを含むように設定されていることを確認します。PATH
環境変数に%JAVA_HOME%\bin
フォルダが含まれていない場合は、「サンプル・キャッシュ・サーバー・アプリケーションの構成と実行」の説明に従って変数を設定してください。
\oracle\product\coherence\bin
フォルダに移動します。query.cmd
ファイルを編集して、COHERENCE_HOME
変数を、Coherenceのインストール・フォルダを指すように設定します。
query.cmd
ファイルには、JLine JARファイル(jline.jar
)への参照が含まれています。JLineは、コンソール・コマンドの操作を簡素化するJavaライブラリです。
例1-3に、COHERENCE_HOME=\oracle\product\coherence
と設定したquery.cmd
ファイルを示します。JLINE_HOME
が%jline_home%\lib
に設定されています。
例1-3 COHERENCE_HOMEを編集したquery.cmdファイル
@echo off @ @rem This will start a console application @rem demonstrating the functionality of the Coherence(tm) API @ setlocal :config @rem specify the Coherence installation directoryset coherence_home=c:\oracle\product\coherence
@rem specify the jline installation directoryset jline_home=%coherence_home%\lib
@rem specify if the console will also act as a server set storage_enabled=false @rem specify the JVM heap size set memory=64m :start if not exist "%coherence_home%\lib\coherence.jar" goto instructions if "%java_home%"=="" (set java_exec=java) else (set java_exec=%java_home%\bin\java) :launch if "%storage_enabled%"=="true" (echo ** Starting storage enabled console **) else (echo ** Starting storage disabled console **) set java_opts="-Xms%memory% -Xmx%memory% -Dtangosol.coherence.distributed.localstorage=%storage_enabled%" "%java_exec%" -server -showversion "%java_opts%" -cp "%coherence_home%\lib\coherence.jar;%jline_home%\jline.jar
" com.tangosol.coherence.dslquery.QueryPlus %* goto exit :instructions echo Usage: echo ^<coherence_home^>\bin\query.cmd goto exit :exit endlocal @echo on
query.cmd
ファイルを実行して、キャッシュ・クライアントを起動します。
query.cmd
キャッシュ・クライアント起動時の出力(例1-4を参照)には、Coherence内に構築されている基本的な分散キャッシュ機能が表示されます。出力の最後には、CohQL>
プロンプトが表示されます。
様々なコマンドを入力し、出力を調べることによって、キャッシュ・クライアント・アプリケーションの演習を行います。
キャッシュ・クライアントで次のCoherenceコマンドを実行します。
help
と入力して、使用可能なコマンドのリストを表示します。
create
cache
"products"
と入力して、products
という名前のキャッシュを作成します。
キャッシュproducts
は、com.tangosol.net.NamedCache
インタフェースを実装します。1つのクラスタに複数の名前付きキャッシュを含めることができます。
例1-5は、指定したcoherence.jar
ファイル内のデフォルトの構成ファイル(coherence-cache-config.xml
)を使用すると、分散スキームを使用してproducts
という名前のNamedCache
が作成されることを示しています。
例1-5 Coherenceのキャッシュ起動時の出力
CohQL> create cache "products" 2011-03-14 16:49:09.217/109.469 Oracle Coherence 3.7.0.0 <Info> (thread=main, member=n/a): Loaded operational configuration from "jar:file:/C:/oracle/product/coherence/lib/coherence.jar!/tangosol-coherence.xml"2011-03-14 16:49:09.482/109.734 Oracle Coherence 3.7.0.0 <Info> (thread=main, member=n/a): Loaded operational overrides from "jar:file:/C:/oracle/product/coherence/lib/coherence.jar!/tangosol-coherence-override-dev.xml" 2011-03-14 16:49:09.482/109.734 Oracle Coherence 3.7.0.0 <D5> (thread=main, member=n/a): Optional configuration override "/tangosol-coherence-override.xml" is not specified 2011-03-14 16:49:09.482/109.734 Oracle Coherence 3.7.0.0 <D5> (thread=main, member=n/a): Optional configuration override "/custom-mbeans.xml" is not specified Oracle Coherence Version 3.7.0.0 Build 22913 Grid Edition: Development mode Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. 2011-03-14 16:49:10.498/110.750 Oracle Coherence GE 3.7.0.0 <Info> (thread=main, member=n/a): Loaded cache configuration from "jar:file:/C:/oracle/product/coherence/lib/coherence.jar!/coherence-cache-config.xml" 2011-03-14 16:49:11.185/111.437 Oracle Coherence GE 3.7.0.0 <D4> (thread=main, member=n/a): TCMP bound to /130.35.99.213:8090 using SystemSocketProvider 2011-03-14 16:49:11.701/111.953 Oracle Coherence GE 3.7.0.0 <Info> (thread=Cluster, member=n/a): This Member(Id=2, Timestamp=2011-03-14 16:49:11.645, Address=130.35.99.213:8090, MachineId=49877, Location=site:us.oracle.com,machine:tpfaeffl-lap7,process:4900, Role=TangosolCoherenceQueryPlus,Edition=Grid Edition, Mode=Development, CpuCount=2, SocketCount=1) joined cluster "cluster:0x96AB" with senior Member(Id=1, Timestamp=2011-03-14 16:16:33.295, Address=130.35.99.213:8088, MachineId=49877, Location=site:us.oracle.com,machine:tpfaeffllap7,process:1920, Role=CoherenceServer, Edition=Grid Edition, Mode=Development, CpuCount=2, SocketCount=1) 2011-03-14 16:49:11.732/111.984 Oracle Coherence GE 3.7.0.0 <D5> (thread=Cluster, member=n/a): Member 1 joined Service Cluster with senior member 1 2011-03-14 16:49:11.732/111.984 Oracle Coherence GE 3.7.0.0 <D5> (thread=Cluster, member=n/a): Member 1 joined Service Management with senior member 1 2011-03-14 16:49:11.732/111.984 Oracle Coherence GE 3.7.0.0 <D5> (thread=Cluster, member=n/a): Member 1 joined Service DistributedCache with senior member 1 2011-03-14 16:49:11.732/111.984 Oracle Coherence GE 3.7.0.0 <D5> (thread=Cluster, member=n/a): Member 1 joined Service ReplicatedCache with senior member 1 2011-03-14 16:49:11.732/111.984 Oracle Coherence GE 3.7.0.0 <D5> (thread=Cluster, member=n/a): Member 1 joined Service OptimisticCache with senior member 1 2011-03-14 16:49:11.732/111.984 Oracle Coherence GE 3.7.0.0 <D5> (thread=Cluster, member=n/a): Member 1 joined Service InvocationService with senior member 12011-03-14 16:49:11.732/111.984 Oracle Coherence GE 3.7.0.0 <Info> (thread=main, member=n/a): Started cluster Name=cluster:0x96AB Group{Address=224.3.7.0, Port=37000, TTL=4} MasterMemberSet ( ThisMember=Member(Id=2, Timestamp=2011-03-14 16:49:11.645, Address=130.35.99.213:8090, MachineId=49877, Location=site:us.oracle.com,machine:tpfaeffl-lap7,process:4900, Role=TangosolCoherenceQueryPlus) OldestMember=Member(Id=1, Timestamp=2011-03-14 16:16:33.295, Address=130.35.99.213:8088, MachineId=49877, Location=site:us.oracle.com,machine:tpfaeffl-lap7,process:1920, Role=CoherenceServer) ActualMemberSet=MemberSet(Size=2, BitSetCount=2 Member(Id=1, Timestamp=2011-03-14 16:16:33.295, Address=130.35.99.213:8088, MachineId=49877, Location=site:us.oracle.com,machine:tpfaeffl-lap7,process:1920, Role=CoherenceServer) Member(Id=2, Timestamp=2011-03-14 16:49:11.645, Address=130.35.99.213:8090, MachineId=49877, Location=site:us.oracle.com,machine:tpfaeffl-lap7,process:4900, Role=TangosolCoherenceQueryPlus) ) RecycleMillis=1200000 RecycleSet=MemberSet(Size=0, BitSetCount=0 ) ) TcpRing{Connections=[1]} IpMonitor{AddressListSize=0} 2011-03-14 16:49:11.779/112.031 Oracle Coherence GE 3.7.0.0 <D5> (thread=Invocation:Management, member=2): Service Management joined the cluster with senior service member 1 2011-03-14 16:49:12.060/112.312 Oracle Coherence GE 3.7.0.0 <D5> (thread=DistributedCache, member=2): Service DistributedCache joined the cluster with senior service member 1 CohQL>
キャッシュ・クライアントのCohQL>
プロンプトで次のコマンドを実行します。これらのコマンドの定義は、『Oracle Coherence開発者ガイド』のCoherence問合せ言語の使用に関する項を参照してください。
products
という名前のキャッシュを作成します。
create cache "products"
エントリ(キーと値のペア)をキャッシュに挿入します。
insert into "products" key "television" value "ID-5070"
キーの値を変更します。
update "products" set value() = "ID-5080" where key() like "television
キャッシュ内の値を取得します。
select * from "products"
存在しないキーの値を取得します。空の結果セットが返されます。
select key(), value() from "products" where key() is "radio"
キャッシュ内の既存のキーを削除します。空の結果セットが返されます。
delete from "products" where key() = "television"
products
キャッシュの内容を削除します。空の結果セットが返されます。
delete from "products"
productsキャッシュを破棄します。
drop cache "products"
productsキャッシュを再作成します。
create cache "products"
さらに多くのエントリをキャッシュに挿入します。
insert into "products" key "television" value "ID-5080" insert into "products" key "radio" value "ID-5090" insert into "products" key "MP3 Player" value "ID-5100" insert into "products" key "laptop" value "ID-5110"
products
キャッシュ内のキーと値を取得します。
select key(), value() from "products"
キャッシュのシリアライズされた形式をファイルに保存します。
backup cache "products" to "products.bkup"
キャッシュからキーを削除します。
delete from "products" where key() = "television"
キャッシュの内容を再度取得し、削除されたキーと値が存在しないことを確認します。
select key(), value() from "products"
キャッシュの内容を削除します。
delete from "products"
キャッシュの内容を取得します。空の結果セットが返されます。
select * from "products"
バックアップ・ファイルからキャッシュの内容をリストアします。
restore cache "products" from file "products.bkup"
キャッシュの内容を取得します。すべてのエントリがリストアされ、返されることを確認します。
select key(), value() from "products"
productsキャッシュを破棄します。
drop cache "products"
コマンドライン・ツールを終了します。
bye
例1-6に、これらの各コマンドの出力を示します。
例1-6 Coherenceコマンドの演習
CohQL> create cache "products" CohQL> insert into "products" key "television" value "ID-5070" CohQL> update "products" set value() = "ID-5080" where key() like "television Results television: true CohQL> select * from "products" Results ID-5080 CohQL> select key(), value() from "products" where key() is "radio" Results CohQL> delete from "products" where key() = "television" Results CohQL> delete from "products" Results CohQL> drop cache "products" CohQL> create cache "products" CohQL> insert into "products" key "television" value "ID-5080" CohQL> insert into "products" key "radio" value "ID-5090" CohQL> insert into "products" key "MP3 Player" value "ID-5100" CohQL> insert into "products" key "laptop" value "ID-5110" CohQL> select key(), value() from "products" Results "television", "ID-5080" "radio", "ID-5090" "MP3 Player", "ID-5100" "laptop", "ID-5110" CohQL> backup cache "products" to "products.bkup" WARNING: The backup command should not be used on active data set, as it makes no provisions that ensure data consistency during the backup. Please see the documentation for more detailed information. CohQL> delete from "products" where key() = "television" Results CohQL> select key(), value() from "products" Results "radio", "ID-5090" "MP3 Player", "ID-5100" "laptop", "ID-5110" CohQL> delete from "products" Results CohQL> select * from "products" Results CohQL> restore cache "products" from file "products.bkup" CohQL> select key(), value() from "products" Results "television", "ID-5080" "radio", "ID-5090" "MP3 Player", "ID-5100" "laptop", "ID-5110" CohQL> drop cache "products" CohQL> bye 2011-03-14 16:54:41.638/441.890 Oracle Coherence GE 3.7.0.0 <D5> (thread=Invocation:Management, member=2): Service Management left the cluster 2011-03-14 16:54:41.638/441.890 Oracle Coherence GE 3.7.0.0 <D5> (thread=DistributedCache, member=2): Service DistributedCache left the cluster 2011-03-14 16:54:41.654/441.906 Oracle Coherence GE 3.7.0.0 <D5> (thread=Cluster, member=2): Service Cluster left the cluster C:\oracle\product\coherence\bin>
別の端末ウィンドウを開き、PATH
環境変数を、%JAVA_HOME
%
および%JAVA_HOME%\bin
を含むように設定します。新しい端末ウィンドウでquery.cmd
コマンドを入力して、キャッシュ・クライアントのインスタンスを起動します。
query.cmd
コマンドを使用して最初のクライアントを再起動します。create
cache
"products
"コマンドを入力します。端末ウィンドウに、最初のクライアントが実行されている場所を示す、次のようなメッセージが表示されます。member
1はキャッシュ・サーバー、member
3は再起動された最初のクライアントです。
2011-03-14 17:51:26.701/17.688 Oracle Coherence GE 3.7.0.0 <D5> (thread=Invocation:Management, member=3): Service Management joined the cluster with senior service member 1 2011-03-14 17:51:27.138/18.125 Oracle Coherence GE 3.7.0.0 <D5> (thread=DistributedCache, member=3): Service DistributedCache joined the cluster with senior service member 1 CohQL>
新しい端末ウィンドウでcreate
cache
"products"
コマンドを入力して、products
キャッシュに接続します。様々なセッションで値の取得や挿入を行ってみてください。各クライアントは、もう一方のクライアントで行われた変更を監視できます。
query.cmd
シェルの一方を終了します(bye
)。メンバーがクラスタから離脱したことを示すメッセージがもう一方のシェルに表示されます。次に例を示します。
2011-03-14 17:56:22.920/313.907 Oracle Coherence GE 3.7.0.0 <D5> (thread=Cluster, member=2): Member 3 left service Management with senior member 1 2011-03-14 17:56:22.935/313.922 Oracle Coherence GE 3.7.0.0 <D5> (thread=Cluster, member=2): Member 3 left service DistributedCache with senior member 1 2011-03-14 17:56:22.967/313.954 Oracle Coherence GE 3.7.0.0 <D5> (thread=Cluster, member=2): TcpRing disconnected from Member(Id=3, Timestamp=2011-03-14 17:55:21.803, Address=130.35.99.213:8092, MachineId=49877, Location=site:us.oracle.com,machine:tpfaeffl-lap7,process:1008, Role=TangosolCoherenceQueryPlus) due to a peer departure; removing the member. 2011-03-14 17:56:22.982/313.969 Oracle Coherence GE 3.7.0.0 <D5> (thread=Cluster, member=2): Member(Id=3, Timestamp=2011-03-14 17:56:22.982, Address=130.35.99.213:8092, MachineId=49877, Location=site:us.oracle.com,machine:tpfaeffl-lap7,process:1008, Role=TangosolCoherenceQueryPlus) left Cluster with senior member 1
それぞれのキャッシュ・クライアントを終了し(bye
)、再起動しても、前のセッションのデータは引き続き使用可能です。これは、データがキャッシュ・サーバーに保持されているためです。
別のCoherenceキャッシュ・サーバーを起動し、起動されている最初のサーバーを終了しても([Ctrl]+[C]
キーを使用するか、コマンド・ウィンドウを閉じる)、データは引き続き使用可能です。
query.cmd
シェルとcache-server.cmd
シェルの両方を終了します。query.cmd
を再起動します。コマンドcreate
cache
test
を使用して、test
という名前のキャッシュを作成します。これまでと同様に、値をキャッシュに挿入してみてください。キャッシュ・クライアントは記憶域無効モードで起動するように構成されているため、次のようなメッセージが表示されます。
com.tangosol.net.RequestPolicyException: No storage-enabled nodes exist for service DistributedCache
cache-server.cmd
ファイルを実行して、キャッシュ・サーバーを起動します。もう一度、値を挿入してみてください。今度は値が受け付けられます。
すべてのキャッシュ・サーバーを終了します。
cache-server.cmd
の出力のメンバーIDの値が1以外の場合、キャッシュ・サーバーが、Coherenceを実行している1つ以上の他のキャッシュ・サーバーまたはプロセスとともにクラスタ化されていることを示します。これらのサーバーまたはプロセスは、ネットワーク上で実行されている場合もあれば、自分のホスト上でローカルで実行されている場合もあります。Coherenceをローカルまたはネットワークで実行している他のプロセスとともにクラスタ化することはCoherenceのデフォルトの動作ですが、このチュートリアルを実施している間は、Coherenceを自分のホストに制限することを強くお薦めします。
注意: Coherenceを1 つのホストに制限するために、このチュートリアルで使用するキャッシュ・サーバーおよびキャッシュ・クライアントの実行可能ファイルでは、3155 に設定されたtangosol.coherence.clusterport コマンドライン・プロパティを使用します。 |
cache-server.cmd
キャッシュ・サーバー・コマンドの出力におけるメンバーIDの値は、クラスタ内のメンバーが1つであるか複数であるかを示します。このチュートリアルでは、メンバーIDの値は1である必要があります。
...
In MasterMemberSet
ThisMember=Member(Id should be equal to 1
)
...
メンバーIDの値が1より大きい場合、サブネット内に複数のクラスタが形成されていることを意味します。
Coherenceを自分のホストに制限するには、いくつかの方法があります。最も簡単な方法は、tangosol.coherence.clusterport
システム・プロパティを使用して、キャッシュ・サーバーの起動ファイルで一意のクラスタ・ポート値を宣言する方法です。たとえば、cache-server.cmd
ファイルに次のJavaオプションを追加します。このシステム・プロパティに割り当てる値には、電話番号の下4桁など、任意の一意の値を使用できます。
-Dtangosol.coherence.clusterport=3155
「Coherenceを自分のホストに制限する」の手順を実行しても、cache-server.cmd
コマンドから返されるメンバーIDの値が1でない場合は、解決の必要な問題が他にもある可能性があります。
ネットワークから切断するか、ホスト上でネットワークを無効にします。キャッシュ・サーバーの起動時にエラーや例外が発生する場合は、ネットワークの設定の変更が必要である可能性があります。次の手順をそれぞれ1つずつ試し、それぞれの手順が終わるたびにキャッシュ・サーバーを再起動してください。
仮想プライベート・ネットワーク(VPN)に接続している場合は切断します。デフォルトでは、ほとんどのVPNはマルチキャスト・トラフィックおよび一部のユニキャスト・トラフィックを許可しないように構成されています。この環境では、出荷時の構成のままではCoherenceが動作しない場合があります。VPN経由で稼働するようにCoherenceを構成することもできますが、それにはいくつかの高度な設定が必要です。
ファイアウォールを実行している場合は、指定したアドレスおよびポートを使用できるように構成します。
引き続き問題が発生する場合は、すべてのネットワークから切断します。これには、無線ネットワークと有線ネットワークが含まれます。
前述のオプションがすべて失敗した場合は、1つのホストで稼働するようにCoherenceを設定します。