...

3章 WebSphere Partition Facility(WPF) 第 1 We

by user

on
Category: Documents
38

views

Report

Comments

Transcript

3章 WebSphere Partition Facility(WPF) 第 1 We
第3章 WebSphere Partition Facility(WPF)
WebSphere XD5.1 Technical Guide
1
3章目次
WebSphere XD5.1 Technical Guide
1.
2.
3.
4.
5.
WPF概要
WPFの仕組み
運用/設定
サンプルアプリケーション
アプリケーション開発手順
2
第3章 WebSphere Partition Facility(WPF)
WebSphere XD5.1 Technical Guide
1. WPF概要
2. WPFの仕組み
3. 運用/設定
4. サンプルアプリケーション
5. アプリケーション開発手順
3
従来のクラスター・コンピューティング環境
WebSphere XD5.1 Technical Guide

環境






大量のアプリケーション・トランザクションと
データベース・アクセス
高い成長率
多数のサーバーによる分散環境
キャパシティ増加によるスケーラビリティの保
持
可用性の持続
リクエストは全サーバ
に均等に分散される
全サーバからリアルタ
イムでデータベースア
クセス
課題


トランザクション量がデータベースアクセスによ
り制限される
アクセス数の増加に伴い、システムの性能を
維持したまま拡張するには、大幅な再構成が
必要になる
データベース
WebSphere
サーバー
データベースがボトル
ネックとなる
このチャートは従来のクラスター・コンピューティング環境を利用した例です。例えば株
式取引所、オークション、オンライン・ゲームあるいは金融分析などのお客様は、非常に
高負荷なトランザクション処理を必要とし、かつ高い伸び率でトランザクションが増加す
るために、優れたスケーラビリティーと卓越した高可用性を求められています。しかし、
従来のクラスター・システムではデータベース・アクセスがボトルネックになり、増加するト
ランザクションに対して拡張性に乏しいシステムとなっていました。
4
データ・パーティショニング
WebSphere XD5.1 Technical Guide

アプリケーションサーバーでのデー
タ・キャッシュ



DBのデータを分割してアプリケーション・
サーバー毎にキャッシュ
参照処理はDBへのアクセスが不要
ハイパフォーマンス、高可用性、ス
ケーラビリティ
DBへのアクセスを減少させることでボ
トルネックの排除
データベース
WebSphere
サーバー
WebSphere XDでは、大規模でかつ高い書き込み率のオンライン・トランザクション処
理を要するアプリケーションのスケーラビリティーを向上させ、かつ高度な信頼性を実現
するために、アプリケーションの新しいデザイン・パターンと、それを稼働させる実行環
境を提供します。WebSphere XDではアプリケーションのロジックとデータを分割して、
個々のJVMが分割されたアプリケーション(データ)を稼動させます。この設計により、リ
クエストが分散されキャッシュを有効に働かせることもできるため、データベースへのアク
セスが集中することによるパフォーマンスの低下を回避することが可能になります。
さらに、HA機能により、アプリケーション・レベルで障害を検知し、障害の発生したサー
ビスをクラスター内の他のサービスに素早くディスパッチすることにより、アプリケーション
を短時間で回復することができます。この機能により、クラス5(99.999%)の高可用性と
ハイ・パフォーマンス、ハイ・スケーラビリティーを実現します。
5
WPFとは
WebSphere XD5.1 Technical Guide

アプリケーションを分割させて、高パフォーマンス、高拡張性、高信頼性を提供
する仕組み

4つの要素
パーティション



WLM


特定のKeyを持つリクエストを特定のサーバーに割り振る
高可用性


アプリケーションをパーティションという単位に分割する
障害時はサーバ間でパーティションを相互にフェイルオーバー
再パーティション

