はじめに
普段、複数の種類のDBでテストすることが多いので、
アプリケーションサーバ(当方の環境ではTomcat)の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" maxActive="100" maxIdle="20" maxWait="-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" maxActive="100" maxIdle="20" maxWait="-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" /> <!-- PostgreSQL --> <Resource name="jdbc/PostgreSQL" auth="Container" type="javax.sql.DataSource" maxActive="100" maxIdle="20" maxWait="-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" maxActive="100" maxIdle="20" maxWait="-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" maxActive="100" maxIdle="20" maxWait="-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_74
- NetBeans IDE 8.1
- 動作検証
- CentOS Linux release 7.2
- JDK 1.8.0_74
Webツールも公開しています。
Web便利ツール@ツールタロウ