MySQL 5.0
MySQL 5.0
MySQL 5.0
MySQL 5.0 JDBC
JDBC
JDBC
JDBCドライバ
ドライバ
ドライバ
ドライバ基礎
基礎
基礎
基礎
Tomcat/
Tomcat/
Tomcat/
Tomcat/
JBossAS
JBossAS
JBossAS
JBossAS
からの
からの
からの
からの接続方法
接続方法
接続方法
接続方法
日本ヒューレットパッカード株式会社
オープンソース・コンピテンシ・センター
目次
•
JDBC
•
J2EEサーバからMySQLへの接続方法
−
Tomcat
−
JBossAS
•
付録
−
Javaのインストール手順
−
Tomcatのインストール手順
−
JBossASのインストール手順
概観 : J2EEサーバからMySQLの利用
コネクション
JDBC API Connector/J
コネクション
JDBC API Connector/J
コネクション
JDBC API Connector/J
コネクションプール
コネクションプール
コネクションプール
コネクションプール
MySQL
JNDI
Java
アプリケーション
(JSP/Servlet..etc)
J2EEサーバー
設定ファイル
JDBCドライバライブラリ
(Connector/Jのjar)
DataSource
JDBC API Connector/J 1. DataSourceを検索 2. コネクションを要求 コネクションを作成 3. SQL文送信 準備1. JDBCドライバをインス トール 準備2. DataSource/コネクショ ンプールの設定 3. SQL文送信 接続 接続 接続 4. クローズ目次
•
JDBC
•
J2EEサーバからMySQLへの接続方法
−
Tomcat
−
JBossAS
•
付録
−
Javaのインストール手順
−
Tomcatのインストール手順
−
JBossASのインストール手順
DB
Java
アプリケーション
Javaの
の
の世界
の
世界
世界
世界
まずJDBC
•
JavaアプリケーションからRDBMSに接続するにはJDBCを使う
−
JDBCとはJavaとRDBMSを繋ぐ仕組み
•
Tomcat/JBossASは一種のJavaアプリケーション
•
MySQLはRDBMS
JDBC
Tomcat/JBossASから
から
からMySQLに
から
に
に
に接続
接続
接続するには
接続
するには
するには
するには
JDBCを
を
を
を使用
使用
使用
使用する
する
する
する
JDBC/JDBCドライバとは?
•
JDBC
とは、JavaからRDBMSへの接続やSQL文を処理する
ための「API」、「インターフェース」。つまり、
仕様
仕様
仕様
仕様
。
•
JDBCドライバ
ドライバ
ドライバ
ドライバ
とは、JDBCで決められた「インターフェース」を
特定のRDBMS用向けに
実装
実装
実装
実装
したもの。
−
通常はRDBMSベンダが実装、提供する
DB
Java
アプリケーション
JDBC
API
仕様
仕様
仕様
仕様
Javaの
の
の
の世界
世界
世界
世界
JDBC
ドライバ
実装
実装
実装
実装
•
JDBCのメリット
−
Javaアプリケーション側から、特定のRDBMSを意識する必要がなくなる
Connector/J
(こねくたー じぇい)
•
MySQL用のJDBCドライバがConnector/J
−
MySQL AB(MySQL社)が提供
−
最新公式版はConnector/J 5.0
−
JDBC 3.0 仕様準拠
−
Type 4 JDBCドライバ(Pure Javaで実装されている)
−
もちろんオープンソース
−
「GPL」と「商用」のデュアルライセンス
MySQL
Java
アプリケーション
JDBC
API
Javaの
の
の世界
の
世界
世界
世界
Connector/J
JDBCを使ったDB接続の実際:
コネクション
コネクション
Java
DataSource
JDBC API JDBCドライバ 1. コネクションを要求 2. コネクション作成DB
実際にJavaアプリケーションからJDBCを使用してRDBMSにアクセスするには、
1.
Javaアプリケーションが、DataSourceに対して、コネクション
コネクション
コネクション
コネクション(java.sql.Connection)を要
求
コネクションとは実際にRDBMSに接続するJavaオブジェクト
2.
DataSourceがコネクション
コネクション
コネクションを
コネクション
を
を
を作成
作成
作成
作成
この時点でコネクションがRDBMSへ接続する
3.
Javaアプリケーションはコネクション
コネクション
コネクションを
コネクション
を
を
を利用
利用
利用
利用して
して、
して
して
、
、
、RDBMSに
に
に
にアクセス
アクセス
アクセス
アクセス
4.
RDBMSへのアクセス終了後、コネクション
コネクション
コネクション
コネクションを
を
をクローズ
を
クローズし
クローズ
クローズ
し
し破棄
し
破棄
破棄
破棄
3. SQL文送信コネクション
コネクション
コネクション
コネクションの
の
の
の作成
作成、
作成
作成
、
、
、破棄
破棄
破棄
破棄に
に
に
にコスト
コストが
コスト
コスト
が
が
が掛
掛
掛
掛かる
かる
かる
かる(処理
処理が
処理
処理
が
が
が重
重
重
重い
い
い
い)
−
Javaアプリケーション
アプリケーション
アプリケーション
アプリケーションから
から
からRDBMSへ
から
へ
へアクセス
へ
アクセス
アクセス
アクセスするたびに
するたびに
するたびにコネクション
するたびに
コネクションの
コネクション
コネクション
の
の作成
の
作成
作成、
作成
、
、破棄
、
破棄
破棄を
破棄
を
を
を
行
行
行
行うことは
うことは
うことはパフォーマンス
うことは
パフォーマンス
パフォーマンス
パフォーマンス低下
低下の
低下
低下
の
の
の原因
原因
原因
原因となる
となる
となる
となる
3. SQL文送信JDBCを使ったDB接続の実際:
コネクションプール
そこでコネクションプール
複数のコネクション
コネクション
コネクション
コネクションを
を
を
を予
予め
予
予
め
め
め作成
作成
作成
作成して貯めておく
JavaアプリケーションがRDBMSにアクセスする際、コネクションプールからコ
ネクションを取得する。(コネクション
コネクション
コネクションは
コネクション
は
は作成
は
作成
作成しない
作成
しない
しない)
しない
RDBMSに対して処理が終了すると、Javaアプリケーションはコネクションをク
ローズし、コネクションプールに返却される。(コネクション
コネクション
コネクション
コネクションは
は
は
は破棄
破棄
破棄
破棄しない
しない
しない
しない)
コネクションプールに返却されたコネクションは別のJavaアプリケーションに
よって再利用
再利用
再利用
再利用される
。
コネクション
JDBC API JDBCドライバ
コネクション
JDBC API JDBCドライバ
コネクション
JDBC API JDBCドライバ
コネクションプール
コネクションプール
コネクションプール
コネクションプール
Java
アプリケーション
DataSource
JDBC API JDBCドライバ 2. コネクションを要求DB
1. コネクションを 作成しておく 1. 接続 1. 接続 1. 接続 3. SQ L文送 信 3. SQL文送信 4. ク ロー ズ目次
•
JDBC
•
J2EEサーバからMySQLへの接続方法
−
Tomcat
−
JBossAS
•
付録
−
Javaのインストール手順
−
Tomcatのインストール手順
−
JBossASのインストール手順
J2EEサーバからMySQLの利用手順
準備
準備
準備
準備
1.
J2EEサーバにConnector/J(MySQL用JDBCドライバ)をインストール
2.
MySQL用DataSourceとコネクションプールをJ2EEサーバの設定ファ
イルで定義
•
定義したDataSourceをJ2EEサーバによりJNDIツリーにバインドされる
利用手順
利用手順
利用手順
利用手順
1.
アプリケーションがJNDIツリーを検索(lookup)して、MySQL用の
DataSourceを取得
2.
取得したDataSourceに対して、MySQLへのコネクションを要求
3.
取得したコネクションを利用してSQL文を送信
4.
DB処理が終了したら、コネクションをクローズ
J2EEサーバからMySQLの利用するには
コネクション
JDBC API Connector/J
コネクション
JDBC API Connector/J
コネクション
JDBC API Connector/J
コネクションプール
コネクションプール
コネクションプール
コネクションプール
MySQL
JNDI
Java
アプリケーション
(JSP/Servlet..etc)
J2EEサーバー
設定ファイル
JDBCドライバライブラリ
(Connector/Jのjar)
DataSource
JDBC API Connector/J 1. DataSourceを検索 2. コネクションを要求 コネクションを作成 3. SQL文送信 準備1. JDBCドライバをインス トール 準備2. DataSource/コネクショ ンプールの設定 3. SQL文送信 接続 接続 接続 4. クローズConnector/J のダウンロード
•
http://www.mysql.com/
•
Developer Zone
•
Downloads
•
Drivers and Connectors
•
MySQL Connector/J 5.0
[直接のURL]
http://dev.mysql.com/downloads/connector/j/5.0.html
•
Source and Binaries (zip)
•
Download をクリックしてダウンロードを開始
mysql-connector-java-5.0.3.zip
/tmpディレクトリ
ディレクトリ
ディレクトリに
ディレクトリ
に
に
にダウンロード
ダウンロード
ダウンロード
ダウンロードしたこととし
したこととし、
したこととし
したこととし
、
、展開
、
展開
展開
展開しておきます
しておきます
しておきます
しておきます。
。
。
。
$ cd /tmp
TomcatからMySQLの利用するには
コネクション
JDBC API Connector/J
コネクション
JDBC API Connector/J
コネクション
JDBC API Connector/J
コネクションプール
コネクションプール
コネクションプール
コネクションプール
MySQL
JNDI
Java
アプリケーション
(JSP/Servlet..etc)
Tomcat
server.xml
Connector/J の
jarファイル
DataSource
JDBC API Connector/J 1. DataSourceを検索 2. コネクションを要求 コネクションを作成 3. SQL文送信 準備1. Connector/Jを インストール 準備2. DataSource/コネクショ ンプールの設定 3. SQL文送信 接続 接続 接続 4. クローズTomcat
•
前提
−
Tomcat 5.5.17 が $CATALINA_HOME で設定されたディレクトリにイ
ンストールされているものとします。
•
CATALINA_HOME=/usr/local/tomcat/apache-tomcat-5.5.17
[Tomcatの
の
の起動
の
起動
起動]
起動
$ cd $CATALINA_HOME/bin
$ ./startup.sh
[Tomcatの
の
の停止
の
停止
停止]
停止
$ cd $CATALINA_HOME/bin
$ ./shutdown.sh
[起動確認
起動確認
起動確認]
起動確認
ブラウザで、http://<host_name>:8080/ にアクセス
−
予めTomcat自体が正しく起動するか確認しておいて下さい。
Tomcat:
Connector/J のインストール
$ cp ¥
> /tmp/mysql-connector-java-5.0.3/mysql-connector-java-5.0.3-bin.jar ¥
> $CATALINA_HOME/common/lib/
•
Connector/J をTomcatにインストールします。
−
mysql-connector-java-5.0.3-bin.jar を
$CATALINA_HOME/common/lib ディレクトリにコピー
Tomcat:
DataSource/コネクションプールの設定
<Host name=“localhost” appBase=“webapps“ ...>
<Context path=“” docBase=“ROOT“
debug=”5” reloadable=“true” crossContext=“true”>
<Resource
name=“jdbc/MySqlDS” auth=“Container“
type=”javax.sql.DataSource“
initialSize=”3“
maxActive=”10” maxIdle=“5” maxWait=“10000“
username="dbuser" password="dbpass“
driverClassName="com.mysql.jdbc.Driver“
url="jdbc:mysql://localhost:3306/mydb?characterEncoding=MS932"/>
</Context>
</Host>
•
$CATALINA_HOME/conf/server.xml を編集します
−
<Host>要素の中に、次のような<Context>要素を追加します。
追加
追加
追加
追加
Tomcat:
ご注意
•
以下の変更をTomcatに反映させるためには、Tomcatを
再起動する必要があります
−
Connector/J のインストール
−
server.xml を編集してDataSource/コネクションプールの設定
[Tomcatの
の
の停止
の
停止
停止]
停止
$ cd $CATALINA_HOME/bin
$ ./shutdown.sh
[Tomcatの
の
の起動
の
起動
起動]
起動
$ cd $CATALINA_HOME/bin
$ ./startup.sh
Tomcat:
サンプルアプリケーション(1/2)
•
list.jsp : mytable01テーブルのすべてのデータを表示
<%@page contentType="text/html; charset=Windows-31J"%> <%@page import="java.sql.*"%> <%@page import="javax.sql.*"%> <%@page import="javax.naming.*"%> <html><body> <h3>Server Info</h3> <ul>
<li>J2EE Server : <%= application.getServletContextName() %></li> <li>Servlet Container : <%= application.getServerInfo() %></li> <%
String DS_NAME;
if (application.getServletContextName().indexOf("Tomcat") > 0) {
DS_NAME="java:comp/env/jdbc/MySqlDS"; //For Tomcat } else {
DS_NAME="java:MySqlDS"; //For JBossAS }
Connection conn = null; Statement stmt = null; try {
Context ctx = new InitialContext();
DataSource ds = (DataSource)ctx.lookup(DS_NAME); conn = ds.getConnection();
DatabaseMetaData md = conn.getMetaData();
out.println("<li>Database : " + md.getDatabaseProductName() + " "
+ md.getDatabaseProductVersion() + "</li>"); out.println("<li>JDBC Driver : " + md.getDriverName() + " "
DataSourceの
JNDI名を設定
DataSourceを検索
DataSourceからコネ
クションを取得
Tomcat:
サンプルアプリケーション(2/2)
out.println("<h3>SELECT * FROM mytable01;</h3>");
stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM mytable01");
out.println("<table border=¥"1¥">");
out.println("<tr><td>id</td><td>last_name</td><td>first_name</td></tr>"); while(rs.next() != false) {
int id = rs.getInt(1);
String last_name = rs.getString(2); String first_name = rs.getString(3); out.println("<tr><td>" + id + "</td>" +
"<td>" + last_name + "</td>" +
"<td>" + first_name + "</td></tr>"); }
out.println("</table>");
} catch(NamingException ne) { ne.printStackTrace(); } catch(SQLException se) { se.printStackTrace(); } finally {
try {
if (stmt != null) { stmt.close(); }
} catch(SQLException se) { se.printStackTrace(); } try {
if (conn != null) { conn.close(); }
} catch(SQLException se) { se.printStackTrace(); } } //finally %> </body>
コネクションを経由で
SQL文を送信
コネクションをクローズ
Tomcat:
サンプルアプリケーションのデプロイ
$ cp /tmp/list.jsp $CATALINA_HOME/webapps/ROOT/
•
list.jsp を Tomcat の ROOTアプリケーションにデプロ
イします。
−
list.jsp を $CATALINA_HOME/webapps/ROOT/ にコ
ピー
Tomcat:
サンプルアプリケーションの実行
•
Webブラウザで次のURLにアクセスします
[Tomcatの
の
の
の起動
起動
起動
起動]
$ cd $CATALINA_HOME/bin
$ ./startup.sh
もしTomcatが停止中の場合は
起動してください。
http://<host_name>:8080/list.jsp
JBossASからMySQLの利用するには
コネクション
JDBC API Connector/J
コネクション
JDBC API Connector/J
コネクション
JDBC API Connector/J
コネクションプール
コネクションプール
コネクションプール
コネクションプール
MySQL
JNDI
Java
アプリケーション
(JSP/Servlet..etc)
JBossAS
mysql-ds.xml
Connector/J の
jarファイル
DataSource
JDBC API Connector/J 1. DataSourceを検索 2. コネクションを要求 コネクションを作成 3. SQL文送信 準備1. Connector/Jを インストール 準備2. DataSource/コネクショ ンプールの設定 3. SQL文送信 接続 接続 接続 4. クローズTomcat
(Servletコンテナ)
JBossAS
•
前提
−
JBossAS 4.0.4.GA が $JBOSS_HOME で設定されたディレクトリにイ
ンストールされているものとします。
•
JBOSS_HOME=/usr/local/jboss/jboss-4.0.4.GA
[JBossASの
の
の
の起動
起動
起動
起動]
$ cd $JBOSS_HOME/bin
$ ./run.sh
[JBossの
の
の
の停止
停止
停止
停止]
(起動したターミナルで) Ctrl+C
もしくは、別ターミナルで、
$ cd $JBOSS_HOME/bin
$ ./shutdown.sh
[起動確認
起動確認
起動確認]
起動確認
ブラウザで、http://<host_name>:8080/ にアクセス
−
予めJBossAS自体が正しく起動するか確認しておいて下さい。
JBossAS:
Connector/J のインストール
$ cp ¥
> /tmp/mysql-connector-java-5.0.3/mysql-connector-java-5.0.3-bin.jar ¥
> $JBOSS_HOME/server/default/lib/
•
Connector/J をJBossASにインストールします。
−
mysql-connector-java-5.0.3-bin.jar を
$JBOSS_HOME/server/default/lib ディレクトリにコピー
JBossAS:
ご注意
•
以下の変更をJBossASに反映させるためには、
JBossASをを再起動する必要があります
−
Connector/J のインストール
[JBossASの
の
の停止
の
停止
停止]
停止
(起動したターミナルで)Ctrl+C
もしくは、別ターミナルで、
$ cd $JBOSS_HOME/bin
$ ./shutdown.sh
[JBossASの
の
の起動
の
起動
起動]
起動
$ cd $JBOSS_HOME/bin
$ ./run.sh
JBossAS:
DataSource/コネクションプールの設定
$ cd $JBOSS_HOME/docs/examples/jca
$ cp mysql-ds.xml mysql-ds.xml.org
$ vi mysql-ds.xml
...
<datasources>
<local-tx-datasource>
<jndi-name>MySqlDS</jndi-name>
<connection-url>
jdbc:mysql://localhost:3306/mydb
</connection-url>
<driver-class>com.mysql.jdbc.Driver</driver-class>
<user-name>
dbuser
</user-name>
<password>
dbpass
</password>
...
</datasources>
$ cp mysql-ds.xml $JBOSS_HOME/server/default/deploy/
•
JBossASをインストールすると、MySQL用のDataSource設定ファイルのサ
ンプルもインストールされます
−
$JBOSS_HOME/docs/examples/jca/mysql-ds.xml
•
DataSource/コネクションプールを有効にするには、このサンプル設定ファ
イルを編集して、JBossASにデプロイします。
JBossAS:
サンプルアプリケーション(1/2)
•
list.jsp : mytable01テーブルのすべてのデータを表示
<%@page contentType="text/html; charset=Windows-31J"%> <%@page import="java.sql.*"%> <%@page import="javax.sql.*"%> <%@page import="javax.naming.*"%> <html><body> <h3>Server Info</h3> <ul>
<li>J2EE Server : <%= application.getServletContextName() %></li> <li>Servlet Container : <%= application.getServerInfo() %></li> <%
String DS_NAME;
if (application.getServletContextName().indexOf("Tomcat") > 0) { DS_NAME="java:comp/env/jdbc/MySqlDS"; //For Tomcat
} else {
DS_NAME="java:MySqlDS"; //For JBossAS }
Connection conn = null; Statement stmt = null; try {
Context ctx = new InitialContext();
DataSource ds = (DataSource)ctx.lookup(DS_NAME); conn = ds.getConnection(); DatabaseMetaData md = conn.getMetaData(); out.println("<li>Database : " + md.getDatabaseProductName() + " "
DataSourceの
JNDI名を設定
DataSourceを検索
DataSourceからコネ
クションを取得
JBossAS:
サンプルアプリケーション(2/2)
out.println("<h3>SELECT * FROM mytable01;</h3>");
stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM mytable01");
out.println("<table border=¥"1¥">");
out.println("<tr><td>id</td><td>last_name</td><td>first_name</td></tr>"); while(rs.next() != false) {
int id = rs.getInt(1);
String last_name = rs.getString(2); String first_name = rs.getString(3); out.println("<tr><td>" + id + "</td>" +
"<td>" + last_name + "</td>" +
"<td>" + first_name + "</td></tr>"); }
out.println("</table>");
} catch(NamingException ne) { ne.printStackTrace(); } catch(SQLException se) { se.printStackTrace(); } finally {
try {
if (stmt != null) { stmt.close(); }
} catch(SQLException se) { se.printStackTrace(); } try {
if (conn != null) { conn.close(); }
} catch(SQLException se) { se.printStackTrace(); } } //finally %> </body> </html>