0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

TomcatでのDBCPのデフォルト実装を確認してみた

Posted at

概要

JDBCを利用してデータベース関連の処理をする際に、これまではDriverManager を利用してコネクションを取得していたが、一般的には、DataSource と JNDI という仕組みを使ってコネクションを取得する方が良いということを知った。
DataSource を用いれば、リソース情報を外部ファイルに記述することができるほか、コネクションプーリングの機能も使える。
このDataSourceの実装クラスは複数あるが、Tomcatに含まれるデフォルトの実装クラスが何か知りたかったので、プログラムを書いて実験してみたところ、ところ、Tomcatバージョン8、9、10においてはorg.apache.tomcat.dbcp.dbcp2.BasicDataSourceがデフォルトで用いられることが分かった。

DataSourceのデフォルトの実装クラスは?

Tomcat には、Tomcat DBCP Pool という Tomcat に特化した実装がある。Apache common DBCP よりもパフォーマンスが優れているとされている。
実装の切り替えには、DataSouce の設定時に、factory 属性を記述してファクトリクラスを切り替えるだけで良い。
factory 属性を記述しない場合は、デフォルトの実装クラスが用いられるとのこと。
Tomcatのバージョンによってデフォルトの実装クラスが違うようで、ChatGPTに聞いてみたが、結果が判然としなかった。
そこで、実際にプログラムを書いて実験してみた。

実験

環境

  • eclipse(pleiades all in one) 2022
  • 上記に含まれるTomcat。すなわちTomcat8、9、10

プログラム

試験のためのプログラムは次のとおり。

<%@page import="javax.sql.DataSource"%>
<%@page import="javax.naming.InitialContext"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<%
	final String RESOURCENAME = "jdbc/mydb";

    try {
        InitialContext ic = new InitialContext();
        DataSource ds = (DataSource)ic.lookup("java:comp/env/" + RESOURCENAME);
        out.print(ds);
    } catch (Exception e) {
        // TODO: handle exception
        out.print(e);
    }
    %>

</body>
</html>

これを、Tomcatのバージョンごとのサーバ上でそれぞれ動かした。

結果

Tomcat8、9、10 すべて
org.apache.tomcat.dbcp.dbcp2.BasicDataSource
であった。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?