回復時はサーバ間でパーティションを相互にフェイルバック
WebSphere XDが提供するアプリケーションの分割機能をWebSphere Partitioning
Facilityと呼びます。
WPFは以下の4つの要素で実装されています。
①動的なアプリケーションの分割(パーティション)
②インテリジェント・ワークロード管理
③オートノミックHA(高可用性)管理
④再パーティション
6
従来のOLTPパターン
WebSphere XD5.1 Technical Guide
リクエスト
WAS
DB2
Router
ルーター
1.
2.
3.
リクエストはWASへ均等に割り振られる
トランザクションのデータはデータベースで永続化される
データベースがボトルネックになる可能性があり、拡張性に欠ける
現行のバージョンのアクセスパターンをあらわした図です。
データベースにおける処理を軽減するためにDBサーバーの前段でデータのキャッシン
グを行っておき、そのデータを使用する手法がしばしば用いられます。このキャッシュを
使うモデルは、現行のJ2EEサーバーが想定している、主にデータの読み込み作業が
多い場合は有効です。
しかしこのデータキャッシングを行うモデルを、書き込み頻度が高くなるような大規模処
理システムに適用しようとすると、データの整合性を取るための処理がボトルネックとなっ
てくるために有効に使うことができなくなってしまいます。
その結果としてどうしても高性能なDBサーバーが必須となってしまいます。
7
パーティション
WebSphere XD5.1 Technical Guide
リクエスト
WAS
DB2
ルーター
1. パーティション
WPFでは、大規模システムにおけるDBサーバーの負荷を低減してより効率的な処理を
行うことを可能にするためのフレームワークとして、パーティショニング・パターンを提供
しています。
このパターンでは、アプリケーションを使用データや用途に基づいた「パーティション(区
画)」という単位で分割し、それぞれのパーティションの処理を個々のアプリケーション
サーバーに割り当てます。
同じパーティションを複数のサーバーで持つことはできませんが、ひとつのサーバーで
複数のパーティションを処理することができます。
これまでのクラスター(クローニング)のようにひとつのEAR(実行単位)の処理を行える
サーバーを複数用意するという手法と比較して、個々のサーバーでアクセスしうるデー
タ領域を限定することで、より効率的にデータベースとデータを利用できるようになりま
す。
8
WLM
WebSphere XD5.1 Technical Guide
リクエスト
WAS
DB2
ルーター
1. パーティション
2. WLM
パーティショニングされたアプリケーションに対するリクエストを、対応するパーティション
に割り振るための機能が提供されます。
リクエストの割り振りを担うルーターは、リクエストからパーティションを識別できる情報を
抽出して対応するパーティションへディスパッチします。
WLMにより特定のリクエストとパーティションが関連付けられることにより、パーティション
毎にリクエストが使用するDBデータのキャッシュを行うことが可能になります。
9
高可用性
WAS
HA Manager
DB2
X
WebSphere XD5.1 Technical Guide
リクエスト
ルーター
1. パーティション
2. WLM
3. 高可用性
パーティション(およびパーティションを稼動させるサーバー)が何らかの原因で障害を
起こした時のために、WPFでは、HAパーティション用の高可用性マネージャ(High
Availability Manager=HAManager)を利用して可用性を高めています。
各クラスターメンバーは高可用性マネージャーを利用してそれぞれがお互いの稼動状
況の監視を行い、サーバーの障害が検知されると、正常稼動している別のサーバーが
処理の引き継ぎを行うよう試みます。
10
再パーティション
WAS
DB2
HA Manager
ルーター
1. パーティション
2. WLM
X
WebSphere XD5.1 Technical Guide
リクエスト
3. 高可用性
4. 再パーティション
システムの稼動状況によってパーティションを別のサーバーに割り振りなおし、再均衡
化を図ることが可能です。
割り当てを変更するためには高可用性マネージャー内のMbeanを使用したコマンドを
使用し、通常はプログラムや管理者の制御の下で計画・実行されます。
11
利点
WebSphere XD5.1 Technical Guide

パフォーマンス

キャッシュを有効活用してバックエンドのサーバへのアクセスを最小限に出来る
 キャッシュによるパフォーマンス向上
 バックエンド・サーバーに対するアクセス最適化によるパフォーマンス向上
 最適なキャッシュの仕組みを選択できる
1. EJBコミットオプション オプションCでなくオプションAを使える
2. キャッシュの無効化のタイミングを最適化できる

可用性




HA Managerにより可用性を保つことが出来る
パーティションの障害時には、別のVMにフェイルオーバー/フェイルバックする
運用要件によるパーティションの移動も可(move time>0.2 sec + App)
同じ種類のリクエストは同じサーバーへ

処理を開始する順序を保つことが出来る
WPFを用いることによる利点として、上記のようなことがあげられます。
パーティショニングの最も大きな利点は、従来のクラスターメンバーでのアプリケーション
実行に比べ、更に厳密に資源を制御できることにあります。ユーザーからの特定のリク
エストは特定のサーバーへ転送され、そのサーバー毎に、バックエンドのDBサーバー
などへ排他的なアクセスをすることで、特定の処理をしたり、特定のデータセットを扱うこ
とができます。その結果、アプリケーションサーバー上での処理や、データベースアクセ
スを最適化することが可能になります。
12
第3章 WebSphere Partition Facility(WPF)
WebSphere XD5.1 Technical Guide
1. WPF概要
2. WPFの仕組み
3. 運用/設定
4. サンプルアプリケーション
5. アプリケーション開発手順
13
パーティションとWLM
WebSphere XD5.1 Technical Guide
セル
HTTPパーティ
ション
ノードグループ
クラスター1
DMgr
DMノード
AP1
Web
ノード1
ODR
ODRノード1
AP1
Web
ノード2
AP1
Web
ODR
ODRノード2
ノード3
AP1
Web
ノード4
DataBase パー
ティション
EJB Workload
パーティション
クラスター2
P1
EJB
ノード5
P2
EJB
DBノード
DB
ノード6
P3
DBノード
EJB
DB
ノード7
P4
EJB
ノード8
パーティショニングとして扱えるリクエストには、大きく分けて、HTTP,EJB,DBリクエスト
の3種類があります。
WPFを構成した場合には、パーティションに応じたワークロードマネージメント(WLM)
が稼動し、各リクエストを対応するパーティションが存在するサーバーへ転送します。
HTTPリクエストをパーティショニングする場合には、ODRが、HTTPクライアントとパー
ティションされたサーバー間でプロキシーの役割を担います。
EJBの場合には、EJBクライアントとEJBサーバー間にWPF用のワークロードマネー
ジャーが存在します。
また、WPFの機能として、プロキシー・データソースが提供され、アプリケーションがトラ
ンザクションを開始する前にどのデータベースを使用するか選択することができます。こ
の機能により、あるパーティションに対するリクエストが転送されたとき、Beanがデプロイ
された際に定義されたデータソースを無視し、特定のデータソースを使用するということ
が可能になります。
14
パーティションの特徴
WebSphere XD5.1 Technical Guide

Applicationパーティション




アプリケーションをN個のパーティションに分ける
ひとつのパーティションはひとつのサーバーだけで所有される
ひとつのサーバーは複数のパーティションを持つ
パーティションはサーバーにダイナミックに割り当てられる
 アプリケーション稼動中にパーティション追加/削除が可能
 HAManagerによる可用性保持が可能
P1
アプリケーション
アプリケーション
Keyで
論理的に
分割
P1
P2
P3
P4
P5
P6
P2
サーバー1
パーティション
を各サーバーに
ダイナミックに
マップ
P3
P4
P5
サーバー2
P6
サーバー3
パーティションは、クラスター内に存在し、一意的にアドレス可能なエンドポイントと言う
事ができます。したがって、パーティションはサーバー(JVM)と同義ではありません。
パーティションは、J2EEアプリケーションが起動時に初期化される間に、動的に作成さ
れ、クライアントからはターゲットエンドポイントとしてみなされます。
15
パーティションの方法
WebSphere XD5.1 Technical Guide

Keyベースパーティション



Hashベースパーティション




Keyが少ない場合(100,000以下)
Keyがパーティション名となり、リクエスト中のKeyに対応するパーティションへ転送される
Keyが多い場合
パーティションの数を決めておく
Keyからハッシュ値を求め、対応するパーティションに転送される
Hybridベースパーティション

Keyによるパーティション と Hash を使用したパーティションを混在
パーティショニングにはいくつかのパターンがあります。
Keyベースのパーティショニングは、ある特定のKeyに基づいてそのままパーティション
を構成するパターンです。
Hashベースのパーティショニングは、扱う項目が非常に多い場合に、項目とハッシュし
たパーティションをマッピングするアプローチです。
Hybridベースのパーティショニングは、KeyベースとHashベースを組み合わせたパター
ンです。
16
Keyベースパーティション
Read Onlyは
Server1
Keyが1∼4は
Server1へルーティング
Key=1
Key=6
Key=10
ルーティング
WebSphere XD5.1 Technical Guide
サーバー
クライアント
Server2
Keyが5∼7は
Server2へルーティング
Keyが8から10は
Server3へルーティング
Keyがパーティション名
として使われ、Keyを元
にルーティングされる
Server3
Partition
キャッシュ キャッシュを利用
DB
1
aaa
2
bbb
テーブル
3
ccc
Key
4
ddd
社員ID
名前
1
aaa
2
bbb
3
ccc
5
eee
4
ddd
6
fff
5
eee
7
ggg
6
fff
Writeは
7
ggg
DBをUpdate
8
hhh
9
iii
10
jjj
8
hhh
9
10
iii
jjj
Keyが多い場合はHash
ベースパーティション
例として、EJBのKeyベースのパーティショニングの概要を上図に示します。
バックエンドのデータベースに存在するデータのうち、Keyとできるものがあれば(この場
合「社員ID」)、Keyに基づいてJ2EEアプリケーションをKeyベースにパーティショニング
します。
アプリケーションサーバーは、クラスターを構成します。アプリケーションの起動時には、
Keyと同じ名前を持つパーティションが、各クラスターメンバー内に割り当てられます。
クライアントはKeyを含んでアクセスし、WPFのWLMはKeyに対応したサーバーへリクエ
ストを割り振ります。
特定のKeyを持ったリクエストは特定のサーバーにしか、割り振られないため、キャッ
シュしたデータを有効活用することができます。
17
ルーティングの仕組み
WebSphere XD5.1 Technical Guide
サーバー
クライアント
Partition Session Bean
クライアント
2
User Exit
メソッドコール
SLSB
1
メソッドコール
呼び出すメソッ
ド名と引数など
p1
SLSB
このパーティションは
どのサーバーか
パーティション サーバー
p1
s1
p2
s2
p3
s3
データ
キャッシュ
p2
HAManager
パーティションとサー
バーのマップ情報
3
パーティ
ション名
データ
キャッシュ
Stub
このメソッドコールは
どのパーティションか
渡された引数など
からパーティショ
ン情報を取得
パーティショ
ンの定義
パーティション
情報と管理
SLSB
データ
キャッシュ
p3
パーティションテーブル
このチャートは、前頁のルーティングの部分を示したものです。(IIOPルーティング)
クライアントがリモートコールした時、クライアントスタブがそのリクエストを割り振るべき
サーバーを決定します。
WPFでは、WPFWLMルーター(またはパーティション・ルーター)と呼ばれるルーター
を提供しています。全てのリクエストは、そのリクエストがパーティション・ルーティングの
有無に関係なく、最初にWPFWLMルーターを経由しパーティション・ルーティングが必
要なリクエストはパーティション・ルーターが割り振りを行います。パーティション・ルー
ティングが必要でないリクエストは、通常のWLMルーターが後続処理を行い、通常の割
り振りが行われます。
18
第3章 WebSphere Partition Facility(WPF)
WebSphere XD5.1 Technical Guide
1. WPF概要
2. WPFの仕組み
3. 運用/設定
4. サンプルアプリケーション
5. アプリケーション開発手順
19
wpfAdmin
WebSphere XD5.1 Technical Guide

