...

WPF / ObjectGrid 1 ソフトウェア事業 澤出達郎

by user

on
Category: Documents
46

views

Report

Comments

Transcript

WPF / ObjectGrid 1 ソフトウェア事業 澤出達郎
WPF /
ObjectGrid
ソフトウェア事業 澤出達郎
V1.1
1
アジェンダ
n
WPF (WebSphere Partitioning Facility)
n
ObjectGrid
2
WPF概要
WebSphere Partitioning Facility
WPF = WebSphere Partitioning Facility
3
WPFとは?
リクエストの内容を見て目的の場所に
ルーティングする機能
+
パーティション管理機能
2つの機能を提供します
4
その目的は?
OLTP処理のパフォーマンスの向上
データベースのボトルネックを解消
現在のJ2EEサーバーは、
”read-mostly” (読み取り主体)の
処理には強い
書き込みが増えてくると
DBボトルネックが発生
5
J2EEサーバーのボトルネックとは?
WAS クラスター
Requests
DBへのUpdate
/ Readが発生
単一のDB
DB
WLM
ラウンドロビン
でディスパッチ
キャッシュの
有効度が低い
ロック待ち
大量のReadアクセス
ボトルネックを理由としては以下のような現象が考えられます。
リクエストは、公平にディスパッチされます。それぞれのサーバーでは、キャッシュを保持しますが、
短い時間でデータが更新される場合は、キャッシュの有効度は低くなります。結果としてデータ
ベースに対する更新アクセス及び並行して大量のReadアクセスが発生します。これらのアクセスは
整合性を維持するためにトランザクション を持って処理されるため、ロック待ちが発生するようになり
ます。データベースは多くの場合、単一のものが使用されており、競合が発生しやすい状況です。
6
どうやってボトルネックを解消するの?
キャッシュ
処理
処理リクエスト
パーティション“IBM”メモリ内
データベース
多くの処理をキャッシュで処理
データベースの負荷を軽減
効果
No.1
7
何故キャッシュできるの?
“IBM”はクラスター
内で唯一の存在
(Singleton)
IBM
パーティション・ルーター
メモリー中にデータ
を蓄えても他と不
整合を起こさない
EBA
処理要求
Key=“IBM”
コンテンツ“IBM”を見て
ルーティング
OCRL
キーが”IBM”の処理要求は、
IBMにしか飛ばない
クラスター
8
Singletonで大丈夫なの?
IBM
EBA
EBA IBM
OCRL
OCRL
クラスター
HA Manager
!
クラスター
HA Manager
9
WPFを使用したクラスタリングのイメージ
WAS クラスター
Requests
DB
Cache
Cache
Cache
Cache
WPF
WLM
Cache
Cache
Cache
Cache
専用の処理空間
へリクエストを
ルーティング
HAManager
が監視
分割されたDB
キャッシュを
活用
DBアクセスの低減
WPF を活用した非対称型クラスタリングの概念図です。リクエストは、Keyに基づいて対応するパー
ティション にルーティングされます。個々のパーティションでは、キャッシュや非同期処理が有効に
利用されています。従来に比較してDBアクセス量は減っています。また、DBは、分割されており、
WPF が使い分けを行っています。個々のパーティションは、HAManagerにより監視されており、障
害発生時にはフェールオーバーされます。
10
クラスタリングの新しいパラダイム
非対称型クラスタリング
n
対照型クラスタリングは、リスクエスト全体を各マシンに分配
非対称型クラスタリングは、リクエストを分割して処理
n
個々のパーティションはSingletonとなるためHA機能が必要
n
処理要求
公平に分散
Key に基づいて要求を分割
WLM
クラスター・メンバーに分散
分割された専用の処理空間へ
処理システム
対照型クラスタリング
非対称型クラスタリング
非対称型クラスタリングは、クラスタリングの新しいパラダイムです。従来の全てのリクエストを公平
に分散して処理する“対照型”に対して非対称型では、リクエストを分割して処理を行います。分割
されたリクエストは専用に処理空間に送られて処理が行われます。個々の処理空間では、論理的
に分離されシングルサーバーであるかのように 処理が行われます 。
非対称型の処理では、個々の空間(パーティション)が単一の存在になるために障害が発生すると
その空間に割り当てられたKeyの処理が停止してしまいます。このために個々の空間に対する高可
用性を持たせる必要があります。
11
非対称クラスタリング SeverSide.comより
http://www.theserverside.com/news/talks/videos/BillyNewportText/interview.tss
12
WPF適用例
WebSphere Partitioning Facility
WPF = WebSphere Partitioning Facility
13
WPFの適用例 オンライン証券 (適用前)
n 会員から証券銘柄の売買を受け付けるシステム
n 複数の銘柄をクラスター全体でサポート
n 売り注文、買い注文の突合せによって売買が成立
売り注文
買い注文
買い注文
クラスター
WAS
読み取り/更新
DB
WAS
ボトルネック
売り注文
WAS
WAS
頻繁な更新
大量の参照
14
WPFの適用例 オンライン証券 (適用後)
n 株の銘柄単位でパーティションを作成
n 各銘柄毎の売買情報をメモリ中にキャッシュ
n 非同期処理にてマッチングを実施
売り注文
買い注文
買い注文
売り注文
クラスター
必要に応じて
DBに保管
キャッシュ
DB
キャッシュ
キャッシュ
キャッシュ
追加、更新時のみ
のアクセス
15
WPFの適用例 オンライン証券 非同期Bean*の利用
n メモリ中に蓄えたデータを非同期に処理
n マッチング処理をメモリ内で非同期Beanが処理を行う
さらにパフォーマンス向上
パーティション
Startup
Bean
Work
Manager
注文
注文
売買成立
Async
Bean
Async
Bean
PSSB
マッチング処理
A銘柄売 り注文
パーシスタンス
DB
Entity
Bean
¥100 50株
¥105 100株
¥98
10株
¥120 50株
A銘柄買い注 文
¥100 100株
¥90 100株
¥95
10株
¥110 50株
メッセージ・ キュー
アプリケーション・キャッシュ
*WAS V6では標準 でサポート、CommonJ WorkManagerとAsynch Beanの2種類が存在
図は、Asynch Beanを使用した例
パーティション内で行われる非同期処理の例になります。この例は、オンライン証券の業務を非同
期化したものです。注文がパーティションに届くとメモリキャッシュを更新し、DBに保管を行います。
DBは、障害発生時のキャッシュの再生に使用されます。メモリ中にキャッシュされた売り注文、買い
注文を非同期Bean を使って定期的にマッチングの処理を行っています。売買が成立した場合は、
メッセージ・キューに結果を送ります。
16
パーティションとは?
WebSphere Partitioning Facility
WPF = WebSphere Partitioning Facility
17
WPF使用システムの具体的なイメージ
Partition 001
例. 5枚のブレード・サーバーに
10プロセスのアプリケーション・サーバー
その上に500個のパーティション
パーティションは、アプリケーション・サーバーのプロセス内に作られる論理的な処理空間です。こ
れらは論理的な分割であり、物理的には分離されていません。一つのプロセス内のリソースを共有
しています。一つのアプリケーション・サーバーのプロセス内に複数のパーティション を持つことが
可能です。この例では、5枚のブレードサーバーに2個づつのアプリケーション・サーバーを配置し
そこに500個のパーティション を配置しています。
18
パーティションとは?
n
Content Based ルーティングの宛先
u
ルーティングの方法は2種類
l
l
u
隔離された空間では無い
l
n
同じアプリケーション・サーバーに存在するパーティションは、同一のメモリ空間に
存在
個々のパーティションは、クラスター内で一つだけ存在
u
u
n
IIOPルーティング
HTTPルーティング
一つだけの存在(Singleton)であることが保障されている
パーティション名は、クラスター全体で固有
パーティションは、HA Managerにより監視
u
障害時にはPeer failoverによって復元される
Work Load Management(WLM)の視点からみるとパーティションとは、リクエストがルーティションさ
れる先と言えます。ルーティングには、IIOPを利用するEJBからのルーティングとHTTPを利用した
Webベースのものがあります。個々のパーティションはクラスター内で固有であることが 保障されて
おり、ある名前を持つパーティションは、クラスター内でひとつしかありません。パーティションは、一
つのJVMの中にあり、物理的には隔離されていません。個々のパーティションは、HAマネージャに
より監視されており障害時には正常なサーバーにフェールオーバーされます。
19
パーティションの利点とは?
n
パーティションは、Singleton
u
u
クラスターにおけるお作法”Stateless”の制約無し
開発者の自由度が高い
l
キャッシング
l
Ø メモリ中にデータを蓄えても不整合を生じない
非同期処理
Ø
u
l
n
メモリ中の蓄えたデータを遅延処理可能
順序性を持たせた処理が容易
他のクラスターメンバーと同期をとる必要無し
データベースの負荷を軽減してボトルネックを解消可能
u
キャッシュを利用しデータベースへのアクセス頻度を低減
l
例. update, insert のみアクセス。参照は、キャッシュから。
l
順序性を持たせるためにデータベースで同期をとる必要なし
単一の存在であるパーティションでは、クラスターで存在していた開発者 に対する制約が少なくなり
ます。パーティションのメモリ中に何らかのデータを蓄えてメモリを使用した処理を行ったり、リクエス
トのタイミングとは別に非同期なサーバー処理を走らせることが可能になります。特定のKeyに対す
るリクエストを順序性を持って処理することも容易になります。メモリ中にデータベースの情報を
キャッシュすることによりデータベースに対する問い合わせ処理を減らすことができます。また、非
同期処理を活用してバッチ的にまとめてリクエストを処理することも可能になりこれによってもデータ
ベースに対するアクセス回数を減らすことができます。
20
パーティションの数は?
n
Keyの数だけ生成する方法 Keyベース
u
u
u
u
n
比較的Keyの数が少ない場合
Keyの名前のパーティションを生成、Keyの名前でルーティング
Keyの追加に応じてパーティションも動的に追加される
個別のKeyのパーティションをServer間で移動可能なため、ロードバランスに
適している
個定数のパーティションを使用する方法 Hashベース
u
u
u
n
< 100,000
Keyの数が多い場合に使用
Keyの追加・削除に伴う動的なパーティションの追加・削除は必要なし
個別のKeyのパーティションの移動はできない。共通のHash Keyを持つもの
と一緒に移動になる
両方使用するHybridパターンもあり
u
アプリケーションの中でKeyベース、Hashベースを両方を使用するパターン
リクエスト母集団のパーティションへの分割には、2つのアプローチがあります。一つは、Keyベース
のパーティション化です。これは、Keyの名前を1対1でパーティションに対応させる方法です。基本
的にKeyの名前でパーティション が生成され、Keyの名前でルーティングが行われます 。Keyが追加
された場合は、動的なパーティションの追加が発生します。この方法は、個別のKeyの単位でパー
ティション の移動が可能なため、ロードバランスが行い易いという特徴があります。もう一つの方法と
しては、Hashベースのパーティション化あります。これは、Keyが多い場合に適用され、固定数 の
パーティション を使用します。Keyは、Hashされ、あるパーティションに割り当てられます。この方法
では、Keyの追加、削除の伴ってのパーティションの追加・削除は必要ありません。パーティション
の移動は、共通のHash Keyを持つものが一緒に処理されます。
一つのアプリケーションでKeyベース、Hashベースを両方使用するHybridなアプリケーション も作成
可能です。
21
高可用性は?
n HAマネージャによるピア・
フェールオーバー機能提供
u
稼動中の正常ノードに高速でパーティションを再生
n 障害時および移動時には、サービスの停止が発生
u
該当パーティションの処理には瞬断が発生
n アプリケーションがFailOverイベントを受け取り可能
u
PSSBにて実装 (ロード時、アンロード時)
partitionLoadEvent(String name)
*
実装方法
を参照
partitionUnloadEvent(String name)
u
従来のクラスターアプリケーションと違う部分
u
キャッシュの再生(保管)等の操作を行うことが可能
n ポリシー設定により挙動を制御可能
u
フェールバック、Quorum
*HAマネージャは、WAS V6 NDで導入されたものと同じテクノロジー
パーティションは、Singletonであるため障害発生時や移動時にはそのパーティション上のKeyに対
するサービスの停止が発生します。このためサービスの停止の影響を最小限 に留めるための
フェールオーバー機能が重要になります。WPFでは、HAマネージャを利用したフェールオーバー
機能を提供しています。これは、正常なサーバーを選択し、そのサーバー上にパーティション を活
動化するものです。既に稼動中 のサーバーであるため、比較的高速にフェールオーバーが行われ
ます。フェールオーバー発生時には、PSSB内のメソッドがコンテナから呼び出されます。ポリシー
設定によりフェールオーバー時の挙動を制御することができます。障害を起こしたサーバーが復帰
したときにパーティション を戻すフェールバック設定、サーバー数の1/2+1が稼動時のみパーティ
ションを活動化させるQuorum機能があります。Quorum機能は、ネットワーク障害によるネットワーク
の分断時に2重にパーティションが生成されることと防ぐ働きがあります。
22
参考:フェール・オーバー・テスト サーバー・
ダウン
n クラスター・
メンバーのサーバーを停止する
u
管理コンソールから停止。
所要時間に注目
サーバーCL1 トレース (元サーバー)
[05/10/02
[05/10/02
[05/10/02
[05/10/02
0:22:23:585
0:22:23:595
0:22:23:605
0:22:23:615
JST]
JST]
JST]
JST]
down
00000043 PartitionedAp >
00000043 PartitionedAp >
00000043 PartitionedAp >
00000043 PartitionedAp >
WPF
WPF
WPF
WPF
partitionUnloadEvent BAE Entry
partitionUnloadEvent IBM Entry
partitionUnloadEvent ORCL Entry
partitionUnloadEvent MSFT Entry
サーバーCL2 トレース (フェールオーバー先サーバー)
[05/10/02
[05/10/02
[05/10/02
[05/10/02
0:22:24:306
0:22:24:797
0:22:24:807
0:22:24:817
JST] 0000001b PartitionedAp >
JST] 0000001b PartitionedAp >
JST] 0000001b PartitionedAp >
JST] 0000001b PartitionedAp >
WPF
WPF
WPF
WPF
partitionLoadEvent ORCL Entry
partitionLoadEvent IBM Entry
partitionLoadEvent BAE Entry
partitionLoadEvent MSFT Entry
短時間(約1秒)で復旧
同一サーバーにて二つのアプリケーション・サーバープロセス間でフェールオーバーを発生させた
例です。UnloadされてからLoadされるまで約1秒で終わっています。
23
実装方法
WebSphere Partitioning Facility
WPF = WebSphere Partitioning Facility
24
パーティション対応J2EEアプリケーションとは?
n
特殊なSession BeanであるPSSBを含んでいることが必須
u
u
u
u
Partitioned S tateless S ession Bean
パーティションのライフ・サイクルに関係するメソッドを持つ
EJB Jarの中に必ず一つ必要 (一つしか持てない)
同じEJB Jarにビジネス・ロジックだけのPRSBも記述可能
l
Partitioned Routable Session Bean
l
PRSBのメソッドもパーティション・ルーターのルーティング対象
ビジネス・ロジックを分離させ、コードの可読性を向上させる
l
EJB Jar
EJB
PSSB
PRSB
PRSB
EJB
EJB
EJB
WPF に対応するアプリケーションには、PSSBと呼ばれる特殊なSession Beanを備える必要がありま
す。PSSBは、パーティションのライフサイクルに関するメソッドが含まれており、必要に応じてコンテ
ナから呼び出されます。このPSSBは、EJB Jarの中に一つしか持つことができません。パーティショ
ンへのルーティングを必要とするビジネスロジックは、PRSBとして切り出すことも可能です。PRSBは、
PSSBと同じEJB Jarにパッケージされる必要があります。PRSBの中には、PSSBが必要とする特別な
Interfaceは実装する必要はありません。PRSBには、ビジネス・ロジックを分離させコードを読み易く
する効果があります。
25
パーティションの生成方法
n
アプリケーションの起動時
u
PSSB (Partition Stateless Session Bean)の以下のメソッドを使用
l
getPartitions()
Ø 起動時にコンテナから呼び出されるメソッド
Ø
n
プログラム中で動的に追加
u
PartitionManagerの以下のメソッドを使用
l
addPartition(pd)
Ø
n
戻り値は、PartitionDefinitionの配列
引数 pdは、PartitionDefinition オブジェクト
パーティションはクラスター・メンバーに自動的に配置される
u
配置後移動させることも可能
パーティションは、アプリケーションの起動時にPSSBによって生成されます。PSSBのメソッド
getPartitions()の戻り値にパーティションの定義体であるPartitionDefinitionの配列を戻すことによっ
てパーティションが生成されます。getPartitions()は、PSSBを含んだアプリケーションの起動時にコ
ンテナから呼び出されます。通常はデータベースからキーを取り出すことにより定義体 の配列を作
成します。パーティションは、プログラムの起動中にAPIによって動的に追加することも可能です。
パーティションのサーバーへの配置は自動的に行われます 。ポリシーを設定することによりサー
バーを指定することも可能です。また、配置後移動することも可能です。
26
参考:PSSB
n
PartitionHandlerLocal をLocalインターフェースに実装
u
ライフサイクル関連の主なメソッド
PartitionDefinition[] getPartitions()
クラスター内でアプリケーション が開始される時に呼び出される。このアプリケーショ
ンで作成するパーティション のリストを戻す
void partitionLoadEvent(String name)
クラスター内であるパーティション が活動化された時に呼び出される。パーティション
で使用するリソースのセットアップに利用する
void partitionUnloadEvent(String name)
パーティションが非活動化された時に呼び出される。(他のメンバーに割り振られる
前) リソースのクリーンアップ に利用する
Remote インターフェース
Bean クラス
Home インターフェース
Local インターフェース
Local Home インターフェース
PSSBには、Local インターフェースにWPF が提供するParitionHandlerLocalを実装する必要があり
ます。ParitionHandlerLocalの中には、パーティションのライフサイクルに関連するメソッドが含まれ
ています。partitionLoadEventは、パーティションが活動化された時に呼び出され、
partitionUnloadEventは非活動化された時に呼び出されます。それぞれ、キャッシュの再生や処理
のリソースのCleanUpに利用できるEventになります。また、パッケージ中には、クライアントからの
ルーティング先を決定するための<EJBName>_PartitionKey.javaを含める必要があります。このクラ
スの戻り値がルーティング先になります。
27
パーティションの管理
WebSphere Partitioning Facility
WPF = WebSphere Partitioning Facility
28
パーティション操作方法 wpfadminコマンド及びAPI
n wpfadmin
u
パーティションの管理を行うコマンド
l
リスト表示、移動、バラつきの均衡化、非活動化、
l
パフォーマンス・モニタリング設定
ポリシーの設定
l
n API
u
EJBやWebアプリケーションは、JNDIでPartitionManagerをlookupできる
java:comp/websphere/wpf/PartitionManager
PartitionDefinition createPartitionDefinition(String pName, String tier)
void addPartition(PartitionDefinition name);
void removePartition(String name);
String[] getPartitions();
開発者はAPI を通じてパーティション を操作できます。addPartitionは動的なパーティション の追加、
removeParititionは削除を行うことができます。これは、一つのサーバーにて行えば、クラスターメン
バーに自動的 に変更が通知されます。
29
wpfadmin コマンドの例 balance
n
wpfadmin balance
u
アクティブなサーバー全体にパーティションを均衡化させる
Server CL1
Server CL1
P7
P8
P9
Server CL2
P10
Server CL2
P5
wpfadmin balance
P6
均衡化
Server CL3
P3
P1
P4
P7
P2
P5
P8
P6
P9
P10
Server CL3
P1
P4
P2
P3
wpfadmin balance コマンドは、特定のサーバー偏ったパーティション をクラスター全体に均衡化しま
す。パーティションの配置は、自動的 に決定されます。移動されるパーティションでは一時的な
サービスの停止が発生します。
30
wpfadminコマンドの例 move
n
wpfadmin move
u
アクティブなサーバー全体にパーティションを均衡化させる
Server CL1
Server CL1
P1
Server CL2
Server CL2
wpfadmin move...
移動
Server CL3
P3
P1
P4
P7
P2
P5
P8
P6
P9
P10
Server CL3
P4
P2
P3
P6
P7
P5
P8
P9
P10
wpfadmin moveコマンドでは、管理者が意図したサーバーに特定のパーティションを移動することが
できます。移動されるパーティションでは一時的なサービスの停止が発生します。
31
過熱
Hotパーティション問題への対処
n
一つのパーティションに対する負荷が増大して来たときの対
応方法は?
A)
負荷が掛かっているパーティションを比較的空いているノードに移動させる
B)
負荷が掛かっているパーティションの存在しているノードからその他のパーティ
ションを移動させる
l
l
C)
移動は簡易だが、サービスの瞬断が発生
サービスの瞬断は発生するがA よりはインパクトが少ない
LPARを使用していればそのノードにCPUを追加
l
サービスの停止しない。可能であれば最も望ましい解決方法
P3
P1
P1
: Hot Partition
P2
P2
P1
P3
パターン A
P2
P1
P3
パターン B
+
パターン C
一つのパーティション に対する負荷が高まってきた場合にできる対処は3パターンあります。まずは、
直接的に負荷が掛かっているパーティションを軽い負荷のノードに移動させる方法があります。こ
の方法は、一つのパーティションを移動するだけであり、手順は簡単ですが、負荷が掛かっている
Keyにおいてのサービスの停止が発生します。2つ目は、負荷が掛かっているパーティション の存
在するノードの他のパーティション を移動させる方法。これは、最初の方法よりもサービスの停止の
インパクトを小さくできる可能性があります。ただし、移動するパーティションではサービスの停止が
発生します。3番目の方法は、LPARを使用できるH/W上で動いている場合に適用できる方法です。
負荷が掛かっているノードに対してCPUを追加する方法です。これは、サービスの停止が発生しな
いため、可能であれば最も望ましいといえます。
32
パフォーマンス監視機能
パーティションの状況を把握可能
n
u
管理コンソール
l
u
ランタイム・マップ
大きさ=トランザクション量
直感的に状況把握
wpfadmin
コマンドラインからも
統計データ取得可能
以下のコマンドを発行
enableWPFPMI ...
PMIを活動化
2. subscribeWPFPMI ...
サブスクライブ設定
BAE
l
1.
3.
getTransactionCount ...
統計情報取得
IBM
ORCL
MSFT
ランタイム・マップ
WPFはパーティション を監視する方法を提供しています。管理コンソールからは、ランタイム・マップ
機能を使ってパーティションの状況を見ることができます。上の例では、4つのパーティションの状
況表示しています。それぞれの面積は、トランザクション量を表しています。また、wpfadmin を使用
してコマンドラインからパフォーマンス監視設定および統計情報の取得を行うこともできます。
33
WPF まとめ
WPFは、OLTP処理のボトルネックの解消に有効
l
パーティションにおいては、アプリケーションによって大胆な
キャッシュ戦略をとることが可能
l
パーティション内では非同期な処理を行うことが可能
l
パーティションは、HAマネージャによって高速にフェールオー
バーされる
l
パーティションを管理するコマンド/API有り
l
パーティションにはポリシーを設定できる
l
パーティションのパフォーマンス状況をPMIで監視可能
参考資料
Partitioning Facility User’s guide
http://publib.boulder.ibm.com/infocenter/wxdinfo/v6r0/topic/com.ibm.websphere.xd.doc/info/
WPF51/cwpfpartition_pdf.html
34
参考資料
WebSphere Partitioning Facility
WPF = WebSphere Partitioning Facility
35
パーティションの操作 ? wpfadmin
n
基本操作
u
u
u
u
u
u
u
u
u
u
u
n
listActive
listActiveWithGroups
countActivePartitionsOnServers
countActiveGroupsOnServers
list
listGroups
move
balance
disablePartition
enablePartition
setPartitionCount
パフォーマンス・モニタリング
u
u
u
u
u
enableWPFPMI
subscribeWPFPMI
setStatisticsRange
setEJBName
setPartitionCount
n
HA Manager Policy
u
u
u
u
u
u
u
n
coreGroupStatus
addServerToCoreGroup
removeServerFromCoreGroup
createPolicy
updatePolicy
deletePolicy
resolvePolicyForGroup
パフォーマンス/スケーラビリティ
u
u
u
u
u
u
u
u
updateJMXTimeout
updateCoreGroupCoordinators
updateHamConfig
getTransactionCount
getResponseTime
getFailedTransactionCount
unsubscribeWPFPMI
disableWPFPMI
管理者は、wpfadminスクリプトを通じてパーティション の操作をすることができます。基本操作、パ
フォーマンス、ポリシー、モニタリング設定、パフォーマンス・データ取得等 のコマンドが準備されて
います。
36
wpfadmin コマンドの例 listActive
n wpfadmin
l
listActive
アプリケーション・サーバーがホストしている活動パーティションを表示する
D:¥WebSphere¥AppServerV6¥profiles¥Dmgr01¥bin>wpfadmin listActive
WASX7209I: ノードnasbiCellManager01 のプロセス "dmgr" に、SOAP コネクターを使っ
て接続しました。プロセスのタイプは DeploymentManager です。
WASX7303I: 次のオプションはスクリプト環境に渡され、argv 変数に格納される引数とし
て使用可能になります: "[listActive]"
CWPFC0050I: アプリケーション WPFLab、区画 ORCL: サーバー nasbiCell01¥nasbiNode02¥CLM1
CWPFC0050I: アプリケーション WPFLab、区画 MSFT: サーバー nasbiCell01¥nasbiNode02¥CLM1
CWPFC0050I: アプリケーション WPFLab、区画 IBM: サーバー nasbiCell01¥nasbiNode02¥CLM1
CWPFC0050I: アプリケーション WPFLab、区画 BAE: サーバー nasbiCell01¥nasbiNode02¥CLM1
アプリケーション名 パーティション名
セル名¥ノード名¥サーバー名
wpfadmin listActiveは、活動中のパーティション に関する情報を戻します。この例では4つのパー
ティション の情報が戻されています。
37
参考:wpfadminコマンドの例 move 続き
n
wpfadmin move --p パーティション名 --d セル名¥ノード名
¥サーバー名
u
指定したパーティションを指定したクラスター・メンバーに移動させる
D:¥WebSphere ¥AppServerV6¥profiles¥Dmgr01¥bin>wpfadmin move --p IBM
--d nasbiCell01/nasbiNode02/CLM2
WASX7209I: ノードnasbiCellManager01 のプロセス "dmgr" に、SOAP コネクターを使っ
て接続しました。プロセスのタイプは DeploymentManager です。
WASX7303I: 次のオプションはスクリプト環境に渡され、argv 変数に格納される引数とし
て使用可能になります: "[move, --p, IBM, --d, nasbiCell01/nasbiNode02/CLM2]"
CWPFC0065I: Partition を IBM に設定します。
CWPFC0065I: Destination を nasbiCell01/nasbiNode02/CLM2 に設定します。
CWPFC0054I: サーバー nasbiCell01¥nasbiNode02¥CLM1 から
サーバーnasbiCell01¥nasbiNode02¥CLM2 への区画 IBM の移動コマンドは正常に実行依頼されました。
実際にwpfadmin move コマンドを発行した例です。サーバー“CLM1”に存在するパーティショ
ン”IBM”をサーバー”CLM2”に移動しています。
38
wpfadminコマンドの例 createPolicy
nwpfadmin
createPolicy
xxx.properties
uパーティションの挙動を制御する
ポリシーを設定可能
l 活動化サーバー
l バックアップサーバー
l Fail
Back
l Quorumの有無
uClassに対して設定可能
例.
l Class1
Ø
Partition01 ? Partition10
Server1で起動
l Class2
Ø
Partition11 ? Partition20
Server2で起動
CoreGroupName = DefaultCoreGroup
PolicyType = OneOfNPolicy
PolicyName = IBMStartupPolicy
PolicyDescription = IBM Policy
IsAlivePeriodSec = -1
QuorumEnabled = true
NumOfMatchCriteria = 3
Name_0 = -gt
Value_0 = -p
Name_1 = -ps
Value_1 = -c
Name_2 = -pn
Value_2 = IBM
Failback = true
PreferredOnly = true
NumOfPolicyServers = 2
NodeName_0 = AA0739990Node02
ServerName_0 = CLM1
NodeName_1 = AA0739990Node02
ServerName_1 = CLM2
ポリシー設定ファイルの例
パーティションには、その挙動を制御できるポリシーを設定することができます。wpfadmin
createPolicyコマンドにてその設定が行えます。ポリシーには、活動化するサーバー、バックアップ・
サーバー、Fail Backの有無、Quorumの有無等を設定可能です。また、パーティション をグループ
化した“Class”に対してまとめてポリシーを設定することも可能です。例えば、Class1 に属するパー
ティションは、全てServer1で活動化するといった設定ができます。右のポリシーファイルの設定例
では、パーティション”IBM”をCLM1で活動化する設定が為されています 。
39
参考:プログラミングの流れ
1. PSSB 、PRSBの入ったEJB JARを含むJ2EEアーカイブ
(EAR)を作成
l RADを使用可能
l wpf.jarをbuild path に含める必要あり
l PSSBは、必須。PRSBは、オプション
2. ExportしたEARに対して以下のコマンドにてWPF用のstubを
追加
l wpfStubUtil コマンドを使用
例. d:¥WebSphere¥AppServerV6¥bin¥wpfStubUtil -ear WPFLab.ear jar WPFLabEJB.jar -class billy/test/PSSB.class -temp temp
3. 2.で生成されたEARをXDのクラスターにDeploy
l インストール時にejbの再デプロイを行ってはいけない
パーティション対応のアプリケーションの作成の手順になります。Rational Application Developerを
使用して開発が可能です。EJBプロジェクトのbuild pathには、wpf.jarを含める必要があります。
PSSBを作成することが必須になります。作成したEARは、Exportし、wpfStubUtilコマンドを使用して
WPF用のstubを追加を行います。Stubが追加されたプログラムは、再デプロイを行わずに(重要)XD
のクラスターにインストールします。
40
参考:リクエスト・
ルーティングの仕組み(1) IIOP
n
EJBリクエストの場合は、Partition Routerがルーティングを行う
n
ルーティング先の決定は、ユーザー・ロジックにて決定
u
<EJBName>_PartitionKey.javaの戻り値がルーティング先パーティション
l
nullの場合は、通常のWLMルーターを使用
ユーザー・ロジック
<EJBName>_PartitionKey.java
Server1
fred
EJBリクエスト
Partition
Context is
NULL?
fred
Partition Router
Server2
null
WLM Router
従来のRouter
EJBクライアントからのパーティションへのリクエストルーティングの仕組みになります。
<EJBName>_PartitionKey.javaの戻り値によってルーティング先が決定されます。戻された値を基に
PartionRouterが対応するパーティションにリクエストを届けます。nullが戻された場合は、通常の
WLMでのルーター が使用されます。
41
参考:リクエスト・
ルーティングの仕組み(2) HTTP
n
HTTPリクエストの場合は、ODRがルーティングを行う
n
ODRは、HTTPリクエストを解析しルーティング先を決定する
Match Expression : “(user=)(*)$ ”
Classify Expression : $2
URL=www.ibm.com/something/user=fred
fred
ODR
Match Expression : “(user=)(*)(rodriguez)$”
Classify Expression : $2
URL=www.ibm.com/something/user=adolforodriguez
ODR
adolfo
HTTPでのルーティングの仕組みになります。ルーティングは、ODRによって行われます 。Match
Expressionに基づいて宛先が決定されます。上のMatch Expressionでは、userパラメータの値全体、
下の例では、rodriquezが除かれた値がパターンマッチングによって導かれます 。
42
データベース分割への対応
n
Proxy型JDBCドライバーを提供
u
u
n
ProxyDataSouce JDBCドライバーは、複数のデータソースへのProxy
分割されたデータベースへの動的なルーティングが可能
ProxyDataSourceを使用したCMP EJBが分割したデータ
ベースへのアクセスを実現
u
Facade Session Beanにてデータソースを選択しトランザクション内でCMP
EJBを使用
DS1
Entity
Bean
メソッド・コール
1. JNIDI名=DS1
2. createAccount(..)
Proxy DS
Session
Bean
DS2
中略
WPFは分割されたデータベースを選択できる仕組み”ProxyDataSource”を提供しています。実
JDBCドライバー化のデータソースに対するProxyとして動作します。ProxyDataSourceを使用する
CMP EJBを呼び出すFacade Session Beanにて宛先のデータソースを決定します。
43
参考:問題判別
n
サポートされているトレース仕様
u
n
WPFSTATUS
u
n
パーティションの活動化とWLMの準備状況を表示
HAManager
u
n
WPF,WPFSTATUS,WPFWLM,HAManager, proxyds
パーティションの活動化とポリシーの問題発生時に使用
WPFWLM
u
partitionUnloadEvent, createPartitionDefintion()...のルーティングの問題発
生時時
l
n
例. Wpfstubutilを使っているのにまだルーティングに問題あり
proxyds
u
Proxy DataSourceに関連した問題発生時
WPF関連の機能での問題判別を行うために、幾つかのトレース仕様が提供されています 。問題が
疑われる部分に設定しトレース出力を調査します。
44
参考:問題判別(続き)
n
wpfadminを使用してtrace仕様の設定が可能
n
WPFSTATUSを設定した例
D:¥WebSphere ¥AppServerV6¥profiles¥Dmgr01¥bin>wpfadmin setTraceSpec perm
WPFSTATUS=all=enabled --c CL1
WASX7209I: ノードnasbiCellManager01 のプロセス "dmgr" に、SOAP コネクターを使っ
て接続しました。プロセスのタイプは DeploymentManager です。
WASX7303I: 次のオプションはスクリプト環境に渡され、argv 変数に格納される引数とし
て使用可能になります: "[setTraceSpec, perm, WPFSTATUS=all=enabled, --c, CL1]"
CWPFC0065I: Cluster を CL1 に設定します。
CWPFC0059I: サーバー CLM1(cells/nasbiCell01/nodes/nasbiNode02/servers/CLM1|serve
r.xml#Server_1126574255391) のトレースを WPFSTATUS=all=enabled に設定します。
CWPFC0059I: サーバー CLM2(cells/nasbiCell01/nodes/nasbiNode02/servers/CLM2|serve
r.xml#Server_1126574257719) のトレースを WPFSTATUS=all=enabled に設定します。
この例は、wpfadmin setTraceSpec コマンドにてWPFSTATUSのトレース設定を行っています。クラ
スターCL1に属する2つのクラスターメンバーにトレースが設定されているのがわかります。permパ
ラメータは、この設定を永続化することを示しています。
45
ObjectGrid
46
ObjectGrid キャッシュを利用したデータ・
グリッド
DB
Message
feed
Backend
ObjectGrid
J2SE 1.4
App A
J2EE 1.4
App B
WAS
App C
Office
Application
ObjectGridは、Javaを利用する各種ミドルウェア/アプリケーション のJava Objectレベルでの統合を
実現します。各アプリケーション は、Grid上のデータをキャッシュを通じてアクセスすることになりま
す。
47
ObjectGridとは?
n
Java Objectをキャッシュするためのフレームワーク
u
u
u
n
データ整合性維持のためのトランザクション処理をサポート
u
u
u
n
J2EE / J2SE環境をサポート
J2EEコンテナとは独立
WebSphere Application Server / XD WPF環境との融合
操作のロールバックが可能
シングル・フェーズ・コミット
WASトランザクション処理と協調可能
機能をカスタマイズが容易
u
u
カスタマイズしないとメモリ・キャッシュ機能のみ
カスタムプラグインを作成可能
l
n
トランザクション、ロック、DBアクセス、無効化
複数マシンでの分散キャッシュを構築可能
ObjectGridは、Java Objectをキャッシュするために必要な各種の機能を提供するフレームワークで
す。XD, WAS6.02といったJ2EE環境とJ2SE環境の両方をサポートしています。また、データの整合
性を維持するためのトランザクション 機能も備えています。このトランザクション機能は、シングル・
フェーズ・コミットになります。また、開発者がプラグインと呼ばれるモジュールをカスタマイズするこ
とで機能を拡張することができます。カスタマイズは、プラグインを作成することで 行えます。トランザ
クション、ロック、DBアクセス、無効化等の処理のプラグインを作成することが可能です。また、JMS
を利用して複数サーバー環境で分散キャッシュ処理を行うことも可能です。
ObjectGridのサポート環境についてのInfocenterにおける記述(原文)
Restriction: You can use ObjectGrid in a WebSphere Extended Deployment Version 6.0
environment. You can also use ObjectGrid in a Java 2 Platform, Standard Edition (J2SE) Version
1.4.2 or higher environment or in a WebSphere Application Server Version 6.02 or higher
environment with additional licensing arrangements. Contact your sales representative for details.
48
ObjectGrid とは?(つづき)
n
キャッシュ・データをデータベースに保管することが可能
u
u
n
データの関連付けが可能
u
n
データベース
ファイル・システム、他のサーバーにも
無効化に使用可能
データ無効化(Eviction)の方法をカスタマイズ可能
u
キャッシュ・データ無効化デーモンEvictor
l
時間ベース ( ディフォルト)
LRU
l
LFU
l
n
複数のロック・ストラテジを選択可能
u
u
n
Optimistic Lock
Pessimistic Lock
JAAS利用によるセキュリティ機能
キャッシュは、メモリ中に保管されますが、Loaderプラグインを作成することで データベースと協調し
た処理を行うことが可能になります。Loaderプラグインにより、キャッシュにデータがinsertされたとき
に、データベースに保管を行い、キャッシュ中にデータが存在しないときにデータベースに検索に
行くといった動作を行うことが可能です。また、ObjectGridでは、キャッシュ・データ間に関連付けを
行うことができます。例えば、東京都 に対して渋谷区、新宿区、目黒区 を関連付けることが可能で
す。これにより、東京都を削除するタイミングで関連付けられたものも削除すると行ったことが可能
になります。古いキャッシュデータを掃除するためには、Evictorプラグインを使用することができま
す。デフォルトでは、時間ベースのものがBuilt-inされていますが、LRU, LFUのものをPlug-inする
ことも可能です。また、データベース対するロック・ストラテジは、パフォーマンスを考慮して変更で
きるようになっています。Optimistic Lockでは、ロック時間を最小にできます。Optimistic Lockを使
用するためには対応するOptimisticCallbackプラグインを作成する必要があります。セキュリティ機
能としては、JAASを利用することができます。
49
どうやって使うの?
n
ObjectGridの実体は、Jarファイル2つだけ
u
n
以下のJarにクラスパスを通すだけで使用可能
l
J2SEスタンドアロン使用
Ø $WAS_HOME/optionalLibraries/ObjectGrid/objectgridSA.jar
l
WXD環境
Ø $WAS_HOME/lib/objectgrid.jar
Java標準のMapクラスに似たインタフェース
u
Mapに存在する以下のメソッドが使用可能です
l
n
put(), get(), insert(), update(), etc
キャッシュするObjectはMapのエントリーとして保管
u
Key / Valueのペアで保管
u
データベースなどの外部のリソースから値をロードすることが可能
l
l
l
例
Key :“1”, Value :counter
Loader プラグインを利用
起動時のPreload機能
ObjectGridの機能は、Jarファイルによって提供されます。スタンドアロンJVMでの使用の場合は、
objectgridSA.jarを使用します。NDに対してXDをインストールするとoptionalLibrariesディレクトリの
下の導入されます。XD環境の場合は、libディレクトリの下のobjectgrid.jarを利用します。
ObjectGridのインスタンスは、その中にJavaのMapオブジェクトに似たMapを複数個、保管できます。
このMapはBackingMapとして定義します。このBacingMapをObjectGridのセッション中にObjectMap
として取り出して操作を行うことになります。このMapに関しては、put(),get(),insert(),update()といっ
たJava Mapのメソッドを使用することができます。キャッシュしたいJava Objectはこれらのメソッドを
使用してkeyとのペアで保管します。アプリケーションの起動時 にLoaderプラグインを使用して
キャッシュ・データをデータベース等からPreloadすることも可能です。
50
ObjectGrid 構成方法
n
ObjectGridインスタンスはXMLによって構成することが可能
u
u
n
BackingMapの定義
使用するプラグインと対応するJavaクラスを定義
作成したXMLファイルは、以下の様に起動時プログラムでロー
ドする
url = new URL("file:org/sawa/objgrid/objectgrid-definition.xml");
ObjectGrid ivObjectGrid =
objectGridManager.createObjectGrid("clusterObjectGrid", url, true, true);
n
ObjectGridは、プログラム中でAPIを使用してもXMLと同様の
定義を行うことができる
ObjectGridの構成は、XMLファイルによって行うことができます。XMLファイルの中でBackingMap
の定義と設定、使用するプラグインの指定とクラス名を記述します。作成したXML ファイルは、プロ
グラムの初期化処理の部分のObjectGridインスタンスの作成時にURLを指定することでロードされ
ます。また、ObjectGridでは、プログラム中にAPI を使用してXML と同様な定義を行うことも可能で
す。XMLによる指定とAPI による指定は同時に使用することができます。
51
カスタマイズの方法は? プラグイン
n
Loader Plug-in
u
u
u
n
OptimisticCallback Plug-in
u
u
n
Optimistic ロック採用時に必要となるプラグイン
データのシーケンス番号/バージョン管理を担当
TransactionCallback Plug-in
u
u
u
n
データベース等の外部記憶とのやり取りを行うプラグイン
Backing Mapに一つだけ関連付けられて定義される
起動時のデータのPreload機能
トランザクションに関するイベントを処理するプラグイン
begin / commit / rollback での必要処理を実行
外部トランザクションとの連携
Evictor Plug-in
u
u
u
条件に応じてBackingMap内のエントリーの無効化を行うプラグイン
TTL(Time to Live)プラグインは、”Built-in”済 (ディフォルト
状態は
disable)
LRU (Least Recently Used) / LFU (Least Frequently Used)プラグイン
同梱
ObjectGridの機能を拡張するためには、プラグインを使用します。主なプラグインはこれらのものに
なります。それぞれは、Interfaceは提供されていますが、実装は、開発者 が行うことになります。た
だし、サンプル・コードが充実しているため、それらを参考にコーディングすることができます。
52
ObjectGridの動作フロー
Servlet
init()
StartupBean
Start()
初期化 フェーズ
ObjectGridの生成
XML
Plug-in
Evictor
BackingMapの生成
データのPreload
セッションのbegin
DB
Loader
TransactionCallBack
アプリケーション
ObjectMapの取得
Mapからオブジェクトをget
Loader
Mapへオブジェクトinsert
OptimisticCallBack
セッションのcommit
Loader
TransactionCallBack
XD環境でObjectGridの動作フロー の例になります。
初期化を行うタイミングとしては、Webコンテナでは、Servlet のinit()、EJBコンテナでは、
StartupBeanのStart()が利用可能です。
ObjectGridのインスタンスの生成の過程においてBackingMapの生成、データのPreloadを行います。
データのPreloadはLoaderプラグインがデータベースから行います。アプリケーション・ロジックにお
いては、最初にセッションをbegin()します。そのときにTransactionCallBackプラグインが呼ばれトラ
ンザクションの開始に必要な処理を行います。その後にObjectMapを取得します。引き続き取得し
たMapからObjectのget、insertを行います。getでは、メモリ中にデータが存在せずにLoaderプラグ
イン経由でデータベースからデータの取得を行っています。Insertにおいては、OptimisticCallBack
プラグインでのSerial Versionの管理が行われます 。commitでは、Loaderプラグインでのデータ
ベースへの書き込みとTransactionCallBackプラグインでのcommitに必要な処理が行われています。
また、Evictorプラグインは定期的にキャッシュからの古いデータの清掃を行っています。
53
ObjectGrid トポロジー WPFとの組み合わせ
n
WPFを利用しCluster全体でのキャッシュ機能を提供
u
WPF PartitionLoadEventでキャッシュの生成/Preload
u
複数JVMに跨る効率の良いキャッシュ
l
l
l
パーティションの移動も可能
WPFによってContent Baseでルーティング
キャッシュのレプリケーション不要
各パーティション 固有
のキャッシュ・データ
P3
P4
P5
P2
WPFWLM
WebSphere XD ノード
P6
P7
P9
P8
P10
DS1
Object Grid
P1
Object Grid
WebSphere XD ノード
DS2
WPFとObjectGrid を組み合わせることにより、Cluster全体でキャッシュを持たせることが 容易になり
ます。WPFは、特定のKey のリクエストは特定のパーティションに届けるためにキャッシュ間でのレプ
リケーションの不要にできます。PartitionLoadEventにてキャッシュの生成/Preloadを行うことにより、
パーティションの移動にも対応できるようになります。クラスター全体の資源を重複なく有効に利用
したキャッシュになります。
54
ObjectGrid トポロジー
分散キャッシュの構築例
JMS
Listener
Loaders
ObjectGrid
App
Optimistic
Lock
Tx
Listener
JMS pub/sub bus
Database
JMS
Listener
Loaders
ObjectGrid
App
Tx
Listener
ObjectGridにて複数マシンにわたるキャッシュを構築する場合の構成例です。データベースとは、
OptimisticLockを使用してデータの整合性 が図られています 。OptimisticLockでは、書き込みのタ
イミングだけロックを取得します。もし、書き込み時に他のトランザクション がデータを変更しているこ
とを検知した場合には、Exceptionを発生させます。これによりStale(最新でない)なデータの書き込
みを防いでいます 。サーバー間では、JMSのPub/Subを使用して通信を行っています。サーバー間
でのデータの無効化 の処理を同期を取りながら行っています。(WebSphere Application Serverだ
けでの使用の場合は、IBM提供のプラグイン・モジュールを使用して外部JMSプロバイダー を使用
せずにサーバー間でイベントを伝播することが 可能になります。この機能はディフォルトでは活動
化されていません)
55
ObjectGrid まとめ
ObjectGridは、WXDで提供される高パフォーマンスなJava
Objectキャッシュ・テクノロジー
l
J2EE環境及びJ2SE環境をサポート
l
XMLファイル及びAPIで構成可能
l
ユーザーJavaクラスでカスタマイズ可能
l
データベースをデータ保管先に使用可能
l
WPFと組み合わせてCluster Wideなキャッシュを作成可能
l
分散キャッシュを構築可能
参考資料:ObjectGrid programming model guide
ftp://ftp.software.ibm.com/software/webserver/appserv/library/v60/objectgrid_guide.pdf
56
参考資料
Object Grid
WPF = WebSphere Partitioning Facility
57
参考:ObjectGrid トポロジー
n
スケールアウト構成 Object共有
WAS/Non-WASサーブレット・コンテナにてObjectGridを使
用してObject共有
u
u
Servlet Filterを利用することにより、Session Objectの共有も可能
コンテナ機能を利用しないセッション共有
Servlet Filter
ODR
Servlet Filter
Servlet Filter
Object Grid
他のApplication Server
Object Grid
Tomcat, Geronimo
Object Grid
WebSphere
WAS以外のノードも含めてJava Objectの共有を行っている例になります。Session Objectの共有を
行う場合にはServlet Filterを使用して処理を行うことが可能です。
58
参考:ObjectGrid構成 APIの例
n
API
ObjectGrid objectGrid = objectGridManager.createObjectGrid("someGrid");
BackingMap backingMap = objectGrid.getMap("someMap");
// override default of read/write
backingMap.setReadOnly(true);
// override default of allowing Null values
backingMap.setNullValuesSupported(false);
// override default (prime numbers work best)
backingMap.setNumberOfBuckets(251);
// override defualt (prime numbers work best)
backingMap.setNumberOfLockBuckets(251);
n
対応するXML
<objectGrids>
<objectGrid name="someGrid">
<backingMap name="someMap" readOnly="true"
nullValuesSupported="false" numberOfBuckets="251"
numberOfLockBuckets="251" />
</objectGrid>
</objectGrids>
XMLと同等の定義をAPI で行った例になります。
59
参考:ObjectGrid 定義ファイルの例 前半
<?xml version="1.0" encoding="UTF-8"?>
<objectGridConfig xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://ibm.com/ws/objectgrid/config ../objectGrid.xsd"
xmlns="http://ibm.com/ws/objectgrid/config" >
ObjectGridの
<objectGrids>
<objectGrid name="clusterObjectGrid">
インスタンス定義
<bean id=" TransactionCallback"
className ="org.sawa.objgrid.HeapTransactionCallback" />
BackingMap
<backingMap name="counters" readOnly ="false"
の定義
pluginCollectionRef="counters" preloadMode ="false"
lockStrategy=“ OPTIMISTIC”
copyMode="COPY_ON_READ_AND_COMMIT" />
</objectGrid>
</objectGrids>
:
実際のObjectGridの定義ファイルの例になります。”clusterObjectGrid”という
ObjectGridインスタン
スと“counters”というMapとその属性を定義しています。ロックストラテジは、“Optimistic”、
copyModeは、“COPY_ON_READ_AND_COMMIT”を指定しています。copyModeはBackingMapの
Objectを処理するときにREADとCOMMITのタイミングでCOPYを行うことを示しています。
60
参考:ObjectGrid 定義ファイルの例 後半
BackingMap
“counters”用の
プラグイン
:
<backingMapPluginCollections >
<backingMapPluginCollection id="counters">
Loader
プラグイン
<bean id=“Loader” className ="org.sawa.objgrid.HeapCacheLoader" />
<bean id="OptimisticCallback"
OptimisticCallback
プラグイン
className="org.sawa.objgrid.CounterOptimisticCallback" />
</backingMapPluginCollection >
</backingMapPluginCollections >
</objectGridConfig >
プラグインによりMap
の機能を拡張
&
カスタマイズ
前頁のXMLの続きになります。”counters”Mapにて使用するプラグインの定義になります。Loader
プラグインとOptimisticCallBackプラグインを指定しています。Loaderプラグインは、データベースと
のインターフェース、OptimisticCallBackプラグインでは、Optimisticロックを行うに必要なデータの
Serial バージョンの管理を行っています。
61
62
Fly UP