第6回 最適な設計はホスト時代の流儀に同じ?
eビジネス・アプリケーションは お作法を守って記述されないといけない |
さていままで仕組みの解説ばかりしてきましたので、少し接続マネージャを使ったプログラムについてもお話ししておきましょう。接続マネージャの仕組みを有効に活用するには、プログラム自身もお作法にのっとって記述されていなければいけません。それは何かというと、サーバ・サイドJavaのプログラムで守るべき以下の約束です。
- 極力、直接ミドルソフトへのアクセスを避ける
- アクセスには、必ず接続マネージャを経由させる
- 使い終わった接続は、必ず接続マネージャに戻す
忘れがちなのは、上記の3つ目です。使っている接続を接続マネージャに戻さないと、そのプログラムが継続して接続を使っていると判断されるので、いつまでたっても、待ちになっているプログラムに接続が渡されません。
クライアント・サーバとは違ってホスト側で集中的に動くサーバ・サイドJavaプログラムは、この厳格な作法を守って作成されている必要があります。そうでないとシステム全体のパフォーマンスを悪くしてしまいます。またすべてのプログラムをうまく動かすことができなくなってしまいます。
悪いサーブレットを改善しましょう |
先ほど記事の初めに接続マネージャの考え方が標準化されている、とお話ししましたが、その最も分かりやすい例がリレーショナルDBに対する接続マネージャです。これはJ2EEの世界では、データソースという仕様で決められています。
この連載は、第4回に出てきたプログラムの問題のある個所を改造しながら話を進めていますが、この第4回のプログラムでは、DBへのアクセスを接続マネージャを使わずに、直接リレーショナルDBにアクセスしています。
ということは、このままではこのサーブレットは、多くのユーザーからアクセスされると、システム全体のパフォーマンスを悪化させる可能性が出てきます。そこで、このプログラムをリレーショナルDBの接続マネージャである、データソースを使った処理に変更して、より効率的に動くスマートなサーバ・サイドJavaプログラムに改造することにしましょう。
以下のコードを見てください。この部分が、プログラムの中から直接リレーショナルDBにアクセスしている記述です。このプログラムの3行目と4行目の個所を接続マネージャのデータソースを使った記述に書き換えてみましょう
1 import java.sql.*;
|
以下のコードを見てください。これが書き換え後のコードになります。データソースを経由してDB接続を行うには専用のプログラムが必要になります。それを表す記述が2行目と3行目に記述されているJavaパッケージ(ライブラリですね)に含まれています。
1 import java.sql.*;
|
プログラムの5行目と6行目では、データソースを探す準備をして、実際のデータソースを見つけ出す作業です。データソースを見つけ出すというのは、ちょっと奇妙ないい方かもしれませんが、この説明は後ほどします。
データソースが発見できたら、7行目でデータソースを経由してDB接続を行います。このDB接続がうまくいけば、データソースを経由してDBアクセスしたことと同様の効果が得られることになります。この後のコードの書き方に全く変更はありません
5/6 |
連載記事一覧 |
- 実運用の障害対応時間比較に見る、ログ管理基盤の効果 (2017/5/9)
ログ基盤の構築方法や利用方法、実際の案件で使ったときの事例などを紹介する連載。今回は、実案件を事例とし、ログ管理基盤の有用性を、障害対応時間比較も交えて紹介 - Chatwork、LINE、Netflixが進めるリアクティブシステムとは何か (2017/4/27)
「リアクティブ」に関連する幾つかの用語について解説し、リアクティブシステムを実現するためのライブラリを紹介します - Fluentd+Elasticsearch+Kibanaで作るログ基盤の概要と構築方法 (2017/4/6)
ログ基盤を実現するFluentd+Elasticsearch+Kibanaについて、構築方法や利用方法、実際の案件で使ったときの事例などを紹介する連載。初回は、ログ基盤の構築、利用方法について - プログラミングとビルド、Androidアプリ開発、Javaの基礎知識 (2017/4/3)
初心者が、Java言語を使ったAndroidのスマホアプリ開発を通じてプログラミングとは何かを学ぶ連載。初回は、プログラミングとビルド、Androidアプリ開発、Javaに関する基礎知識を解説する。
|
|