基本操作
listActive
パーティションの集合でアクティブであるサーバーを表示します。
listActiveWithGroups
グループの集合でアクティブであるサーバーを表示します。
countActivePartitionsOnServers
すべてのサーバーで一致するパーティションの数をカウントします。
countActiveGroupsOnServers
すべてのサーバーの比較セットに一致するグループ数をカウントします。
list
メンバーのパーティションと状況を表示します。
listGroups
メンバーのグループと状況を表示します。
coreGroupStatus
コア・グループのコア・グループ名、コーディネーター名、およびアクティブ・サーバーを表示します。
move
1 つのパーティションを別のサーバーに移動します。
balance
アクティブ・サーバーの集合中のすべてのパーティションのバランスを取ります。
disablePartition
パーティションを使用不可にします。HAポリシーにより、そのまま使用できなくなるか他のサーバーで
使用可能になります。
enablePartition
パーティションが使用可能になります。
addServerToCoreGroup
サーバーを DefaultCoreGroup に追加します。
removeServerFromCoreGroup
サーバーを DefaultCoreGroup から削除します。
enableWPFPMI
すべてのアクティブ・サーバーに対して WPF PMI モジュールを使用可能にします。
WPFを管理するには、wpfadminというコマンドが用意されています。
このツールを用いて、WPFの操作、管理だけでなくパフォーマンスモニタリングの機能
も兼ね備えています。
20
wpfAdmin
WebSphere XD5.1 Technical Guide

基本操作
coreGroupStatus
コア・グループのコア・グループ名、コーディネーター名、およびアクティブ・サーバーを表示します。
addServerToCoreGroup
サーバーを DefaultCoreGroup に追加します。
removeServerFromCoreGroup
サーバーを DefaultCoreGroup から削除します。
createPolicy
プロパティー・ファイルで指定されたポリシーの集合を新規作成します。
updatePolicy
ポリシーの内容を更新します。
deletePolicy
コアグループからポリシーを削除します。
listPolicies
コアグループの全てのポリシーを表示します。
queryPolicy
ポリシーの属性を表示します。
resolvePolicyForGroup
それぞれのパーティションのポリシーを表示します。
updateJMXTimeout
JMXコマンドが終了するまでのタイムアウト値を変更します。
updateCoreGroupCoordinators
コーディネイターの数とサーバーを変更します。
updateHamConfig
HAManagerのバッファーのサイズと最大スレッド数を変更します。
21
wpfAdmin
WebSphere XD5.1 Technical Guide

パフォーマンス モニタリング操作
enableWPFPMI
すべてのアクティブ・サーバーに対して WPF PMI モジュールを使用可能にします。
subscribeWPFPMI
WPF PMI モジュールをサブスクライブします。
setPartitionCount
WPF PMI 統計を保持するための区画数を統合機能に通知します。
setStatisticsRange
統計の収集を累積して行うかアクティブに行うか統合機能に通知します。
setStatisticsType
トランザクション・カウントを収集するか応答時間統計を収集するか統合機能に通知します。
setStatisticsInterval
統合機能に集計中のインターバルをミリ秒で通知します。
getTransactionCount
トランザクション・カウント順にソートされた WPF PMI 統計を表示します。
getResponseTime
応答時間順にソートされた WPF PMI 統計を表示します。
setTraceSpec
サーバーまたはクラスターに対してトレース仕様を設定します。
unsubscribeWPFPMI
サーバーに WPF PMI 統計収集の停止を通知します。
disableWPFPMI
WPF PMI モジュールを使用不可にします。
WPFのパフォーマンスモニタリングを管理するコマンドです。
22
wpfAdmin 実行例 (listActive)
WebSphere XD5.1 Technical Guide

活動状態になってるパーティションの名前と実行しているサーバー名をリスト




