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