この演習では、Coherenceクラスタ化キャッシュの単純なタイプの情報にアクセスし、それらの情報を更新および削除するJavaコンソール・ベースの単純なアプリケーションを開発します。また、Coherence Java APIのNamedCache
およびCacheFactory
についても学習します。
Eclipse IDEを使用して、次の作業を行います。
新規プロジェクトの作成
新しい名前付きキャッシュ(NamedCache
オブジェクト)の作成
キャッシュへの情報の挿入と取得
キャッシュに関する情報の取得
この章には次の項が含まれます:
Coherenceのキャッシュはすべて名前が付いており、それらのキャッシュが存在するクラスタ・インスタンスによって存続期間が調べられ、com.tangosol.net.NamedCache
インタフェースを実装します。NamedCache
インタフェースはjava.util.Map
インタフェースを拡張したもので、クラスタ・メンバー間で共有しているデータおよびリソースを保持します。各NamedCache
オブジェクトは、キーと値のペアとしてデータを保持します。キーと値のオブジェクト・タイプは単純でも複合でもかまいません。NamedCache
インタフェースは、ロックおよび同期、記憶域統合、問合せ、イベント集計、トランザクションなどの拡張機能をMap
インタフェースに提供します。表3-1に、NamedCache
インタフェースでよく使用されるメソッドをいくつか示します。
表3-1 NamedCacheインタフェースのメソッド
メソッド名 | 説明 |
---|---|
|
|
|
|
|
この値を含むエントリが |
|
|
|
オブジェクトをキャッシュに挿入し、前の値を返します(ある場合)。 |
|
このマップからこの |
|
一連のキーと値のペアを返します。 |
|
すべての値をコレクションとして取得しなおします。 |
|
この |
com.tangosol.net.CacheFactory
クラスは通常、NamedCache
オブジェクトのインスタンスを取得するために使用します。表3-2に、CacheFactory
クラスでよく使用されるメソッドをいくつか示します。
表3-2 CacheFactoryクラスのメソッド
メソッド名 | 説明 |
---|---|
|
Coherenceのサービスを実行しているクラスタ・オブジェクトを取得します。 |
|
すべてのクラスタ化されたサービスをシャットダウンします。 |
|
キャッシュのインスタンスを返します。クラスタ内の既存のキャッシュに参加するか、これが最初のメンバーである場合はキャッシュを作成します。 |
NamedCache
インタフェースおよびCacheFactory
クラスのメソッドの詳細な一覧は、C:\oracle\product\coherence\doc
にあるJavadocを参照してください。
ここでは、Coherenceクラスタ化キャッシュの単純なタイプの情報にアクセスし、それらの情報を更新および削除するJavaプログラムの作成方法について説明します。
CoherenceのJavaベース・アプリケーションを作成するには:
Eclipseで新しいアプリケーション・クライアント・プロジェクトを作成します。プロジェクトにInsertValue
という名前を付けます。フォルダがC:\home\oracle\workspace\InsertValue
であることを確認してください。
「New Application Client Project」ダイアログ・ボックスの「Configuration」セクションで、「Modify」をクリックします。「Project Facets」ダイアログ・ボックスで、「Configuration」ドロップダウン・リストから「CoherenceConfig」を選択します。
詳細な手順は、「Eclipse IDEでの新規プロジェクトの作成」を参照してください。
最初のCoherence Javaプログラムを作成します。「New Java Class」ダイアログ・ボックスで、クラスにMyFirstSample
という名前を付け、「public static void main(String[] args)」チェック・ボックスを選択します。
詳細は、「Javaクラスの作成」を参照してください。
Eclipseエディタで、NamedCache
オブジェクトの作成、キャッシュの値の入力および入力した値の検証を実行するコードを記述します。例3-1にサンプル・プログラムを示します。
例3-1 NamedCacheオブジェクトの作成: 値の挿入と検証
package com.oracle.handson; import com.tangosol.net.CacheFactory; import com.tangosol.net.NamedCache; public class MyFirstSample { public MyFirstSample() { } public static void main(String[] args) { // create or get a named cache called mycache NamedCache myCache = CacheFactory.getCache("mycache"); // put key, value pair into the cache. myCache.put("Name","Gene Smith"); System.out.println("Value in cache is " + myCache.get("Name")); } }
実行中のキャッシュ・サーバーがあれば停止します。詳細は、「キャッシュ・サーバーの停止」を参照してください。
Eclipse IDEでプログラムを実行します。エディタでMyFirstSample.java
クラスを右クリックし、「Run As」→「Run Configuration」を選択します。「Oracle Coherence」をダブルクリックして、Coherenceの構成を作成します。「Run Configuration」ダイアログ・ボックスの「Name」フィールドにMyFirstSample
と入力します。
「Main」タブで、「Project」フィールドにInsertValue
と入力し、「Main class」フィールドにcom.oracle.handson.MyFirstSample
と入力します。
「Coherence」タブで、「Cluster port」フィールドに一意の値(3155など)を入力して、Coherenceが自分のホストに制限されるようにします。「Local storage」で「Enabled (cache server)」を選択します。
「Classpath」タブでは、「Bootstrap Entries」リストにcoherence.jar
ファイルが表示されているはずです。「Apply」、「Run」の順にクリックします。
例3-2のようなメッセージが表示されます。
例3-2 MyFirstSampleプログラムの出力
2012-08-15 15:53:41.041/0.515 Oracle Coherence 12.1.2.0 <Info> (thread=main, member=n/a): Loaded operational configuration from "jar:file:/C:/oracle/Middleware/Oracle_Home/coherence/lib/coherence.jar!/tangosol-coherence.xml"
2012-08-15 15:53:41.088/0.562 Oracle Coherence 12.1.2.0 <Info> (thread=main, member=n/a): Loaded operational overrides from "jar:file:/C:/oracle/Middleware/Oracle_Home/coherence/lib/coherence.jar!/tangosol-coherence-override-dev.xml"
2012-08-15 15:53:41.135/0.609 Oracle Coherence 12.1.2.0 <Info> (thread=main, member=n/a): Loaded operational overrides from "file:/C:/home/oracle/workspace/InsertValue/build/classes/tangosol-coherence-override.xml"
2012-08-15 15:53:41.135/0.609 Oracle Coherence 12.1.2.0 <D5> (thread=main, member=n/a): Optional configuration override "cache-factory-config.xml" is not specified
2012-08-15 15:53:41.135/0.609 Oracle Coherence 12.1.2.0 <D5> (thread=main, member=n/a): Optional configuration override "cache-factory-builder-config.xml" is not specified
2012-08-15 15:53:41.135/0.609 Oracle Coherence 12.1.2.0 <D5> (thread=main, member=n/a): Optional configuration override "/custom-mbeans.xml" is not specified
Oracle Coherence Version 12.1.2.0 Build 36845
Grid Edition: Development mode
Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.
2012-08-15 15:53:41.369/0.843 Oracle Coherence GE 12.1.2.0 <Info> (thread=main, member=n/a): Loaded cache configuration from "jar:file:/C:/oracle/Middleware/Oracle_Home/coherence/lib/coherence.jar!/coherence-cache-config.xml"
2012-08-15 15:53:41.526/1.000 Oracle Coherence GE 12.1.2.0 <Info> (thread=main, member=n/a): Loaded cache configuration from "jar:file:/C:/oracle/Middleware/Oracle_Home/coherence/lib/coherence.jar!/internal-txn-cache-config.xml"
2012-08-15 15:53:43.197/2.671 Oracle Coherence GE 12.1.2.0 <Info> (thread=main, member=n/a): Created cache factory com.tangosol.net.ExtensibleConfigurableCacheFactory
2012-08-15 15:53:44.197/3.671 Oracle Coherence GE 12.1.2.0 <D4> (thread=main, member=n/a): TCMP bound to /130.35.99.202:8088 using SystemDatagramSocketProvider
2012-08-15 15:53:47.635/7.109 Oracle Coherence GE 12.1.2.0 <Info> (thread=Cluster, member=n/a): Created a new cluster "cluster:0x47DB" with Member(Id=1, Timestamp=2012-08-15 15:53:44.338, Address=130.35.99.202:8088, MachineId=18578, Location=site:,machine:tpfaeffl-lap7,process:4920, Role=OracleHandsonMyFirstSample, Edition=Grid Edition, Mode=Development, CpuCount=2, SocketCount=1)
2012-08-15 15:53:47.635/7.109 Oracle Coherence GE 12.1.2.0 <Info> (thread=main, member=n/a): Started cluster Name=cluster:0x47DB
Group{Address=224.12.1.0, Port=3155, TTL=4}
MasterMemberSet(
ThisMember=Member(Id=1, Timestamp=2012-08-15 15:53:44.338, Address=130.35.99.202:8088, MachineId=18578, Location=site:,machine:tpfaeffl-lap7,process:4920, Role=OracleHandsonMyFirstSample)
OldestMember=Member(Id=1, Timestamp=2012-08-15 15:53:44.338, Address=130.35.99.202:8088, MachineId=18578, Location=site:,machine:tpfaeffl-lap7,process:4920, Role=OracleHandsonMyFirstSample)
ActualMemberSet=MemberSet(Size=1
Member(Id=1, Timestamp=2012-08-15 15:53:44.338, Address=130.35.99.202:8088, MachineId=18578, Location=site:,machine:tpfaeffl-lap7,process:4920, Role=OracleHandsonMyFirstSample)
)
MemberId|ServiceVersion|ServiceJoined|MemberState
1|12.1.2|2012-08-15 15:53:44.338|JOINED
RecycleMillis=1200000
RecycleSet=MemberSet(Size=0
)
)
TcpRing{Connections=[]}
IpMonitor{Addresses=0}
2012-08-15 15:53:47.838/7.312 Oracle Coherence GE 12.1.2.0 <D5> (thread=Invocation:Management, member=1): Service Management joined the cluster with senior service member 1
2012-08-15 15:53:47.901/7.390 Oracle Coherence GE 12.1.2.0 <Info> (thread=main, member=1): Loaded Reporter configuration from "jar:file:/C:/oracle/Middleware/Oracle_Home/coherence/lib/coherence.jar!/reports/report-group.xml"
2012-08-15 15:53:48.276/7.750 Oracle Coherence GE 12.1.2.0 <D5> (thread=DistributedCache, member=1): Service DistributedCache joined the cluster with senior service member 1
Value in cache is Gene Smith
2012-08-15 15:53:48.432/7.906 Oracle Coherence GE 12.1.2.0 <D4> (thread=ShutdownHook, member=1): ShutdownHook: stopping cluster node
2012-08-15 15:53:48.447/7.921 Oracle Coherence GE 12.1.2.0 <D5> (thread=Cluster, member=n/a): Service Cluster left the cluster
2012-08-15 15:53:48.447/7.921 Oracle Coherence GE 12.1.2.0 <D5> (thread=DistributedCache, member=n/a): Service DistributedCache left the cluster
put
メソッドやget
メソッドを使用せずに、キャッシュから値を取得するJavaクラスを作成するには:
main
メソッドを持つ、MyFirstSampleReader
という名前の別のJavaクラスを作成します。詳細は、「Javaクラスの作成」を参照してください。例3-3にサンプル・プログラムを示します。
例3-3 キャッシュからの値の取得
package com.oracle.handson; import com.tangosol.net.CacheFactory; import com.tangosol.net.NamedCache; public class MyFirstSampleReader { public MyFirstSampleReader() { } public static void main(String[] args) { // ensure we are in a cluser CacheFactory.ensureCluster(); // create or get a named cache called mycache NamedCache myCache = CacheFactory.getCache("mycache"); System.out.println("Value in cache is " + myCache.get("Name")); } }
Eclipse IDEでMyFirstSampleReader
クラスを実行します。エディタでMyFirstSampleReader.java
クラスを右クリックし、「Run As」→「Run Configuration」を選択します。
「Run Configuration」ダイアログ・ボックスの「Name」フィールドにMyFirstSampleReader
と入力します。「Main」タブの「Project」フィールドにInsertValue
が表示されていることを確認し、「Coherence」タブで、ローカル記憶域が有効になっていること、およびCoherenceを自分のホストに制限するために「Cluster port」が3155に設定されていることを確認します。「Apply」、「Run」の順にクリックします。
例3-4にプログラムの出力を示します。NULL値が返されています。MyFirstSample
プログラムによってNamedCache
キャッシュが正常に作成され、値が移入されますが、このキャッシュはMyFirstSample
プロセス・メモリー内にのみ存在します。MyFirstSample
プログラムが終了すると、キャッシュも終了します。
例3-4 MyFirstSampleReaderプログラムの出力
2012-08-15 16:00:43.229/0.328 Oracle Coherence 12.1.2.0 <Info> (thread=main, member=n/a): Loaded operational configuration from "jar:file:/C:/oracle/Middleware/Oracle_Home/coherence/lib/coherence.jar!/tangosol-coherence.xml"
2012-08-15 16:00:43.291/0.390 Oracle Coherence 12.1.2.0 <Info> (thread=main, member=n/a): Loaded operational overrides from "jar:file:/C:/oracle/Middleware/Oracle_Home/coherence/lib/coherence.jar!/tangosol-coherence-override-dev.xml"
2012-08-15 16:00:43.322/0.421 Oracle Coherence 12.1.2.0 <Info> (thread=main, member=n/a): Loaded operational overrides from "file:/C:/home/oracle/workspace/InsertValue/build/classes/tangosol-coherence-override.xml"
2012-08-15 16:00:43.338/0.437 Oracle Coherence 12.1.2.0 <D5> (thread=main, member=n/a): Optional configuration override "cache-factory-config.xml" is not specified
2012-08-15 16:00:43.338/0.437 Oracle Coherence 12.1.2.0 <D5> (thread=main, member=n/a): Optional configuration override "cache-factory-builder-config.xml" is not specified
2012-08-15 16:00:43.338/0.437 Oracle Coherence 12.1.2.0 <D5> (thread=main, member=n/a): Optional configuration override "/custom-mbeans.xml" is not specified
Oracle Coherence Version 12.1.2.0 Build 36845
Grid Edition: Development mode
Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.
2012-08-15 16:00:43.932/1.031 Oracle Coherence GE 12.1.2.0 <D4> (thread=main, member=n/a): TCMP bound to /130.35.99.202:8088 using SystemDatagramSocketProvider
2012-08-15 16:00:47.338/4.437 Oracle Coherence GE 12.1.2.0 <Info> (thread=Cluster, member=n/a): Created a new cluster "cluster:0x47DB" with Member(Id=1, Timestamp=2012-08-15 16:00:44.057, Address=130.35.99.202:8088, MachineId=18578, Location=site:,machine:tpfaeffl-lap7,process:3752, Role=OracleHandsonMyFirstSampleReader, Edition=Grid Edition, Mode=Development, CpuCount=2, SocketCount=1)
2012-08-15 16:00:47.338/4.437 Oracle Coherence GE 12.1.2.0 <Info> (thread=main, member=n/a): Started cluster Name=cluster:0x47DB
Group{Address=224.12.1.0, Port=3155, TTL=4}
MasterMemberSet(
ThisMember=Member(Id=1, Timestamp=2012-08-15 16:00:44.057, Address=130.35.99.202:8088, MachineId=18578, Location=site:,machine:tpfaeffl-lap7,process:3752, Role=OracleHandsonMyFirstSampleReader)
OldestMember=Member(Id=1, Timestamp=2012-08-15 16:00:44.057, Address=130.35.99.202:8088, MachineId=18578, Location=site:,machine:tpfaeffl-lap7,process:3752, Role=OracleHandsonMyFirstSampleReader)
ActualMemberSet=MemberSet(Size=1
Member(Id=1, Timestamp=2012-08-15 16:00:44.057, Address=130.35.99.202:8088, MachineId=18578, Location=site:,machine:tpfaeffl-lap7,process:3752, Role=OracleHandsonMyFirstSampleReader)
)
MemberId|ServiceVersion|ServiceJoined|MemberState
1|12.1.2|2012-08-15 16:00:44.057|JOINED
RecycleMillis=1200000
RecycleSet=MemberSet(Size=0
)
)
TcpRing{Connections=[]}
IpMonitor{Addresses=0}
2012-08-15 16:00:47.385/4.484 Oracle Coherence GE 12.1.2.0 <D5> (thread=Invocation:Management, member=1): Service Management joined the cluster with senior service member 1
2012-08-15 16:00:47.447/4.546 Oracle Coherence GE 12.1.2.0 <Info> (thread=main, member=1): Loaded Reporter configuration from "jar:file:/C:/oracle/Middleware/Oracle_Home/coherence/lib/coherence.jar!/reports/report-group.xml"
2012-08-15 16:00:47.635/4.734 Oracle Coherence GE 12.1.2.0 <Info> (thread=main, member=1): Loaded cache configuration from "jar:file:/C:/oracle/Middleware/Oracle_Home/coherence/lib/coherence.jar!/coherence-cache-config.xml"
2012-08-15 16:00:47.744/4.843 Oracle Coherence GE 12.1.2.0 <Info> (thread=main, member=1): Loaded cache configuration from "jar:file:/C:/oracle/Middleware/Oracle_Home/coherence/lib/coherence.jar!/internal-txn-cache-config.xml"
2012-08-15 16:00:47.854/4.953 Oracle Coherence GE 12.1.2.0 <Info> (thread=main, member=1): Created cache factory com.tangosol.net.ExtensibleConfigurableCacheFactory
2012-08-15 16:00:47.963/5.062 Oracle Coherence GE 12.1.2.0 <D5> (thread=DistributedCache, member=1): Service DistributedCache joined the cluster with senior service member 1
Value in cache is null
「Eclipse IDEでのキャッシュ・サーバーの起動」で作成したDefaultCacheServer
を起動します。「Main」タブの「Project」フィールドにInsertValue
が表示されていることと、「Coherence」タブでローカル記憶域が有効になっていることを確認します。「Apply」、「Run」の順にクリックします。
MyFirstSample
を実行してNamedCache
に値を挿入し、MyFirstSampleReader
を実行してキャッシュから値を読み取ります。例3-5に示す出力を参照してください。MyFirstSample
によって格納されたGene
Smith
という値がMyFirstSampleReader
によって返されています。
例3-5 キャッシュ・サーバーを実行している状態でのMyFirstSampleReaderプログラムの出力
2012-08-15 16:13:52.760/0.313 Oracle Coherence 12.1.2.0 <Info> (thread=main, member=n/a): Loaded operational configuration from "jar:file:/C:/oracle/Middleware/Oracle_Home/coherence/lib/coherence.jar!/tangosol-coherence.xml"
2012-08-15 16:13:52.807/0.360 Oracle Coherence 12.1.2.0 <Info> (thread=main, member=n/a): Loaded operational overrides from "jar:file:/C:/oracle/Middleware/Oracle_Home/coherence/lib/coherence.jar!/tangosol-coherence-override-dev.xml"
2012-08-15 16:13:52.854/0.407 Oracle Coherence 12.1.2.0 <Info> (thread=main, member=n/a): Loaded operational overrides from "file:/C:/home/oracle/workspace/InsertValue/build/classes/tangosol-coherence-override.xml"
2012-08-15 16:13:52.854/0.407 Oracle Coherence 12.1.2.0 <D5> (thread=main, member=n/a): Optional configuration override "cache-factory-config.xml" is not specified
2012-08-15 16:13:52.854/0.407 Oracle Coherence 12.1.2.0 <D5> (thread=main, member=n/a): Optional configuration override "cache-factory-builder-config.xml" is not specified
2012-08-15 16:13:52.854/0.407 Oracle Coherence 12.1.2.0 <D5> (thread=main, member=n/a): Optional configuration override "/custom-mbeans.xml" is not specified
Oracle Coherence Version 12.1.2.0 Build 36845
Grid Edition: Development mode
Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.
2012-08-15 16:13:53.416/0.969 Oracle Coherence GE 12.1.2.0 <D4> (thread=main, member=n/a): TCMP bound to /130.35.99.202:8090 using SystemDatagramSocketProvider
2012-08-15 16:13:53.776/1.329 Oracle Coherence GE 12.1.2.0 <Info> (thread=Cluster, member=n/a): This Member(Id=3, Timestamp=2012-08-15 16:13:53.596, Address=130.35.99.202:8090, MachineId=18578, Location=site:,machine:tpfaeffl-lap7,process:5544, Role=OracleHandsonMyFirstSampleReader, Edition=Grid Edition, Mode=Development, CpuCount=2, SocketCount=1) joined cluster "cluster:0x47DB" with senior Member(Id=1, Timestamp=2012-08-15 16:13:03.869, Address=130.35.99.202:8088, MachineId=18578, Location=site:,machine:tpfaeffl-lap7,process:3468, Role=CoherenceServer, Edition=Grid Edition, Mode=Development, CpuCount=2, SocketCount=1)
2012-08-15 16:13:53.979/1.532 Oracle Coherence GE 12.1.2.0 <D5> (thread=Cluster, member=n/a): Member 1 joined Service Management with senior member 1
2012-08-15 16:13:53.979/1.532 Oracle Coherence GE 12.1.2.0 <D5> (thread=Cluster, member=n/a): Member 1 joined Service DistributedCache with senior member 1
2012-08-15 16:13:53.979/1.532 Oracle Coherence GE 12.1.2.0 <D5> (thread=Cluster, member=n/a): Member 1 joined Service ReplicatedCache with senior member 1
2012-08-15 16:13:53.979/1.532 Oracle Coherence GE 12.1.2.0 <D5> (thread=Cluster, member=n/a): Member 1 joined Service OptimisticCache with senior member 1
2012-08-15 16:13:53.979/1.532 Oracle Coherence GE 12.1.2.0 <D5> (thread=Cluster, member=n/a): Member 1 joined Service InvocationService with senior member 1
2012-08-15 16:13:53.979/1.532 Oracle Coherence GE 12.1.2.0 <Info> (thread=main, member=n/a): Started cluster Name=cluster:0x47DB
Group{Address=224.12.1.0, Port=3155, TTL=4}
MasterMemberSet(
ThisMember=Member(Id=3, Timestamp=2012-08-15 16:13:53.596, Address=130.35.99.202:8090, MachineId=18578, Location=site:,machine:tpfaeffl-lap7,process:5544, Role=OracleHandsonMyFirstSampleReader)
OldestMember=Member(Id=1, Timestamp=2012-08-15 16:13:03.869, Address=130.35.99.202:8088, MachineId=18578, Location=site:,machine:tpfaeffl-lap7,process:3468, Role=CoherenceServer)
ActualMemberSet=MemberSet(Size=2
Member(Id=1, Timestamp=2012-08-15 16:13:03.869, Address=130.35.99.202:8088, MachineId=18578, Location=site:,machine:tpfaeffl-lap7,process:3468, Role=CoherenceServer)
Member(Id=3, Timestamp=2012-08-15 16:13:53.596, Address=130.35.99.202:8090, MachineId=18578, Location=site:,machine:tpfaeffl-lap7,process:5544, Role=OracleHandsonMyFirstSampleReader)
)
MemberId|ServiceVersion|ServiceJoined|MemberState
1|12.1.2|2012-08-15 16:13:03.869|JOINED,
3|12.1.2|2012-08-15 16:13:53.596|JOINED
RecycleMillis=1200000
RecycleSet=MemberSet(Size=0
)
)
TcpRing{Connections=[1]}
IpMonitor{Addresses=0}
2012-08-15 16:13:54.010/1.563 Oracle Coherence GE 12.1.2.0 <D5> (thread=Invocation:Management, member=3): Service Management joined the cluster with senior service member 1
2012-08-15 16:13:54.026/1.579 Oracle Coherence GE 12.1.2.0 <Info> (thread=main, member=3): Loaded Reporter configuration from "jar:file:/C:/oracle/Middleware/Oracle_Home/coherence/lib/coherence.jar!/reports/report-group.xml"
2012-08-15 16:13:54.104/1.657 Oracle Coherence GE 12.1.2.0 <Info> (thread=main, member=3): Loaded cache configuration from "jar:file:/C:/oracle/Middleware/Oracle_Home/coherence/lib/coherence.jar!/coherence-cache-config.xml"
2012-08-15 16:13:54.260/1.813 Oracle Coherence GE 12.1.2.0 <Info> (thread=main, member=3): Loaded cache configuration from "jar:file:/C:/oracle/Middleware/Oracle_Home/coherence/lib/coherence.jar!/internal-txn-cache-config.xml"
2012-08-15 16:13:54.385/1.938 Oracle Coherence GE 12.1.2.0 <Info> (thread=main, member=3): Created cache factory com.tangosol.net.ExtensibleConfigurableCacheFactory
2012-08-15 16:13:54.479/2.032 Oracle Coherence GE 12.1.2.0 <D5> (thread=DistributedCache, member=3): Service DistributedCache joined the cluster with senior service member 1
2012-08-15 16:13:54.541/2.094 Oracle Coherence GE 12.1.2.0 <D4> (thread=DistributedCache, member=3): Asking member 1 for primary ownership of PartitionSet{0, 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, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127}
Value in cache is Gene Smith
2012-08-15 16:13:54.619/2.172 Oracle Coherence GE 12.1.2.0 <D4> (thread=ShutdownHook, member=3): ShutdownHook: stopping cluster node
これは、MyFirstSample
のように、1つの操作(値を入力して終了するなど)を実行するためにのみクラスタに参加するプロセスには該当しません。デフォルトでは、すべてのプロセスが、記憶域が有効な状態で起動します。このようなプロセスではクラスタの一部としてデータを格納できます。記憶域が無効になるようにプロセスを変更してください。
MyFirstSample
クラスを右クリックし、「Run As」→「Run Configurations」を選択します。詳細は、「ランタイム構成の作成」を参照してください。
「Coherence」タブの「Local storage」で、「Disabled (cache client)」を選択します。
これは、Javaパラメータ-Dtangosol.coherence.distributed.localstorage=false
を設定するのと同様です。
実行中のキャッシュ・サーバーをシャットダウンし、MyFirstSample
クラスを再実行します。
例3-6のように、クラスタで記憶域が有効でないことを示すメッセージが表示されます。これは、このメンバーを記憶域が無効になるように設定したためです。
例3-6 キャッシュ記憶域を無効にした場合のMyFirstSampleクラスの出力
2012-08-15 16:22:38.994/0.328 Oracle Coherence 12.1.2.0 <Info> (thread=main, member=n/a): Loaded operational configuration from "jar:file:/C:/oracle/Middleware/Oracle_Home/coherence/lib/coherence.jar!/tangosol-coherence.xml"
2012-08-15 16:22:39.041/0.375 Oracle Coherence 12.1.2.0 <Info> (thread=main, member=n/a): Loaded operational overrides from "jar:file:/C:/oracle/Middleware/Oracle_Home/coherence/lib/coherence.jar!/tangosol-coherence-override-dev.xml"
2012-08-15 16:22:39.088/0.422 Oracle Coherence 12.1.2.0 <Info> (thread=main, member=n/a): Loaded operational overrides from "file:/C:/home/oracle/workspace/InsertValue/build/classes/tangosol-coherence-override.xml"
2012-08-15 16:22:39.088/0.422 Oracle Coherence 12.1.2.0 <D5> (thread=main, member=n/a): Optional configuration override "cache-factory-config.xml" is not specified
2012-08-15 16:22:39.088/0.422 Oracle Coherence 12.1.2.0 <D5> (thread=main, member=n/a): Optional configuration override "cache-factory-builder-config.xml" is not specified
2012-08-15 16:22:39.088/0.422 Oracle Coherence 12.1.2.0 <D5> (thread=main, member=n/a): Optional configuration override "/custom-mbeans.xml" is not specified
Oracle Coherence Version 12.1.2.0 Build 36845
Grid Edition: Development mode
Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.
2012-08-15 16:22:39.307/0.641 Oracle Coherence GE 12.1.2.0 <Info> (thread=main, member=n/a): Loaded cache configuration from "jar:file:/C:/oracle/Middleware/Oracle_Home/coherence/lib/coherence.jar!/coherence-cache-config.xml"
2012-08-15 16:22:39.401/0.735 Oracle Coherence GE 12.1.2.0 <Info> (thread=main, member=n/a): Loaded cache configuration from "jar:file:/C:/oracle/Middleware/Oracle_Home/coherence/lib/coherence.jar!/internal-txn-cache-config.xml"
2012-08-15 16:22:39.713/1.047 Oracle Coherence GE 12.1.2.0 <Info> (thread=main, member=n/a): Created cache factory com.tangosol.net.ExtensibleConfigurableCacheFactory
2012-08-15 16:22:39.947/1.281 Oracle Coherence GE 12.1.2.0 <D4> (thread=main, member=n/a): TCMP bound to /130.35.99.202:8088 using SystemDatagramSocketProvider
2012-08-15 16:22:43.338/4.672 Oracle Coherence GE 12.1.2.0 <Info> (thread=Cluster, member=n/a): Created a new cluster "cluster:0x47DB" with Member(Id=1, Timestamp=2012-08-15 16:22:40.057, Address=130.35.99.202:8088, MachineId=18578, Location=site:,machine:tpfaeffl-lap7,process:3348, Role=OracleHandsonMyFirstSample, Edition=Grid Edition, Mode=Development, CpuCount=2, SocketCount=1)
2012-08-15 16:22:43.338/4.672 Oracle Coherence GE 12.1.2.0 <Info> (thread=main, member=n/a): Started cluster Name=cluster:0x47DB
Group{Address=224.12.1.0, Port=3155, TTL=4}
MasterMemberSet(
ThisMember=Member(Id=1, Timestamp=2012-08-15 16:22:40.057, Address=130.35.99.202:8088, MachineId=18578, Location=site:,machine:tpfaeffl-lap7,process:3348, Role=OracleHandsonMyFirstSample)
OldestMember=Member(Id=1, Timestamp=2012-08-15 16:22:40.057, Address=130.35.99.202:8088, MachineId=18578, Location=site:,machine:tpfaeffl-lap7,process:3348, Role=OracleHandsonMyFirstSample)
ActualMemberSet=MemberSet(Size=1
Member(Id=1, Timestamp=2012-08-15 16:22:40.057, Address=130.35.99.202:8088, MachineId=18578, Location=site:,machine:tpfaeffl-lap7,process:3348, Role=OracleHandsonMyFirstSample)
)
MemberId|ServiceVersion|ServiceJoined|MemberState
1|12.1.2|2012-08-15 16:22:40.057|JOINED
RecycleMillis=1200000
RecycleSet=MemberSet(Size=0
)
)
TcpRing{Connections=[]}
IpMonitor{Addresses=0}
2012-08-15 16:22:43.416/4.750 Oracle Coherence GE 12.1.2.0 <D5> (thread=Invocation:Management, member=1): Service Management joined the cluster with senior service member 1
2012-08-15 16:22:43.494/4.828 Oracle Coherence GE 12.1.2.0 <Info> (thread=main, member=1): Loaded Reporter configuration from "jar:file:/C:/oracle/Middleware/Oracle_Home/coherence/lib/coherence.jar!/reports/report-group.xml"
2012-08-15 16:22:43.651/4.985 Oracle Coherence GE 12.1.2.0 <D5> (thread=DistributedCache, member=1): Service DistributedCache joined the cluster with senior service member 1
Exception in thread "main" com.tangosol.net.RequestPolicyException: No storage-enabled nodes exist for service DistributedCache
at com.tangosol.coherence.component.util.daemon.queueProcessor.service.grid.partitionedService.PartitionedCache$BinaryMap.onMissingStorage(PartitionedCache.CDB:32)
at com.tangosol.coherence.component.util.daemon.queueProcessor.service.grid.partitionedService.PartitionedCache$BinaryMap.ensureRequestTarget(PartitionedCache.CDB:50)
at com.tangosol.coherence.component.util.daemon.queueProcessor.service.grid.partitionedService.PartitionedCache$BinaryMap.put(PartitionedCache.CDB:22)
at com.tangosol.coherence.component.util.daemon.queueProcessor.service.grid.partitionedService.PartitionedCache$BinaryMap.put(PartitionedCache.CDB:1)
at com.oracle.common.collections.ConverterCollections$ConverterMap.put(ConverterCollections.java:1534)
at com.tangosol.coherence.component.util.daemon.queueProcessor.service.grid.partitionedService.PartitionedCache$ViewMap.put(PartitionedCache.CDB:1)
at com.tangosol.coherence.component.util.SafeNamedCache.put(SafeNamedCache.CDB:1)
at com.oracle.handson.MyFirstSample.main(MyFirstSample.java:16)
DefaultCacheServer
キャッシュ・サーバーを再起動し、MyFirstSample
およびMyFirstSampleReader
を再度実行します。2つのJavaサンプルを実行する間、データが保持されていることがわかります。
この演習では、Coherenceクラスタ化キャッシュの単純なタイプの情報にアクセスし、更新および削除を行うJavaコンソール・ベースの単純なアプリケーションを開発します。
この演習を実行するには、「Coherenceインストールのテスト」を完了している必要があります。
一般にクライアント・アプリケーションとサーバー・アプリケーションとの間で接続および切断が行われるクライアント/サーバー・アプリケーションとは異なり、Coherenceベースのクラスタ化されたアプリケーションはクラスタ内にあることを確認するのみで、その後もクラスタのサービスを使用できます。Coherenceベースのアプリケーションは通常、アプリケーションのクラスタに接続するのではなく、クラスタの一部になります。
Coherenceクラスタ化キャッシュの単純なタイプの情報にアクセスし、それらの情報を更新および削除するJavaコンソール・ベースのアプリケーションを作成するには:
...\coherence\doc
フォルダにあるCoherence Javaドキュメント(Javadoc)を使用して、CacheFactory
クラスのメソッドを調べます。
CacheFactory
クラスを使用してクラスタに参加し(ensureCluster
メソッドを使用)、その後、クラスタから離脱する(shutdown
メソッドを使用)、YourFirstCoherenceApplication
という単純なJavaコンソール・アプリケーション(Javaクラス)を記述します。Javaクラスの作成の詳細は、「Javaクラスの作成」を参照してください。
Javadocを使用して、NamedCache
インタフェースで使用可能なメソッドを調べます。
CacheFactory
メソッドgetCache
を使用して、mycache
というキャッシュ(「Coherenceインストールのテスト」の演習で使用したものと同じキャッシュ名)のNamedCache
を取得するようにアプリケーションを拡張します。
NamedCache
インスタンスで、get
メソッドを使用してmessage
キー(「Coherenceインストールのテスト」の演習で使用したものと同じキー)の値を取得します。
System.out.println(
….)
メソッドを使用して、値を標準出力に書き込みます。
例3-7に、CoherenceベースのサンプルJavaアプリケーションを示します。
例3-7 CoherenceベースのJavaアプリケーション
package com.oracle.handson; import com.tangosol.net.CacheFactory; import com.tangosol.net.NamedCache; public class YourFirstCoherenceApplication { public YourFirstCoherenceApplication() { } public static void main(String[] args) { CacheFactory.ensureCluster(); NamedCache myCache = CacheFactory.getCache("mycache"); String message = (String)myCache.get("message"); System.out.println(message); CacheFactory.shutdown(); YourFirstCoherenceApplication yourfirstcoherenceapplication = new YourFirstCoherenceApplication(); } }
Coherenceアプリケーションを実行するには:
「Eclipse IDEでのキャッシュ・サーバーの起動」で作成したDefaultCacheServer
キャッシュ・サーバーを起動します。
Coherence問合せ言語およびQueryHelper
APIを使用するキャッシュ・クライアントの実行構成を作成します。プロジェクトを右クリックして、「Run As」→「Run Configurations」を選択します。
注意: Coherence問合せ言語の詳細は、『Oracle Fusion Middleware Oracle Coherenceでのアプリケーションの開発』のCoherence問合せ言語の使用に関する項を参照してください。 |
「Run Configurations」ダイアログ・ボックスで、「Oracle Coherence」→「New launch configuration」アイコンをクリックします。構成の名前としてQueryPlus
を入力します。
「Main」タブの「Project」で、「Browse」ボタンをクリックし、「InsertValue」プロジェクトを選択します。「Main class」で、「Include system libraries when searching for a main class」を選択し、「Search」ボタンをクリックします。「Select Main Type」ダイアログ・ボックスで、QueryPlus
と入力し、「QueryPlus - com.tangosol.coherence.dslquery」を選択します。「OK」をクリックします。「Main」タブは図3-1のようになります。
「Coherence」タブの「Local storage」で、「Disabled (cache client)」を選択します。「Cluster port」に一意の値を入力します(この値は、前の項で定義したキャッシュ・サーバーに定義された値と同じである必要があります)。
「Arguments」タブで、「VM arguments」フィールドに-showversion
と入力します。
「Common」タブで、「Shared file」を選択し、「Browse」ボタンをクリックして\InsertValueプロジェクト名に移動します。「Allocate console」チェック・ボックスが選択されていることを確認します。「Apply」をクリックします。
「Run」をクリックして、QueryPlus
クライアントを起動します。例3-8のような出力がEclipseコンソールに表示されます。
CohQL>
プロンプトで、次のコマンドを入力して、mycache
という名前のキャッシュを作成し、そのキャッシュに接続します。
CohQL> create cache "mycache"
YourFirstCoherenceApplication
の実行構成を作成します。「Run Configurations」ダイアログ・ボックスで、「Name」フィールドにYourFirstCoherenceApplication
と入力します。「Main」タブで、「Project」フィールドにInsertValue
と入力し、「メイン・クラス」にcom.oracle.handson.YourFirstCoherenceApplication
と入力します。
「Coherence」タブの「Local storage」で「Enabled (cache server)」を選択し、「Cluster port」に一意の値を入力します(これは、キャッシュ・サーバーおよびキャッシュ・クライアントに使用したものと同じ値である必要があります)。
Eclipse IDEからYourFirstCoherenceApplication
を実行し、結果を確認します。
例3-9に、YourFirstCoherenceApplication
の出力を示します。この出力は、message
キーのデータがキャッシュにないことを示しています。
例3-9 YourFirstCoherenceApplicationクラスの出力
...
TcpRing{Connections=[2]}
IpMonitor{AddressListSize=0}
2012-08-15 17:20:53.276/1.625 Oracle Coherence GE 12.1.2.0 <D5> (thread=Invocation:Management, member=3): Service Management joined the cluster with senior service member 1
2012-08-15 17:20:53.307/1.656 Oracle Coherence GE 12.1.2.0 <Info> (thread=main, member=3): Loaded Reporter configuration from "jar:file:/C:/oracle/Middleware/Oracle_Home/coherence/lib/coherence.jar!/reports/report-group.xml"
2012-08-15 17:20:53.463/1.812 Oracle Coherence GE 12.1.2.0 <Info> (thread=main, member=3): Loaded cache configuration from "jar:file:/C:/oracle/Middleware/Oracle_Home/coherence/lib/coherence.jar!/coherence-cache-config.xml"
2012-08-15 17:20:53.604/1.953 Oracle Coherence GE 12.1.2.0 <Info> (thread=main, member=3): Loaded cache configuration from "jar:file:/C:/oracle/Middleware/Oracle_Home/coherence/lib/coherence.jar!/internal-txn-cache-config.xml"
2012-08-15 17:20:53.744/2.093 Oracle Coherence GE 12.1.2.0 <Info> (thread=main, member=3): Created cache factory com.tangosol.net.ExtensibleConfigurableCacheFactory
2012-08-15 17:20:53.838/2.187 Oracle Coherence GE 12.1.2.0 <D5> (thread=DistributedCache, member=3): Service DistributedCache joined the cluster with senior service member 1
2012-08-15 17:20:53.885/2.234 Oracle Coherence GE 12.1.2.0 <D4> (thread=DistributedCache, member=3): Asking member 1 for primary ownership of PartitionSet{0, 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, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127}
null
2012-08-15 17:20:54.041/2.390 Oracle Coherence GE 12.1.2.0 <D5> (thread=Invocation:Management, member=n/a): Service Management left the cluster
2012-08-15 17:20:54.057/2.406 Oracle Coherence GE 12.1.2.0 <Info> (thread=DistributedCache, member=n/a): Remains to transfer before shutting down: 0 primary partitions, 129 backup partitions
2012-08-15 17:20:54.088/2.437 Oracle Coherence GE 12.1.2.0 <D5> (thread=DistributedCache, member=n/a): Service DistributedCache left the cluster
2012-08-15 17:20:54.135/2.484 Oracle Coherence GE 12.1.2.0 <D5> (thread=Cluster, member=n/a): Service Cluster left the cluster
Eclipseコンソールで実行中のQueryPlus
キャッシュ・クライアントを使用して、message
キーを変更します。たとえば、CohQL>
プロンプトで次のコマンドを入力します。
CohQL> insert into "mycache" key "message" value "hello"
Eclipse IDEからYourFirstCoherenceApplication
を再実行して、変更された値を確認します。例3-10は、message
キーの値hello
がキャッシュに保持されていることを示しています。
例3-10 新しいキー値を含むYourFirstCoherenceApplicationクラスの出力
...
TcpRing{Connections=[2]}
IpMonitor{Addresses=0}
2012-08-15 17:37:39.760/2.109 Oracle Coherence GE 12.1.2.0 <D5> (thread=Invocation:Management, member=3): Service Management joined the cluster with senior service member 1
2012-08-15 17:37:39.807/2.156 Oracle Coherence GE 12.1.2.0 <Info> (thread=main, member=3): Loaded Reporter configuration from "jar:file:/C:/oracle/Middleware/Oracle_Home/coherence/lib/coherence.jar!/reports/report-group.xml"
2012-08-15 17:37:40.244/2.593 Oracle Coherence GE 12.1.2.0 <Info> (thread=main, member=3): Loaded cache configuration from "jar:file:/C:/oracle/Middleware/Oracle_Home/coherence/lib/coherence.jar!/coherence-cache-config.xml"
2012-08-15 17:37:40.338/2.687 Oracle Coherence GE 12.1.2.0 <Info> (thread=main, member=3): Loaded cache configuration from "jar:file:/C:/oracle/Middleware/Oracle_Home/coherence/lib/coherence.jar!/internal-txn-cache-config.xml"
2012-08-15 17:37:40.541/2.890 Oracle Coherence GE 12.1.2.0 <Info> (thread=main, member=3): Created cache factory com.tangosol.net.ExtensibleConfigurableCacheFactory
2012-08-15 17:37:40.729/3.078 Oracle Coherence GE 12.1.2.0 <D5> (thread=DistributedCache, member=3): Service DistributedCache joined the cluster with senior service member 1
hello
2012-08-15 17:37:40.838/3.187 Oracle Coherence GE 12.1.2.0 <D4> (thread=DistributedCache, member=3): Asking member 1 for primary ownership of PartitionSet{0, 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, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127}
2012-08-15 17:37:40.979/3.328 Oracle Coherence GE 12.1.2.0 <D5> (thread=Invocation:Management, member=n/a): Service Management left the cluster
2012-08-15 17:37:41.010/3.359 Oracle Coherence GE 12.1.2.0 <Info> (thread=DistributedCache, member=n/a): Remains to transfer before shutting down: 0 primary partitions, 129 backup partitions
2012-08-15 17:37:41.041/3.390 Oracle Coherence GE 12.1.2.0 <D5> (thread=DistributedCache, member=n/a): Service DistributedCache left the cluster
2012-08-15 17:37:41.104/3.453 Oracle Coherence GE 12.1.2.0 <D5> (thread=Cluster, member=n/a): Service Cluster left the cluster
YourFirstCoherenceApplication
の実行構成で、「Local storage」の値を「Enabled」から「Disabled」に変更します。出力は前回の実行と同じです。
キャッシュ・サーバーおよびキャッシュ・クライアントのインスタンスをシャットダウンします。キャッシュ・サーバーを再起動し、(「Local storage」に新しい値を指定して)YourFirstCoherenceApplication
を再実行します。今回は出力がNULL
になります。
アプリケーションで(put
メソッドを使用して)message
キーの値を変更した場合、新しい値がキャッシュ・クライアントで使用可能であることを確認します。
たとえば、get
メソッドをコメント・アウトし、put
メソッドを追加します。
//String message = (String)myCache.get("message"); String message = (String)myCache.put("message", "bye");
YourFirstCoherenceApplication
を実行します。
QueryPlus
キャッシュ・クライアントでget
コマンドを実行します。
select key(), value() from "mycache" where key() is "message"
出力としてbye
が表示されます。