表示するパーティションの数を--oで指定、デフォルトは50
表示するアプリケーションの名前を--aで指定
表示するパーティションの名前を--pで指定
表示するクラスの名前を--classで指定
wpfadmin.cmd listActive
C:¥WebSphere¥DeploymentManager¥bin>C:¥WebSphere¥DeploymentManager¥bin¥wpfadmin.cmd listActive
C:¥WebSphere¥DeploymentManager¥bin>wsadmin -lang jython -f wpfadmin.pty listActive
WASX7209I: ノード POOHManager のプロセス "dmgr" に、SOAP コネクターを使って接続しました。プロセスのタイプは DeploymentManager
です。
WPFC0050I: アプリケーション WPFKeyBasedPartitionSample、区画 PK000010: サーバーPOOHNetwork¥POOH¥cluster_member_3
WPFC0050I: アプリケーション WPFKeyBasedPartitionSample、区画 PK000009: サーバーPOOHNetwork¥POOH¥cluster_member_3
WPFC0050I: アプリケーション WPFKeyBasedPartitionSample、区画 PK000008: サーバーPOOHNetwork¥POOH¥cluster_member_3
WPFC0050I: アプリケーション WPFKeyBasedPartitionSample、区画 PK000007: サーバーPOOHNetwork¥POOH¥cluster_member_3
WPFC0050I: アプリケーション WPFKeyBasedPartitionSample、区画 PK000006: サーバーPOOHNetwork¥POOH¥cluster_member_1
WPFC0050I: アプリケーション WPFKeyBasedPartitionSample、区画 PK000005: サーバーPOOHNetwork¥POOH¥cluster_member_1
WPFC0050I: アプリケーション WPFKeyBasedPartitionSample、区画 PK000004: サーバーPOOHNetwork¥POOH¥cluster_member_2
WPFC0050I: アプリケーション WPFKeyBasedPartitionSample、区画 PK000003: サーバーPOOHNetwork¥POOH¥cluster_member_2
WPFC0050I: アプリケーション WPFKeyBasedPartitionSample、区画 PK000002: サーバーPOOHNetwork¥POOH¥cluster_member_2
WPFC0050I: アプリケーション WPFKeyBasedPartitionSample、区画 PK000001: サーバーPOOHNetwork¥POOH¥cluster_member_2
wpfAdminの実行例です。listAcviveを実行して活動状態になっているパーティションの
情報を出力しています。
23
ランタイムマップ
WebSphere XD5.1 Technical Guide



wpfAdmin enableWPFPMI H --c クラスター名
パーティションに対してリクエストを実行
管理コンソールの表示


ランタイム操作 -> ランタイムマップ
設定を展開
 レイヤー0 アプリケーション
 レイヤー1 区分
管理コンソールのランタイムマップでパーティションの状態を表示することが可能です。
表示される情報はパーティションに対するリクエストの統計情報です。従ってWPFPMI
を有効にして、パーティションに対してリクエストを実行した後で表示されます。
24
HAManagerの設定
WebSphere XD5.1 Technical Guide


WPFはHAManagerの機能を利用してパーティションをフェイルオーバーする
HAManagerのグループポリシーを定義できる

ポリシー:グループのメンバーがどのように活動化/非活動化するか
 PreferServer
 Failbackの有無、時間
 JVMの再起動なしに変更可能
 Quorumの有無

パーティションはHAManagerのポリシーに応じて稼動中のクラスタメンバに割り当てられ
る
サーバー間のパーティションの移動はHAManager MBeanのJMXコマンドが使用される

coregroup.xml


<ND_HOME>/config/cells/<cell_name>/coregroup/DefaurtCoreGroup
<policies xmi:type="coregroup:OneOfNPolicy" xmi:id="OneOfNPolicy_1103517029226" name="WPF
Cluster Scoped Partition Policy" description="Default WPF Cluster Scoped Partition Policy"
policyFactory="com.ibm.ws.hamanager.coordinator.policy.impl.OneOfNPolicyFactory"
isAlivePeriodSec="-1" quorumEnabled="true" failback="false" preferredOnly="false">
<MatchCriteria xmi:id="MatchCriteria_1103517029236" name="-gt" value="-p" description="Default
WPF Match Criterion"/>
<MatchCriteria xmi:id="MatchCriteria_1103517029246" name="-ps" value="-c" description="WPF
Cluster Scope Match Criterion"/>
</policies>
パーティションの特徴のひとつとして、パーティションはHAManagerに管理される、とい
う点があります。
HAManagerはひとつ以上のHAグループを管理していますが、特にWPFの場合、
HAManagerがパーティションとクラスターメンバーを関連付ける役割を担っています。
HAグループの挙動は、ポリシーで定義できます。
HAManagerは、パーティションの状態を常に監視しており、必要に応じて、定義された
ポリシーに基づき、パーティションの状態を調整します。
25
第3章 WebSphere Partition Facility(WPF)
WebSphere XD5.1 Technical Guide
1. WPF概要
2. WPFの仕組み
3. 運用/設定
4. サンプルアプリケーション
5. アプリケーション開発手順
26
提供されているサンプル
WebSphere XD5.1 Technical Guide

<XD_ROOT>/installableAppsディレクトリ
WPFKeyBasedPartitionSample.ear
WPFHashBasedPartitionSample.ear
WPFHybridBasedPartitionSample.ear
WPFFacadePartitionSample.ear
ProxyDSAccountSample.ear
httpwpfsample.ear

D_<アプリケーション名>.ear






