
第4回 Webアプリケーションの高速化実験
|
チューニング例3 「EJB 2.0 Entity-Beans CMPの実装について」 |
これまでに、CMPは「あまり性能が出ない」「柔軟性がなく実装しづらい」など敬遠されてきましたが、WebLogic Server バージョン6.0以降では、EJB 2.0がサポートされ、飛躍的に機能、性能が向上しました。今回のテストで、CMPと各実装方式の性能比較を行い、性能面からCMPがどこまで使えるのか実証していきたいと思います。
|
EJB 2.0のCMPのパフォーマンス向上について |
EJB 1.1のCMPは、ほかの実装に比べパフォーマンスを低下させる要因があります。それを防ぐには、EJB 1.1の仕様上、リスト1のように、永続化フィールドをpublic属性として実装クラスに定義し、永続化フィールドの取得、変更に関するメッソド(セッター、ゲッター・メッソド)の実装をEJBプロバイダ側(EJB開発者)で実装しなければなりません。永続化フィールドの変更を行った場合、コンテナ自身がフィールドの変更を知る手段がないため、JDBCプログラムを組んだ場合と比べると不必要と思われるSQLまで発行してしまう可能性があります。
EJB 2.0の仕様では、リスト2のように、コンテナ側で、永続化フィールドの取得、変更に関するメッソド(セッター、ゲッター・メッソド)の実装を行うので、コンテナ側で永続化フィールドを管理でき、DBへのアクセスを適正化することができます。
Sample EJB 1.1 Implementation Class: |
| 図17 EJB 1.1のサンプル実装クラス |
EJB 2.0 Fields Are Represented as Abstract Accessor Methods: |
| 図18 EJB 1.1のサンプル実装クラス |
|
チューニング・テストの実施 |
アプリケーション・サーバの実装方式(Servlet、SLSB[Stateless Session Bean]、SFSF[State full Session Bean]、CMP[Container-Managed Persistence]、BMP[bean-managed persistence])ごとに、負荷をかけながらパフォーマンスを測定し、CMPとほかの実装方式との性能比較を行います。負荷のかけ方としては、初期時の仮想ユーザー数は、5ユーザーとし、3分ごとに5ユーザーずつ増加させ、最大40ユーザーまで測定します。そのときの各処理の応答時間およびトランザクション数を測定します。
|
チューニング・テストの結果 |
表9と図17にパフォーマンスの測定結果を示します。テスト結果から見るとCMPはServlet、SLSB(Stateful Session Bean)に比べほぼ同等のパフォーマンスが出ています。予測していた値以上の高いパフォーマンスが得られたといえます。
| 実装方法 | |||||
| ユーザー数 | CMP | BMP | SLSB | SFSB | Servlet |
| 5 | 17.283 | 17.117 | 17.272 | 16.772 | 17.206 |
| 10 | 36.306 | 35.578 | 36.017 | 29.311 | 36.461 |
| 15 | 53.006 | 51.411 | 53.567 | 32.278 | 53.778 |
| 20 | 66.383 | 65.15 | 67.856 | 35.378 | 68.45 |
| 25 | 72.022 | 66.161 | 73.85 | 32.567 | 74.367 |
| 30 | 73.633 | 68.178 | 73.506 | 38.233 | 75.289 |
| 35 | 73.372 | 68.05 | 73.239 | 35.939 | 76.55 |
| 40 | 73.467 | 68.822 | 74.906 | 31.15 | 77.433 |
| 表9 各実装方式の秒ごとのトランザクション数(TPS) | |||||
![]() |
| 図19 各実装方式の秒ごとのトランザクション数(TPS) |
| Column EJB 2.0 CMPの実装の勧め WebLogic Server 6.0以降で、EJB 2.0の仕様をサポートするようになってから、CMPはパフォーマンスが向上しただけでなく、実装面においても柔軟なリレーショナル設計を持たせるためのOR(Object-Relational)マッピング機能、ファインダ・メッソドのロジックに提供できるEJB-QL言語(永続ストアからデータを取り出すためのクエリ言語)の提供など、実装に柔軟性を持たせています。また、CMPの代わりに実装されてきたサーブレットもしくはセッションBeanからのJDBCプログラミングによるRDBMSアクセスの実装と比べると、下記の利点が挙げられます。
また、WebLogic Server 7.0Jでは、さらに、性能・実装面を向上させるために、以下の新機能も提供しています。
BMP、もしくはServletもしくはセッションBeanからのJDBCプログラミングの実装を採用してきた開発者からは、CMPを採用するのは、「チャレンジなこと」と思われるかもしれませんが、トライしてみる価値は十分にあると思われます。 |
今回のチューニング・テストに当たり、テスト環境を小規模なPCで構成したので、WebLogic Serverの設定のほとんどが「Out Of Box」の状態でアプリケーションの性能を引き出せたと考えています。逆説的にいえば「チューニングの設定の違いが結果として著しく現れなかった」とも評価されます。大規模のテスト環境であれば、チューニングの効果がもう少し顕著に表れたのではないかと思います。
特に、「チューニング例3 EJB 2.0 Entity-Beans CMP(Container-Managed Persistence)の実装について」では、CMPの性能を向上させるためのキャッシング機能があり、最大負荷が増えるほど、キャッシング効果が大きく表れ、場合によっては、Servlet実装の性能を超えていたかもしれません。
しかし、本題は、「アプリケーション・サーバの性能評価でなく、チューニングの具体例である」ことから考えると、よいデータが収集できたと考えています。
| J2EEパフォーマンスチューニング(第4回) | |
| 今回検証する3つのチューニングポイント | |
| チューニング例1 「Java VMのチューニング」 | |
| チューニング例3 「EJB 2.0 Entity-Beans CMPの実装について」 | |
| 連載記事一覧 |
TechTargetジャパン
- Scalaのパッケージ、アクセス修飾子、オブジェクト継承 (2012/5/22)
インポート、パッケージオブジェクト、抽象クラス/抽象メソッド、オーバーライド、final、シールドクラスなども - 基幹系システムでCloud SQLは使えるか試してみた (2012/5/17)
サンプルとしてMRPシステムを作成して動かし、「再帰呼び出し」などのパフォーマンスを測定して検証してみます - アジャイル管理ツール9選+Pivotal Tracker入門 (2012/5/14)
群雄割拠のアジャイルプロジェクト管理ツールを9つ紹介し、特に注目を集めているPivotal Trackerの基本的な使い方を解説します - サーバサイドJSやJavaでWebアプリが作れるXPages (2012/5/11)
Notes/Dominoの資産をサーバサイドJavaScriptやJavaで操作し、HTMLやJavaScript、CSSをUIにできる技術を紹介
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -

