エラー対処とパフォーマンス:JSPコーディング・テクニック(4)(3/3 ページ)
前回「文字列処理と入力チェック」までで、入力チェックの仕組みが組み込まれた共有ブックマークが出来上がりました。本連載の最終回となる今回は、予期しない内部エラーが発生したときのエラーページの表示方法と、コネクションプールを用いたデータベースアクセスの効率化について述べ、最後にこの連載のまとめを行います。
(3)コネクションプールを使う
MyDBAccess での対応
前ページのように、コネクションプールの仕組みを作成した後は、それに対応するように MyDBAccess側の修正を次のように行います。
1: package atmarkit; 2: 3: import java.sql.*; 4: 5: /** 6: * MyDBConnectionPool を使うように改良したバージョン 7: */ 8: public class MyDBAccess { 9: 10: final static int CONNECTION_TRY_COUNT = 10; 11: private Connection connection = null; 12: private MyDBConnectionPool connectionPool; 13: 14: /** 15: * デフォルトコンストラクタ 16: * MyDBConnectionPool のインスタンスを取得する 17: */ 18: public MyDBAccess() throws Exception{ 19: connection = null; 20: connectionPool = MyDBConnectionPool.getInstance(); 21: } 22: 23: /** 24: * SQL 文を実行した結果の ResultSet を返す 25: * @param sql SQL 文 26: */ 27: public ResultSet getResultSet(String sql) throws Exception { 28: getConnection(); 29: ResultSet resultSet; 30: try { 31: Statement statement = connection.createStatement(); 32: resultSet = statement.executeQuery(sql); 33: statement.close(); 34: } catch(Exception e) { 35: releaseConnection(); 36: throw e; 37: } 38: releaseConnection(); 39: 40: return resultSet; 41: } 42: 43: /** 44: * SQL 文の実行 45: * @param sql SQL 文 46: */ 47: public void execute(String sql) throws Exception { 48: getConnection(); 49: try { 50: Statement statement = connection.createStatement(); 51: statement.execute(sql); 52: statement.close(); 53: } catch(Exception e) { 54: releaseConnection(); 55: throw e; 56: } 57: releaseConnection(); 58: } 59: 60: /** 61: * コネクションをプールに返却する 62: */ 63: private void releaseConnection() { 64: if(connection != null){ 65: connectionPool.releaseConnection(connection); 66: } 67: } 68: 69: /** 70: * コネクションをプールから取得する 71: */ 72: private void getConnection() throws Exception { 73: connection = connectionPool.getConnection(CONNECTION_TRY_COUNT); 74: if(connection == null) { 75: throw new Exception("Can't get DB Connection."); 76: } 77: } 78: 79: /** 80: * 何らかの理由でコネクションの返却もれが発生しないように、 81: * デストラクトされるまえに releaseConnection を実行するようにする 82: */ 83: protected void finalize() { 84: releaseConnection(); 85: } 86: 87: /** 88: * 何もしない 89: */ 90: public void open() {} 91: 92: /** 93: * 何もしない 94: */ 95: public void close() {} 96: }
すでに作成してある、既存のJSPプログラムが影響を受けないように、もともと作成してあったコネクションをオープンするメソッドopen()と、クローズするメソッドclose()は、そのまま残してあります。これらのメソッドは、実際には何も処理を行いませんが、このようにメソッドを残しておくことで、既存のJSPプログラム側では、修正作業を行わずに済みます。
getResultSet()と、execute()メソッドでは、最初にコネクションプールからコネクションの取得を行っています。そのコネクションを使用してデータベースに対する処理を行った後、使用したコネクションを返却します。このようにすることで、コネクションプールを利用した効率的なデータベースアクセスが行えるようになります。
連載の終わりに
本連載では4回にわたって、JSPを用いた簡単なWebアプリケーションの作成を紹介してきました。共有ブックマーク集の作成を具体的な例に挙げ、データベースに対する情報の登録・修正・削除をテーマに解説を行ってきました。JSPを用いることで、どのようなことができるかを具体的に示せたのではないかと思っています。
しかしながら、今回紹介した内容以外にも、Webアプリケーションを開発するための技術は数多くあり、より高度なシステムを開発するには、さらに多くのことを学ぶ必要があります。以下に、Webアプリケーションを開発するために必要となる関連事項を紹介し、本連載のまとめとさせていただきます。
■JSP以外の技術
今回紹介した共有ブックマーク集や簡単な社内ツールなど、比較的規模の小さなWebアプリケーションでしたら、JSPを用いることで問題なく開発が行えると思います。しかし、オンラインショップやポータルサイトのような、より規模が大きく、堅牢性の求められるアプリケーションを開発する場合には、JSPの知識だけでは開発が困難になる場合があります。JSPとともに広く使われているサーブレットや、J2EEの中核となるEJBの技術を使うことで、大規模なアプリケーションをより効率的に開発できます。これら、JSP以外の技術の知識も必要となるでしょう。以下に示す、本サイト内の関連記事・連載が参考になります。
■開発ツール
簡単なJSPプログラムでしたら、emacsやviまたは、Windows上で動く簡易エディタなどで記述を行えば十分です。しかし、より効率よく開発を行うための統合開発環境がいくつかのベンダから出されています。これらを使用することで、システム全体の把握や、デバッグ作業などを効率化できます。これらについては、以下に示す、本サイト内の関連記事・連載が参考になります。
■設計手法
今回紹介した共有ブックマーク集の例では、設計手法を意識せずにボトムアップ式に機能の追加と開発を行ってきました。しかし、規模の大きなシステムの開発では、設計が非常に重要になります。設計がシステムの成否を左右するといっても過言ではないでしょう。設計の段階から、効率的なクラス設計や、MVCモデルによるシステム構築を意識するなど、気を付けるべき点は多くあります。これらについては、以下に示す記事が参考になります。
- 初歩のUML
- 初めてのWebアプリケーション・サーバ 第5回 MVCモデルでのWebアプリケーションの作成
Copyright © ITmedia, Inc. All Rights Reserved.