© 2006 Hewlett-Packard Development Company, L.P.The information contained herein is subject to change without notice
MySQL 5.0MySQL 5.0MySQL 5.0MySQL 5.0 JDBCJDBCJDBCJDBCドライバドライバドライバドライバ基礎基礎基礎基礎
Tomcat/Tomcat/Tomcat/Tomcat/JBossASJBossASJBossASJBossASからのからのからのからの接続方法接続方法接続方法接続方法
日本ヒューレットパッカード株式会社
オープンソース・コンピテンシ・センター
2006年年年年8月月月月31日日日日
2 平成18年9月5日
目次
•JDBC
•J2EEサーバからMySQLへの接続方法−Tomcat
−JBossAS
•付録
−Javaのインストール手順
−Tomcatのインストール手順
−JBossASのインストール手順
3 平成18年9月5日
概観 : 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/J1. DataSourceを検索
2. コネクションを要求
コネクションを作成
3. SQL文送信
準備1. JDBCドライバをインストール
準備2. DataSource/コネクションプールの設定
3. SQL文送信
接続
接続
接続4. クローズ
4 平成18年9月5日
目次
•JDBC•J2EEサーバからMySQLへの接続方法
−Tomcat
−JBossAS
•付録
−Javaのインストール手順
−Tomcatのインストール手順
−JBossASのインストール手順
5 平成18年9月5日
DBJavaアプリケーション
Javaのののの世界世界世界世界
まずJDBC
• JavaアプリケーションからRDBMSに接続するにはJDBCを使う− JDBCとはJavaとRDBMSを繋ぐ仕組み
• Tomcat/JBossASは一種のJavaアプリケーション
• MySQLはRDBMS
JDBC
Tomcat/JBossASからからからからMySQLにににに接続接続接続接続するにはするにはするにはするには
JDBCをををを使用使用使用使用するするするする
6 平成18年9月5日
JDBC/JDBCドライバとは?
• JDBCとは、JavaからRDBMSへの接続やSQL文を処理するための「API」、「インターフェース」。つまり、仕様仕様仕様仕様。
• JDBCドライバドライバドライバドライバとは、JDBCで決められた「インターフェース」を特定のRDBMS用向けに実装実装実装実装したもの。−通常はRDBMSベンダが実装、提供する
DBJavaアプリケーション
JDBCAPI仕様仕様仕様仕様
Javaのののの世界世界世界世界
JDBCドライバ実装実装実装実装
• JDBCのメリット− Javaアプリケーション側から、特定のRDBMSを意識する必要がなくなる
− Javaアプリケーションを変更せずに、RDBMSを変更することができる
7 平成18年9月5日
Connector/J (こねくたー じぇい)
• MySQL用のJDBCドライバがConnector/J−MySQL AB(MySQL社)が提供
−最新公式版はConnector/J 5.0
− JDBC 3.0 仕様準拠
− Type 4 JDBCドライバ(Pure Javaで実装されている)
− もちろんオープンソース
− 「GPL」と「商用」のデュアルライセンス
MySQLJavaアプリケーション
JDBCAPI
Javaのののの世界世界世界世界
Connector/J
8 平成18年9月5日
JDBCを使ったDB接続の実際:コネクション
コネクション
JDBC API JDBCドライバ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へのアクセス終了後、コネクションコネクションコネクションコネクションををををクローズクローズクローズクローズしししし破棄破棄破棄破棄
2. 接続
3. SQL文送信
� コネクションコネクションコネクションコネクションのののの作成作成作成作成、、、、破棄破棄破棄破棄ににににコストコストコストコストがががが掛掛掛掛かるかるかるかる(処理処理処理処理がががが重重重重いいいい)− JavaアプリケーションアプリケーションアプリケーションアプリケーションからからからからRDBMSへへへへアクセスアクセスアクセスアクセスするたびにするたびにするたびにするたびにコネクションコネクションコネクションコネクションのののの作成作成作成作成、、、、破棄破棄破棄破棄をををを
行行行行うことはうことはうことはうことはパフォーマンスパフォーマンスパフォーマンスパフォーマンス低下低下低下低下のののの原因原因原因原因となるとなるとなるとなる
3. SQL文送信
4. クローズ 4. コネクション破棄
9 平成18年9月5日
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. SQL文送信
3. SQL文送信
4. クローズ
10 平成18年9月5日
目次
•JDBC
•J2EEサーバからMySQLへの接続方法−Tomcat
−JBossAS
•付録
−Javaのインストール手順
−Tomcatのインストール手順
−JBossASのインストール手順
11 平成18年9月5日
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処理が終了したら、コネクションをクローズ
12 平成18年9月5日
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/J1. DataSourceを検索
2. コネクションを要求
コネクションを作成
3. SQL文送信
準備1. JDBCドライバをインストール
準備2. DataSource/コネクションプールの設定
3. SQL文送信
接続
接続
接続4. クローズ
13 平成18年9月5日
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
$ jar xvf mysql-connector-java-5.0.3.zip
14 平成18年9月5日
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/J1. DataSourceを検索
2. コネクションを要求
コネクションを作成
3. SQL文送信
準備1. Connector/Jをインストール
準備2. DataSource/コネクションプールの設定
3. SQL文送信
接続
接続
接続4. クローズ
15 平成18年9月5日
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自体が正しく起動するか確認しておいて下さい。
16 平成18年9月5日
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 ディレクトリにコピー
17 平成18年9月5日
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>要素を追加します。
追加追加追加追加
18 平成18年9月5日
Tomcat:ご注意
•以下の変更をTomcatに反映させるためには、Tomcatを再起動する必要があります
−Connector/J のインストール−server.xml を編集してDataSource/コネクションプールの設定
[Tomcatのののの停止停止停止停止]$ cd $CATALINA_HOME/bin$ ./shutdown.sh
[Tomcatのののの起動起動起動起動]$ cd $CATALINA_HOME/bin$ ./startup.sh
19 平成18年9月5日
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() + " "
+ md.getDriverVersion() + "</li>");
out.println("</ul>");
DataSourceのJNDI名を設定
DataSourceを検索
DataSourceからコネクションを取得
20 平成18年9月5日
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>
</html>
コネクションを経由でSQL文を送信
コネクションをクローズ
21 平成18年9月5日
Tomcat:サンプルアプリケーションのデプロイ
$ cp /tmp/list.jsp $CATALINA_HOME/webapps/ROOT/
• list.jsp を Tomcat の ROOTアプリケーションにデプロイします。− list.jsp を $CATALINA_HOME/webapps/ROOT/ にコピー
22 平成18年9月5日
Tomcat:サンプルアプリケーションの実行
• Webブラウザで次のURLにアクセスします
[Tomcatのののの起動起動起動起動]$ cd $CATALINA_HOME/bin$ ./startup.sh
もしTomcatが停止中の場合は起動してください。
http://<host_name>:8080/list.jsp
23 平成18年9月5日
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/J1. DataSourceを検索
2. コネクションを要求
コネクションを作成
3. SQL文送信
準備1. Connector/Jをインストール
準備2. DataSource/コネクションプールの設定
3. SQL文送信
接続
接続
接続4. クローズ
Tomcat (Servletコンテナ)
24 平成18年9月5日
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自体が正しく起動するか確認しておいて下さい。
25 平成18年9月5日
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 ディレクトリにコピー
26 平成18年9月5日
JBossAS:ご注意
•以下の変更をJBossASに反映させるためには、JBossASをを再起動する必要があります
−Connector/J のインストール
[JBossASのののの停止停止停止停止](起動したターミナルで)Ctrl+Cもしくは、別ターミナルで、$ cd $JBOSS_HOME/bin$ ./shutdown.sh
[JBossASのののの起動起動起動起動]$ cd $JBOSS_HOME/bin$ ./run.sh
27 平成18年9月5日
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にデプロイします。
28 平成18年9月5日
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() + " "
+ md.getDatabaseProductVersion() + "</li>");
out.println("<li>JDBC Driver : " + md.getDriverName() + " "
+ md.getDriverVersion() + "</li>");
out.println("</ul>");
DataSourceのJNDI名を設定
DataSourceを検索
DataSourceからコネクションを取得
29 平成18年9月5日
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>
コネクションを経由でSQL文を送信
コネクションをクローズ
30 平成18年9月5日
JBossAS:サンプルアプリケーションのデプロイ
$ cp /tmp/list.jsp ¥
> $JBOSS_HOME/server/default/deploy/jbossweb/tomcat55.sar/ROOT.war/
• list.jsp を JBossASのROOTアプリケーションにデプロイします。− list.jsp を
$JBOSS_HOME/server/default/deploy/jbossweb/tomcat55.sar/ROOT.war/ にコピー
31 平成18年9月5日
JBossAS:サンプルアプリケーションの実行
• Webブラウザで次のURLにアクセスします
[JBossASのののの起動起動起動起動]$ cd $JBOSS_HOME/bin$ ./run.sh
もしJBossASが停止中の場合は起動してください。
http://<host_name>:8080/list.jsp
32 平成18年9月5日
Connector/J に関するドキュメント
•基本情報− [英語] http://www.mysql.com/products/connector/j/
•技術情報(オンラインマニュアル)− [英語] http://dev.mysql.com/doc/refman/5.0/en/connector-j.html
33 平成18年9月5日
付録
•Javaのインストール手順
•Tomcatのインストール手順
•JBossASのインストール手順
34 平成18年9月5日
Javaのインストール手順
# cd /usr/local
# sh /tmp/jdk-1_5_0_08-linux-i586.bin
• JDK 5.0 のダウンロード− http://java.sun.com/− Popular Downloads: − Java SE− JDK 5.0 Update 8− Downloads− “Accept License Agreement”を押す− “Linux self-extraction file”を押しすとダウンロード開始− “jdk-1_5_0_08-linux-i586.bin” ファイル がダウンロードされる− /tpm 以下にダウンロードしたものとします
• JDK 5.0 のインストール
35 平成18年9月5日
Tomcatのインストール手順
# mkdir /usr/local/tomcat
# cd /usr/local/tomat
# jar xvf /tmp/apache-tomcat-5.5.17.zip
# chown -R <user>:<group> apache-tomcat-5.5.17
$ export JAVA_HOME=/usr/local/jdk1.5.0.7
$ export CATALINA_HOME=/usr/local/tomcat/apache-tomcat-5.5.17
$ cd $CATALINA_HOME/bin
$ chmod +x *.sh
• Tomcat のダウンロード− http://tomcat.apache.org/− Download− Tomcat 5.x− Binary Distributions− Core:− “zip” を押すとダウンロード開始− “apache-tomcat-5.5.17.zip” ファイル がダウンロードされる− /tpm 以下にダウンロードしたものとします
• Tomcat のインストール
36 平成18年9月5日
JBossASのインストール手順
# mkdir /usr/local/jboss
# cd /usr/local/jboss
# jar xvf /tmp/jboss-4.0.4.GA.zip
# chown -R <user>:<group> jboss-4.0.4.GA
$ export JAVA_HOME=/usr/local/jdk1.5.0.7
$ export JBOSS_HOME=/usr/local/jboss/jboss-4.0.4.GA
$ cd $JBOSS_HOME/bin
$ chmod +x *.sh
• JBossAS のダウンロード− http://www.jboss.org/− Downloads− JBoss Application Server � Download− “Version”カラムが”4.0.4”の行の”Download”をクリック− “jboss-4.0.4.GA.zip”をクリック− 任意のミラーサーバの行の”Download”をクリック− “jboss-4.0.4.GA.zip” ファイル がダウンロードされる− /tpm 以下にダウンロードしたものとします
• JBossAS のインストール
37 平成18年9月5日