WebSphereXDではWPFアプリケーションのサンプルを提供しています。これらのサン
プルはXD環境のクラスターにインストールすることで、すぐに動作させることが可能です。
ファイルの先頭にD_が付いていないEARファイルはソースが含まれています。D_が付
いているEARファイルはデプロイコードの編集が完了しており、そのままでデプロイ可能
な状態になっています。
27
第3章 WebSphere Partition Facility(WPF)
WebSphere XD5.1 Technical Guide
1. WPF概要
2. WPFの仕組み
3. 運用/設定
4. サンプルアプリケーション
5. アプリケーション開発手順
28
WPFの開発(EJB Workload パーティション)
WebSphere XD5.1 Technical Guide
①
サーバーサイド・プログラミング



②
クライアントサイド・プログラミング


③
1-1. 通常のEJBプロジェクトおよびEJB作成
1-2. Partition Stateless Session Bean(PSSB)作成
1-3. Routing Class作成
2-1. 通常のEJBクライアント作成
2-2. スタブ作成
デプロイ

3-1. デプロイ
開発環境
WSAD5.1.2
ここではEJB Workload パーティションの作成方法を、実際の手順を追いながら説明し
ます。
WPFは、既存のJ2EEプログラミングモデルを使用します。そのJ2EEアプリケーションに
WPFフレームワークのAPIを追加することでWPFアプリケーションを開発します。
WPFのアプリケーション(Partitioned J2EE Application)を開発する場合でも、既存の
ツールやアプローチを適用し、通常のJ2EEアプリケーションと同様の手法で開発するこ
とが可能です。
ここではWSAD5.1.2を使用してWPFアプリケーションの開発を行います。
29
WPFアプリケーション作成手順
WebSphere XD5.1 Technical Guide
2-1.
EJBクライアントの
作成
サーバー
クライアント
Partition Session Bean
クライアント
PSSB
データ
キャッシュ
User Exit
1-1.
EJBプロジェクト
の作成と開発
p1
Stub
PSSB
1-3.
Routing Classの
作成
データ
キャッシュ
2-2.
スタブの作成
PSSB
データ
キャッシュ
1-2.
Partition
Stateless
Session Beanの
p3 作成
WPFアプリケーション(Partitioned J2EE Application)には、Partition Stateless
Session Bean(PSSB)が必要です。パーティション毎に1つのPSSBが作成されます。
更に、リクエストを適切なパティションへルーティングするためにRouting Classを必ず実
装します。このルーターにより同じ種類のリクエストは同じパーティションへ割り振られま
す。
30
1-1.EJBプロジェクトの作成
WebSphere XD5.1 Technical Guide


WSAD5.1.2を起動
2.0EJBプロジェクトを新規に作成



EJBプロジェクト名:wpfEjb
EARプロジェクト名:wpfEar
最後に終了をクリック
まずWSADのEJBプロジェクトを作成します。方法は通常のEJBプロジェクト作成と同様
です。
ここではEJBプロジェクト名にmyEJB、EARプロジェクト名にmyEARと名付けました。
31
1-2.WPFライブラリの追加
WebSphere XD5.1 Technical Guide

WPFアプリケーションに必要なライブラリを追加



EJBプロジェクトのライブラリをクリック
Javaのビルド・パスをクリックし、ライブラリータグを選択
外部JARの追加をクリックし<XD_ROOT>/libディレクトリのadmin.jar、wpf.jarを追加
WPFアプリケーションで必要なライブラリをEJBプロジェクトのビルド・パスに追加します。
追加するライブラリは<XD_Root>/libディレクトリのadmin.jar、wpf.jarの2つです。
追加する方法は、EJBプロジェクトを選択してからマウスの右ボタンをクリックします。プ
ルダウンメニューが表示されるのでプロパティーをクリックすると、プロパティー設定ウィ
ンドウが表示されます。このウィンドウの「Javaのビルド・パス」を選択し、ライブラリータグ
をクリックすると「ビルド・パス上のJARおよびクラス・フォルダー」が表示されますので、
「外部JARの追加」ボタンをクリックして、追加するjarファイルを選択してください。
32
1-2.PSSBの作成
WebSphere XD5.1 Technical Guide

Session Beanの作成


Bean名:WpfSample
デフォルト・パッケージ:test
PSSBを作成します。PSSBはSessionBeanですから、WSADで新規のSessionBean
を作成します。ここでは作成するBean名はWpfSample、パッケージ名はtestとしました。
PSSBの説明についてはP18を参照してください。
33
1-2.PSSBの作成
WebSphere XD5.1 Technical Guide

ローカル・クライアント・ビューにチェックを入れ、WPFが提供するインターフェー
スを設定

ローカル・ホーム・インターフェースのクラスをクリック

ローカル・インターフェースのクラスをクリック
 ローカル・ホーム・インターフェース:PartitionHandlerLocalHome
 ローカル・インターフェース:PartitionHandlerLocal

