はじめに
普段、複数の種類のDBでテストすることが多いので、
アプリケーションサーバ(当方の環境ではTomcat8.5.20)のcontext.xmlには
接続する可能性のあるすべてのDBの記述をずらっと書いています。
実装例
環境依存による違いは大いにあると思いますが、ご参考になれば...。
DB2はほとんど使わないので、実用に堪えうるかは?です。
context.xml
<?xml version="1.0" encoding="UTF-8"?>
<Context path="/コンテキストパス">
<!-- MySQL -->
<Resource name="jdbc/MySQL" auth="Container" type="javax.sql.DataSource" maxTotal="100" maxIdle="20" maxWaitMillis="-1" username="ユーザ名" password="パスワード" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://ホスト名:3306/データベース名?zeroDateTimeBehavior=convertToNull" validationQuery="SELECT 0" />
<!-- Oracle -->
<Resource name="jdbc/Oracle" auth="Container" type="javax.sql.DataSource" maxTotal="100" maxIdle="20" maxWaitMillis="-1" username="ユーザ名" password="パスワード" driverClassName="oracle.jdbc.driver.OracleDriver" url="jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=ホスト名)(PORT=1521))(LOAD_BALANCE=YES)(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=サービス名)))" validationQuery="SELECT 0 FROM DUAL" />
<!-- SAP HANA -->
<Resource name="jdbc/HANA" auth="Container" type="javax.sql.DataSource" maxTotal="100" maxIdle="20" maxWaitMillis="-1" username="ユーザ名" password="パスワード" driverClassName="com.sap.db.jdbc.Driver" url="jdbc:sap://ホスト名:30013/?databaseName=データベース名&autocommit=false" validationQuery="SELECT 0 FROM DUMMY" />
<!-- PostgreSQL -->
<Resource name="jdbc/PostgreSQL" auth="Container" type="javax.sql.DataSource" maxTotal="100" maxIdle="20" maxWaitMillis="-1" username="ユーザ名" password="パスワード" driverClassName="org.postgresql.Driver" url="jdbc:postgresql://ホスト名:5432/データベース名" validationQuery="SELECT 0" />
<!-- SQLServer -->
<Resource name="jdbc/SQLServer" auth="Container" type="javax.sql.DataSource" maxTotal="100" maxIdle="20" maxWaitMillis="-1" username="ユーザ名" password="パスワード" driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver" url="jdbc:sqlserver://ホスト名:1433;databaseName=データベース名" validationQuery="SELECT 0" />
<!-- DB2 -->
<Resource name="jdbc/DB2" auth="Container" type="javax.sql.DataSource" maxTotal="100" maxIdle="20" maxWaitMillis="-1" username="ユーザ名" password="パスワード" driverClassName="com.ibm.db2.jcc.DB2Driver" url="jdbc:db2://ホスト名:50000/データベース名:currentSchema=スキーマ名(例: db2admin);" validationQuery="SELECT 0 FROM SYSIBM.DUAL" />
</Context>
サンプルでは、動作確認しやすいようにjspで実装しています。
connection_test.jsp
<%--
Author : tool-taro.com
--%>
<%@page import="javax.sql.DataSource"%>
<%@page import="java.sql.Connection"%>
<%@page import="javax.naming.InitialContext"%>
<%@page contentType="text/html" pageEncoding="UTF-8" session="false" %>
<%
//コネクションを取得するjndi
String jndi = "java:comp/env/jdbc/MySQL";
//String jndi = "java:comp/env/jdbc/Oracle"; //←Oracleの場合
InitialContext context = null;
Connection connection = null;
//コネクション取得処理
String result = null;
try {
context = new InitialContext();
DataSource dataSource = (DataSource) context.lookup(jndi);
connection = dataSource.getConnection();
//トランザクション分離レベルがDBによって異なるので設定を統一
connection.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);
connection.setAutoCommit(false);
result = connection.getMetaData().getDatabaseProductName();
}
finally {
if (context != null) {
try {
context.close();
}
catch (Exception e) {
}
}
if (connection != null) {
try {
connection.close();
}
catch (Exception e) {
}
}
}
%>
<!DOCTYPE html>
<html>
<head>
<title>tool-taro.com</title>
</head>
<body>
接続したDB="<%= result%>"
</body>
</html>
動作確認
connection_test.jspの実行結果を見てみましょう。
接続したDB="MySQL"
環境
-
開発
- Windows 10 Pro
- JDK 1.8.0_144
- NetBeans IDE 8.2
-
動作検証
- CentOS Linux release 7.4
- JDK 1.8.0_144
Webツールも公開しています。
Web便利ツール@ツールタロウ