Rainbow Engine

IT技術を分かりやすく簡潔にまとめることによる学習の効率化、また日常の気付きを記録に残すことを目指します。

Java JSP/Servlet Tomcat

Tomcatのコネクションプールの設定手順

投稿日:2021年4月22日 更新日:

<目次>

(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) コネクションプールの設定手順

Tomcatはwebアプリケーション単位で適用する設定を記述するためのTomcat独自のファイルです。元々はserver.xmlの一部でしたが、より柔軟にするために独立したファイルとして切り出されています。
 
今回はこのcontext.xmlにデータソース(接続工場のイメージで、コネクションプールを利用するための技術)の設定を記述していきます。
 
①context.xmlの作成
データソースを利用したい動的Webアプリケーションの「META_INF」フォルダ配下に「context.xml」を作成します。
 
・META_INFフォルダを右クリック⇒New⇒Otherと選択します。
 
(図121)①

・xml等で検索して「XML File」を選択して「Next」押下します。
 
(図121)②

・ファイル名を「context.xml」にして「Finish」を押下します。

※動作のためには、名前はこの通りにする必要があるため注意
 
(図121)③

 

②xmlファイルの記述
作成したcontext.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ドライバのダウンロード&配備
もしもJDBCドライバの導入が未済の方は、下記を参考にサーバへのアップロードを行って下さい。
 
 
②動的Webプロジェクトのビルドパスに追加
アップロードが完了したら、ご自身のWebアプリケーションにJDBCドライバのjarファイル(Oracleの場合はojdbc6.jar)をご自身のプロジェクトのビルドパスに追加していきます。
 
・ご自身のプロジェクトを右クリック⇒Build Path⇒Configure Build Pathと選択します。
 
(図122)①
 
・Librariesタブで「Add External JARs」を選択します。
 
(図122)②

・先程サーバにアップロードしたJDBCドライバを選択します。
 
(図122)③Oracleの例:ojdbc6.jar

・追加できたら「Apply and Close」を押下します。
 
(図122)④

 

目次にもどる

(1-2-3) データベース接続テスト用プログラムの作成

続いて、コネクションプールの疎通確認のための簡単なプログラムを作成します。
 
今回は簡単なJSP画面に、スクリプトレットでコネクションプールへの接続を行うコードを埋め込んで疎通チェックします。以下が接続⇒クローズの疎通を行うコードです。lookupメソッドの引数にはcontext.xmlで設定したご自身のデータソース名を指定します(「java:comp/env/」の部分は固定)。
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>
 
(図123)①

(1-2-4) 疎通確認

ご自身のJSPのURLで「コネクションを確立しました。」の文言が表示されればOKです。
 
(URL例)
https://[ホスト名]:[ポート名]/[アプリケーション名]/[JSP名].jsp
https://ik1-336-28337.vs.sakura.ne.jp:8443/LoginTemplate/ConnectionPoolTest.jsp
(図124)①

目次にもどる

(1-3) こんなエラーが起きたら・・

・java.lang.ClassNotFoundException: oracle.jdbc.OracleDriver

⇒JDBCドライバのライブラリが追加されていない可能性があります。
 
(図131)①

 

・javax.servlet.ServletException: javax.naming.NamingException: Could not create resource instance

⇒context.xmlの設定に誤りがある可能性があります。私の場合は「type=”javax.sql.DataSource”」⇒「type=”javax.sql.Datasource”」とタイポしていました・・
 
(図131)②
 

目次にもどる

Adsense審査用広告コード


Adsense審査用広告コード


-Java, JSP/Servlet, Tomcat

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

Twitter APIのRate Limit Exceedエラー(code – 88)の意味について

  <目次> (1) Twitter APIのRate Limit Exceedエラー(code – 88)の意味について  (1-1) APIコールのリミット(Rate Limit)につい …

Javaの型とは?ジェネリクスの基本や使い方をご紹介

<目次> (1) Javaの型とは?ジェネリクスの基本や使い方をご紹介  (1-1) <T>とは?ジェネリクスとは?  (1-2) ジェネリクスを使う利点  (1-3) ジェネリクスをクラ …

JavaのJDBC接続でjava.sql.SQLRecoverableException: Closed Connectionが発生した時の解決メモ

(0)目次&概説 (1) エラー事象の概要  (1-1) エラーの発生状況  (1-2) エラーメッセージ全文 (2) エラーの原因 (3) エラーの対処方法  (3-1) エラーの修正内容  (3- …

TwitterのAPIライブラリでリツイートした人の一覧を取得する方法

<目次> (1) TwitterのAPIライブラリでリツイートした人の一覧を取得する方法  (1-1) 構文  (1-2) サンプルプログラム (1) TwitterのAPIライブラリでリツイートした …

Eclipseで”Unknown version of Tomcat was specified”エラーが出た時の対処方法

<目次> (1) Eclipseで”Unknown version of Tomcat was specified”エラーが出た時の対処方法  (1-1) 事象  (1-2) …

  • English (United States)
  • 日本語
Top