MySQL 5.0 JDBC ドライバ基礎 Tomcat/JBossAS からの からの接続方法 日本ヒューレットパッカード株式会社オープンソース コンピテンシ センター 2006 年 8 月 31 日 2006 Hewlett-Packard Development Company, L.P. The information contained herein is subject to change without notice
目次 JDBC J2EEサーバからMySQLへの接続方法 Tomcat JBossAS 付録 Javaのインストール手順 Tomcatのインストール手順 JBossASのインストール手順 2 平成 18 年 9 月 5 日
概観 : J2EE サーバから MySQL の利用 JNDI JDBC ドライバライブラリ (Connector/J の jar) 準備 1. JDBC ドライバをインストール DataSource 設定ファイル 準備 2. DataSource/ コネクションプールの設定 1. DataSource を検索 JDBC API Connector/J コネクションを作成 2. コネクションを要求 Java アプリケーション (JSP/Servlet..etc) 3. SQL 文送信 4. クローズ コネクションプールコネクション JDBC API Connector/J コネクション 3. SQL 文送信接続 MySQL JDBC API Connector/J 接続 J2EE サーバー コネクション JDBC API Connector/J 接続 3 平成 18 年 9 月 5 日
目次 JDBC J2EE サーバから MySQL への接続方法 Tomcat JBossAS 付録 Javaのインストール手順 Tomcatのインストール手順 JBossASのインストール手順 4 平成 18 年 9 月 5 日
まず JDBC Java アプリケーションから RDBMS に接続するには JDBC を使う JDBCとはJavaとRDBMSを繋ぐ仕組み Javaの世界 Java アプリケーション JDBC DB Tomcat/JBossASは一種のJavaアプリケーション MySQLはRDBMS Tomcat/JBossAS から MySQLに接続接続するには JDBCを使用使用する 5 平成 18 年 9 月 5 日
JDBC/JDBC ドライバとは? JDBCとは JavaからRDBMSへの接続やSQL 文を処理するための API インターフェース つまり 仕様仕様 JDBC ドライバとは JDBCで決められた インターフェース を特定のRDBMS 用向けに実装実装したもの 通常は RDBMS ベンダが実装 提供する Javaの世界 Java アプリケーション JDBC API 仕様 JDBC ドライバ実装 DB JDBC のメリット Java アプリケーション側から 特定の RDBMS を意識する必要がなくなる Java アプリケーションを変更せずに RDBMS を変更することができる 6 平成 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 と 商用 のデュアルライセンス Javaの世界 Java アプリケーション JDBC API Connector/J MySQL 7 平成 18 年 9 月 5 日
JDBC を使った DB 接続の実際 : コネクション 実際に Java アプリケーションから JDBC を使用して RDBMS にアクセスするには 1. Javaアプリケーションが DataSourceに対して コネクション (java.sql.connection) を要求 コネクションとは実際にRDBMSに接続するJavaオブジェクト 2. DataSourceがコネクションコネクションを作成 この時点でコネクションがRDBMSへ接続する 3. Javaアプリケーションはコネクションコネクションを利用利用してして RDBMSにアクセス 4. RDBMSへのアクセス終了後 コネクションコネクションをクローズクローズし破棄 コネクションの作成作成 破棄破棄にコストコストが掛かる ( 処理が重い ) Java アプリケーションから RDBMSへアクセスアクセスするたびにするたびにコネクションコネクションの作成作成 破棄破棄を行うことはうことはパフォーマンスパフォーマンス低下低下の原因原因となる DataSource JDBC API JDBC ドライバ 1. コネクションを要求 2. コネクション作成 8 平成 18 年 9 月 5 日 Java アプリケーション 3. SQL 文送信 コネクション JDBC API JDBCドライバ 4. クローズ 4. コネクション破棄 3. SQL 文送信 2. 接続 DB
JDBC を使った DB 接続の実際 : コネクションプール そこでコネクションプール 複数のコネクションコネクションを予め作成作成して貯めておく JavaアプリケーションがRDBMSにアクセスする際 コネクションプールからコネクションを取得する ( コネクションは作成作成しない ) RDBMSに対して処理が終了すると Javaアプリケーションはコネクションをクローズし コネクションプールに返却される ( コネクションは破棄破棄しない ) コネクションプールに返却されたコネクションは別のJavaアプリケーションによって再利用再利用される DataSource JDBC API Java アプリケーション JDBC ドライバ 1. コネクションを作成しておく コネクションプール コネクション JDBC API JDBC ドライバ 2. コネクションを要求 DB 3. SQL 文送信 4. クローズ コネクション JDBC API JDBC ドライバ コネクション JDBC API JDBC ドライバ 3. SQL 文送信 1. 接続 1. 接続 1. 接続 9 平成 18 年 9 月 5 日
目次 JDBC J2EE サーバから MySQL への接続方法 Tomcat JBossAS 付録 Javaのインストール手順 Tomcatのインストール手順 JBossASのインストール手順 10 平成 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 処理が終了したら コネクションをクローズ 11 平成 18 年 9 月 5 日
J2EE サーバから MySQL の利用するには JNDI JDBC ドライバライブラリ (Connector/J の jar) 準備 1. JDBC ドライバをインストール DataSource 設定ファイル 準備 2. DataSource/ コネクションプールの設定 1. DataSource を検索 JDBC API Connector/J コネクションを作成 2. コネクションを要求 Java アプリケーション (JSP/Servlet..etc) 3. SQL 文送信 4. クローズ コネクションプールコネクション JDBC API Connector/J コネクション 3. SQL 文送信接続 MySQL JDBC API Connector/J 接続 J2EE サーバー コネクション JDBC API Connector/J 接続 12 平成 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 13 平成 18 年 9 月 5 日
Tomcat から MySQL の利用するには JNDI Connector/J の jar ファイル 準備 1. Connector/J をインストール DataSource server.xml 準備 2. DataSource/ コネクションプールの設定 1. DataSource を検索 JDBC API Connector/J コネクションを作成 2. コネクションを要求 Java アプリケーション (JSP/Servlet..etc) 3. SQL 文送信 4. クローズ コネクションプールコネクション JDBC API Connector/J コネクション 3. SQL 文送信接続 MySQL JDBC API Connector/J 接続 Tomcat コネクション JDBC API Connector/J 接続 14 平成 18 年 9 月 5 日
Tomcat 前提 Tomcat 5.5.17 が $CATALINA_HOME で設定されたディレクトリにインストールされているものとします CATALINA_HOME=/usr/local/tomcat/apache-tomcat-5.5.17 予め Tomcat 自体が正しく起動するか確認しておいて下さい [Tomcatの起動 ] $ cd $CATALINA_HOME/bin $./startup.sh [Tomcatの停止 ] $ cd $CATALINA_HOME/bin $./shutdown.sh [ 起動確認 ] ブラウザで http://<host_name>:8080/ にアクセス 15 平成 18 年 9 月 5 日
Tomcat: Connector/J のインストール Connector/J を Tomcat にインストールします mysql-connector-java-5.0.3-bin.jar を $CATALINA_HOME/common/lib ディレクトリにコピー $ cp > /tmp/mysql-connector-java-5.0.3/mysql-connector-java-5.0.3-bin.jar > $CATALINA_HOME/common/lib/ 16 平成 18 年 9 月 5 日
Tomcat: DataSource/ コネクションプールの設定 $CATALINA_HOME/conf/server.xml を編集します <Host> 要素の中に 次のような <Context> 要素を追加します <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> 17 平成 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 18 平成 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>"); 19 平成 18 年 9 月 5 日 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> </html> コネクションを経由で SQL 文を送信 コネクションをクローズ 20 平成 18 年 9 月 5 日
Tomcat: サンプルアプリケーションのデプロイ list.jsp を Tomcat の ROOT アプリケーションにデプロイします list.jsp を $CATALINA_HOME/webapps/ROOT/ にコピー $ cp /tmp/list.jsp $CATALINA_HOME/webapps/ROOT/ 21 平成 18 年 9 月 5 日
Tomcat: サンプルアプリケーションの実行 Web ブラウザで次の URL にアクセスします http://<host_name>:8080/list.jsp もし Tomcat が停止中の場合は起動してください [Tomcatの起動 ] $ cd $CATALINA_HOME/bin $./startup.sh 22 平成 18 年 9 月 5 日
JBossAS から MySQL の利用するには JNDI Connector/J の jar ファイル 準備 1. Connector/J をインストール DataSource mysql-ds.xml 準備 2. DataSource/ コネクションプールの設定 1. DataSource を検索 JDBC API Connector/J コネクションを作成 2. コネクションを要求 Java アプリケーション (JSP/Servlet..etc) 3. SQL 文送信 4. クローズ コネクションプールコネクション JDBC API Connector/J コネクション 3. SQL 文送信接続 MySQL Tomcat (Servlet コンテナ ) JBossAS JDBC API Connector/J コネクション JDBC API Connector/J 接続接続 23 平成 18 年 9 月 5 日
JBossAS 前提 JBossAS 4.0.4.GA が $JBOSS_HOME で設定されたディレクトリにインストールされているものとします JBOSS_HOME=/usr/local/jboss/jboss-4.0.4.GA 予め JBossAS 自体が正しく起動するか確認しておいて下さい [JBossASの起動 ] $ cd $JBOSS_HOME/bin $./run.sh [JBossの停止 ] ( 起動したターミナルで ) Ctrl+C もしくは 別ターミナルで $ cd $JBOSS_HOME/bin $./shutdown.sh [ 起動確認 ] ブラウザで http://<host_name>:8080/ にアクセス 24 平成 18 年 9 月 5 日
JBossAS: Connector/J のインストール Connector/J を JBossAS にインストールします mysql-connector-java-5.0.3-bin.jar を $JBOSS_HOME/server/default/lib ディレクトリにコピー $ cp > /tmp/mysql-connector-java-5.0.3/mysql-connector-java-5.0.3-bin.jar > $JBOSS_HOME/server/default/lib/ 25 平成 18 年 9 月 5 日
JBossAS: ご注意 以下の変更を JBossAS に反映させるためには JBossAS をを再起動する必要があります Connector/J のインストール [JBossASの停止 ] ( 起動したターミナルで )Ctrl+C もしくは 別ターミナルで $ cd $JBOSS_HOME/bin $./shutdown.sh [JBossASの起動 ] $ cd $JBOSS_HOME/bin $./run.sh 26 平成 18 年 9 月 5 日
JBossAS: DataSource/ コネクションプールの設定 JBossAS をインストールすると MySQL 用の DataSource 設定ファイルのサンプルもインストールされます $JBOSS_HOME/docs/examples/jca/mysql-ds.xml DataSource/ コネクションプールを有効にするには このサンプル設定ファイルを編集して JBossAS にデプロイします $ 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/ 27 平成 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>"); 28 平成 18 年 9 月 5 日 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> コネクションを経由で SQL 文を送信 コネクションをクローズ 29 平成 18 年 9 月 5 日
JBossAS: サンプルアプリケーションのデプロイ list.jsp を JBossAS の ROOT アプリケーションにデプロイします list.jsp を $JBOSS_HOME/server/default/deploy/jbossweb/tomcat55.sar/ROO T.war/ にコピー $ cp /tmp/list.jsp > $JBOSS_HOME/server/default/deploy/jbossweb/tomcat55.sar/ROOT.war/ 30 平成 18 年 9 月 5 日
JBossAS: サンプルアプリケーションの実行 Web ブラウザで次の URL にアクセスします http://<host_name>:8080/list.jsp もし JBossAS が停止中の場合は起動してください [JBossASの起動 ] $ cd $JBOSS_HOME/bin $./run.sh 31 平成 18 年 9 月 5 日
Connector/J に関するドキュメント 基本情報 [ 英語 ] http://www.mysql.com/products/connector/j/ 技術情報 ( オンラインマニュアル ) [ 英語 ] http://dev.mysql.com/doc/refman/5.0/en/connector-j.html 32 平成 18 年 9 月 5 日
付録 Javaのインストール手順 Tomcatのインストール手順 JBossASのインストール手順 33 平成 18 年 9 月 5 日
Java のインストール手順 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 のインストール # cd /usr/local # sh /tmp/jdk-1_5_0_08-linux-i586.bin 34 平成 18 年 9 月 5 日
Tomcat のインストール手順 Tomcat のダウンロード http://tomcat.apache.org/ Download Tomcat 5.x Binary Distributions Core: zip を押すとダウンロード開始 apache-tomcat-5.5.17.zip ファイルがダウンロードされる /tpm 以下にダウンロードしたものとします 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 35 平成 18 年 9 月 5 日
JBossAS のインストール手順 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 のインストール # 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 36 平成 18 年 9 月 5 日
37 平成 18 年 9 月 5 日