<目次>
(1) Tomcatのコネクションプールの設定手順
(1-1) コネクションプールとは?
(1-2) コネクションプールの設定手順
(1-2-1) context.xmlの記述
(1-2-2) JDBCドライバの導入&PJにライブラリ追加
(1-2-3) データベース接続テスト用プログラムの作成
(1-2-4) 疎通確認
(1-3) こんなエラーが起きたら・・
・java.lang.ClassNotFoundException: oracle.jdbc.OracleDriver
・javax.servlet.ServletException: javax.naming.NamingException: Could not create resource instance
(1) Tomcatのコネクションプールの設定手順
(1-1) コネクションプールとは?
コネクションプールとは、データベース接続をプール(保管)する事で、アプリケーションから接続要求があった時に都度、接続をする負荷を削減する目的の仕組みです。
データベースへの接続処理は負荷の高い処理のため、不特定多数のユーザーから同時接続が発生した際には、逐一接続を行う事はリソースの逼迫に繋がる恐れがあり、こうした状況を改善するためにもデータソースが非常に役に立ちます。
(図111)
(1-2) コネクションプールの設定手順
今回はOracleDBを利用した例の具体的な手順をご紹介します。他ベンダーのDBを使われている方は、DBに関する部分だけ読み替えて参考にして頂けたらと思います。
(1-2-1) コネクションプールの設定手順
①context.xmlの作成
・ファイル名を「context.xml」にして「Finish」を押下します。
②xmlファイルの記述
<?xml version="1.0" encoding="UTF-8"?> <Context displayName="Sample DataSource" docBase="LoginTemplate" path="/LoginTemplate" reloadable="true" > <Resource name="jdbc/LoginTemplate" auth="Container" type="javax.sql.DataSource" username="[ご自身のスキーマ]" password="[ご自身のパスワード]" driverClassName="oracle.jdbc.OracleDriver" url="jdbc:oracle:thin:@[ホスト名]:[ポート番号]:ORCL" maxWait="5000" maxIdle="2" validationQuery="SELECT * FROM ACCESS_COUNTER" /> </Context>
(図121)④
(表)Resourceタグの各属性の説明
<Resouce> | name | リソースの名前 データソース(javax.sql.Datasource)を一意に識別する名前 |
<Resouce> | type | リソースのデータ型を指定します。完全限定名(パッケージ名も含めた名前)にて記述します。 (例) データソースの場合は「javax.sql.DataSource」を指定します。 |
<Resouce> | auth | リソースに対する接続方法を指定します。選択肢は以下2つがあります。 ①Application Webアプリケーションのプログラムからアクセスする場合 ②Container コンテナ(Tomcat)がWebアプリケーションに代わってアクセスする場合 データソース(javax.sql.Datasource)を利用する場合は「Container」を指定します。 |
<Resouce> | username | getConnection(username, password)の呼び出し(接続時)に指定する、データソースの「ユーザー名」です。 |
<Resouce> | password | getConnection(username, password)の呼び出し(接続時)に指定する、データソースの「パスワード」です。 |
<Resouce> | driverClassName | JDBCドライバクラスの完全修飾名を指定します。 (例) Oracle: oracle.jdbc.OracleDriver MySQL: com.mysql.jdbc.Driver Postgre: org.postgresql.Driver |
<Resouce> | url | データソースのURLを指定します。 (例) Oracle: jdbc:oracle:thin:@[HostName]:[ポート番号]:[SID] MySQL: jdbc:mysql://[HostName]:[ポート番号]/[DB名] Postgre: jdbc:postgresql://[HostName]:[ポート番号]/[DB名] |
<Resouce> | maxActive | コネクションプールに保持する最大DB接続数を指定します。 ※「-1」を指定すると無制限になります。 |
<Resouce> | maxWait | DB接続が確立されるまでの最大待ち時間を秒単位で指定します。 ※「-1」を指定すると無制限になります。 |
<Resouce> | maxIdle | 接続プールに残すアイドリング状態のDB接続数。 |
<Resouce> | validationQuery | 接続が正常に出来ているか?をチェックするためのSQLです。 |
(1-2-2) JDBCドライバの導入&PJにライブラリ追加
①JDBCドライバのダウンロード&配備
②動的Webプロジェクトのビルドパスに追加
(1-2-3) データベース接続テスト用プログラムの作成
Context context = new InitialContext(); DataSource ds = (DataSource)context.lookup("java:comp/env/jdbc/LoginTemplate"); Connection conn = ds.getConnection(); conn.close();
以下、JSP全体のサンプルプログラムをご紹介します。
(サンプル)
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="java.sql.*, javax.naming.*, javax.sql.*" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Connection Pool Test</title> </head> <body> <% Context context = new InitialContext(); DataSource ds = (DataSource)context.lookup("java:comp/env/jdbc/LoginTemplate"); Connection conn = ds.getConnection(); conn.close(); %> コネクションを確立しました。 </body> </html>
(1-2-4) 疎通確認
https://[ホスト名]:[ポート名]/[アプリケーション名]/[JSP名].jsp https://ik1-336-28337.vs.sakura.ne.jp:8443/LoginTemplate/ConnectionPoolTest.jsp
(1-3) こんなエラーが起きたら・・
・java.lang.ClassNotFoundException: oracle.jdbc.OracleDriver