最後に終了をクリック
作成するSessionBeanのローカル・ホーム・インターフェースとローカル・インターフェー
スをWPFが提供するインターフェースに変更します。ローカル・クライアント・ビューに
チェックを入れます。そしてローカル・ホーム・インターフェースのクラスボタンをクリック
するとcom.ibm.websphere.wpfパッケージのPartitionHandlerLocalHomeインター
フェースが表示されるので、これを選択します。同様にローカル・インターフェースもクラ
スボタンをクリックするとcom.ibm.websphere.wpfパッケージのPartitionHandlerLocal
インターフェースが表示されるので、これを選択します。その他は通常のSessionBean
と同じ方法でBeanを作成します。
34
1-2.PSSBの作成
WebSphere XD5.1 Technical Guide


PartitionHandlerLocalインターフェースのメソッドを作成
以下のメソッドを作成したWpfSampleBeanに作成






public PartitionDefinition[] getPartitions()
public boolean isPartitionAlive(String arg0)
public boolean partitionLoadEvent(String arg0)
public void partitionUnloadEvent(String arg0)
WSADの機能を使用してこれらのメソッドを作成することが可能
次のページにその方法を記述
作成したSessionBeanに対して、PartitionHandlerLocalインターフェースのメソッドを実
装します。このインターフェースが持っているメソッドは
public PartitionDefinition[] getPartitions()
public boolean isPartitionAlive(String arg0)
public boolean partitionLoadEvent(String arg0)
public void partitionUnloadEvent(String arg0)
の4つなので、これらのメソッドを実装してください。
35
1-2.PSSBの作成(補足)
WebSphere XD5.1 Technical Guide

PartitionHandlerLocalインターフェースのメソッドの簡単な実装方法

WpfSampleBeanにPartitionHandlerLocalを実装

ソース->メソッドのオーバーライド/インプリメントをクリック
PartitionHandlerLocalインターフェースをSessionBeanにWSADの機能を使用して作
成する方法について解説します。
WpfSampleBeanのソース編集画面を表示して、インターフェースに
PartitionHandlerLocalを追加します。その後でソース編集画面でマウスを右クリックして
プルダウンメニューを表示させ、ソース->メソッドのオーバーライド/インプリメントをクリック
します。
36
1-2.PSSBの作成(補足)
WebSphere XD5.1 Technical Guide

PartitionHandlerLocalにチェックを入れてOKをクリック

PartitionHandlerLocalのメソッドが作成
WpfSampleBeanからPartitionHandlerLocalの実装を削除

ソース->メソッドのオーバーライド/インプリメントをクリックするとインターフェースとメソッド
が表示されるので、PartitionHandlerLocalにチェックを入れてOKをクリックします。これ
でWpfSampleBeanにPartitionHandlerLocalのメソッドが作成されます。
最後にWpfSampleBeanのインターフェースの実装からPartitionHandlerLocalを削除
します。これでPartitionHandlerLocalのメソッド作成が完了します。
37
1-2.PSSBの作成
WebSphere XD5.1 Technical Guide

com.ibm.websphere.wpf.*のimportへの追加


PartitionManagerの属性への追加


import com.ibm.websphere.wpf.*;
PartitionManager ivRuntime;
setSessionContextメソッドの編集
public void setSessionContext(javax.ejb.SessionContext ctx) {
mySessionCtx = ctx;
try{
InitialContext ic = new InitialContext();
ivRuntime = (PartitionManager)ic.lookup(PartitionManager.JNDI_NAME);
}catch(Exception e){
throw new EJBException("Problem initializing PSSB", e);
}
}
PSSBはcom.ibm.websphere.wpfパッケージのクラスを使用するので、このパッケージ
をimportします。
またPartitionManagerクラスを使用するので、このクラスを属性に追加します。その後、
各種メソッドの編集を行います。
setSessionContextメソッドを編集します。このメソッドではPartitonManagerを
InitialContextから取得します。
38
1-2.PSSBの作成
WebSphere XD5.1 Technical Guide

getPartitionメソッドの編集
public PartitionDefinition[] getPartitions() {
ArrayList partitions = new ArrayList();
//Partition per Keyの例です。
//ここではKeyを固定値にしていますが、実際のアプリケーションではDBから取得します。
String[] keys = new String[]{"AAA","BBB","CCC","DDD","EEE","FFF","GGG","HHH","III","JJJ" };
PartitionDefinition[] def = new PartitionDefinition[10];
for(int i = 0; i < keys.length; ++i){
def[i] = ivRuntime.createPartitionDefinition(keys[i], "KEYS" , PartitionScope.K_CLUSTER);
}
return def;
}
getPartitionメソッドの編集を行います。
このメソッドはWPFの起動時に呼ばれ、パーティションのキーを作成します。パーティ
ションの定義情報を持つPartitionDefinitionクラスを作成し、このクラスの配列を返り値で
返します。
39
1-2.PSSBの作成
WebSphere XD5.1 Technical Guide

partitionLoadEventの編集


戻り値をtrueに変更
isPartitionAliveの編集

戻り値をtrueに変更
partitionLoadEventメソッドの編集を行います。
このメソッドはパーティションがLoadされる時に呼ばれ、パーティションの初期化処理を
実行します。パーティションを有効にするために戻り値をtrueに設定します。
isPartitionAliveメソッドの編集を行います。
このメソッドはHAManagerの設定に従って定期的に呼ばれ、パーティションが有効に
なっているか確認する処理を行います。パーティションを有効にするために戻り値をtrue
に設定します。
40
1-2.PSSBの作成
WebSphere XD5.1 Technical Guide

ビジネスロジックの追加

ここではpingメソッドをビジネスロジックとして追加
public String ping(String partitionName) {
System.out.println("ping:" + partitionName);
return "partiton=" + partitionName;
}

WpfSampleへpingメソッドを追加
public String ping(String partitionName) throws java.rmi.RemoteException;
WpfSampleBeanのビジネスロジックを作成します。このサンプルではpingというメソッド
を作成しました。このメソッドは呼ばれたら標準出力に文字列と引数を出力します。
WpfSessionBeanへのメソッド追加ですので、リモート・インターフェースにもメソッドの定
義を行います。
41
1-3. Routing Classの作成
WebSphere XD5.1 Technical Guide

<EJBName>_PartitionKeyという名前のクラスを作成


WpfSample_PartitionKey.javaを作成
ビジネスロジックのstaticメソッドを追加
package test;
public class WpfSample_PartitionKey {
public static String ping(String partition){
return partition;
}
}
PSSBを作成したら、次にRouting Classを作成します。このクラスは通常のJavaクラスと
して作成します。クラス名は必ず<EJBName>_PartitionKeyにしてください。サンプル
のPSSB名はWpfSampleなのでRouting ClassはWpfSample_PartitionKeyという名
前になります。
このクラスではPSSBで作成したビジネスロジックのメソッドをstaticメソッドとして作成しま
す。このサンプルではpingメソッドを作成しているので、staticメソッドとしてpingメソッドを
WpfSample_PartitionKeyに追加します。
42
2-1.クライアントコードの作成
WebSphere XD5.1 Technical Guide

アプリケーション・クライアントの作成は通常と同じ
public class TestClient {
public static void main(String[] args) throws Exception{
// Look up the Session EJB
InitialContext ic = new InitialContext();
WpfSampleHome home =
(WpfSampleHome) PortableRemoteObject.narrow(ic.lookup
("java:comp/env/ejb/WpfSample"),WpfSampleHome.class);
// Create the seesion bean
final WpfSample session = home.create();
String pingPartition = args[0];
try {
String sid = session.ping(pingPartition);
System.out.println("call: " + pingPartition + "->" + sid);
} catch (Exception e) {
e.printStackTrace();
}}}
クライアントコードを作成します。作成方法は通常のEJBと同じです。
クライアントコードのサンプルはWpfSampleのpingメソッドを呼んで、返り値を標準出力
へ出力するEJBクライアントです。
43
2-2.Stubの編集
WebSphere XD5.1 Technical Guide
<XD_Insuatll_Root>/bin/wpfStubUtilコマンドを実行

コマンドを使用することにはWSADからエクスポートする際にソース・ファイルのエクスポートに
チェックを入れない
C:¥WebSphere¥AppServer¥bin¥wpfStubUtil.cmd -ear C:¥stub¥wpfEar.ear -jar wpfEjb.jar
-class test/WpfSample.class -temp C:¥wpftemp
WSADで作成されるStubをツールを使用してWPF用のStubに編集します。
編集方法は、WSADのプロジェクトからEARファイルをエクスポートします。その際に
ソース・ファイルのエクスポートにはチェックを入れないでください。これにチェックを入れ
るとツールが正常に処理できなくなります。
Stubを編集するツールは<XD_Insuatll_Root>/bin/wpfStubUtilです。引数”-ear”で対
象EARファイル、引数”-jar”で対象EJBjarファイル、引数”-class”で対象PSSBクラス名、
引数”-temp”でツールの作業ディレクトリを指定します。
44
3-2.デプロイ
WebSphere XD5.1 Technical Guide

デプロイEJBのチェックを外す
作成したEARをXDのクラスターへデプロイします。
その際にデプロイEJBのチェックは外してください。その他のデプロイは通常のJ2EEア
プリケーションと同様です。
45
実行
WebSphere XD5.1 Technical Guide
C:¥WebSphere¥AppServer¥bin>C:¥WebSphere¥AppServer¥bin¥launchClient.bat C:¥WebSph
ere¥AppServer¥installedApps¥POOHNetwork¥wpfEar.ear -CCproviderURL=corbaloc::loca
lhost:9821 CCC
IBM WebSphere Application Server、リリース 5.1
J2EE Application Client Tool
Copyright IBM Corp., 1997-2003
WSCL0012I: コマンド行引き数を処理しています。
WSCL0013I: J2EE アプリケーション・クライアント環境を初期化しています。
WSCL0035I: J2EE アプリケーション・クライアント環境の初期化が完了しました。
WSCL0014I: アプリケーション・クライアント class test.TestClient を起動しています。
:WpfSample_PartitionKey:ping:
:WpfSample_PartitionKey:ping:
:WpfSample_PartitionKey:ping:
call: CCC->partiton=CCC
XDへデプロイしたWPFアプリケーションを実行します。サンプルはlaunchClientを使用
して実行しています。
46
Fly UP