2012年10月1日月曜日

CentOSでTomcatからDataSourceを利用してRDS(MySQL)に接続

スズキです。

RDSが起動済みで、セキュリティグループまわりも必要なポートに対しては
設定されている前提です。

まずはTomcatのインストールです。
# yum -y install java-1.7.0-openjdk tomcat6-webapps
# /etc/init.d/tomcat6 start
Starting tomcat6:                                          [  OK  ]

8080ポートにアクセスして、下記のように表示されればOKです。


次にJDBCドライバ(MySQL)のインストールです。
# yum -y install mysql-connector-java
# rpm -ql mysql-connector-java | grep jar
/usr/share/java/mysql-connector-java-5.1.17.jar
/usr/share/java/mysql-connector-java.jar
# cd /usr/share/java/tomcat6
# ln -s ../mysql-connector-java.jar mysql-connector-java.jar
Tomcatから利用するためにシンボリックリンクをはっているところがポイントです。

そしてデータソースの設定ですが、基本的に下記に従って設定しました。
Apache Tomcat 6.0 (6.0.35) - JNDI Datasource HOW-TO / MySQL DBCP Example
"context.xml"を配置する"META-INF"ディレクトリを作成します。
# cd /var/lib/tomcat6/webapps/ROOT/
# mkdir META-INF

"META-INF/context.xml"は下記の通りです。
<Context>
    <Resource
        name            = "jdbc/suz-mysql"
        auth            = "Container"
        type            = "javax.sql.DataSource"
        maxActive       = "100"
        maxIdle         = "30"
        maxWait         = "10000"
        username        = "suzuki"
        password        = "password"
        driverClassName = "com.mysql.jdbc.Driver"
        url             = "jdbc:mysql://suz-mysql.cpwbxg8dcrxi.ap-northeast-1.rds.amazonaws.com/suzuki"
    />
</Context>
"url"にRDS(MySQL)のエンドポイントを指定しておきます。

オーナーも調整しておきます。
# chown -R root.tomcat META-INF

"WEB-INF/web.xml"は下記の通りです。
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
   version="2.5">

  <display-name>Welcome to Tomcat</display-name>
  <description>Welcome to Tomcat</description>

  <resource-ref>
    <description>DB Connection</description>
    <res-ref-name>jdbc/suz-mysql</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
  </resource-ref>

</web-app>
"resource-ref"タグで利用するDataSourceを指定しておきます。

そして、TomcatをリスタートするとDataSource経由でRDS(MySQL)が
利用できるようになります。

下記のテストJSPで接続確認です。
<%@ page contentType="text/plain"
         import="javax.sql.*,javax.naming.*,java.sql.*" %>
<%
Context          context
    = new InitialContext();
DataSource       datasource 
    = (DataSource)context.lookup("java:comp/env/jdbc/suz-mysql");
Connection       connection
    = datasource.getConnection();
DatabaseMetaData metadata
    = connection.getMetaData();
out.println("DatabaseProductName: "
    + metadata.getDatabaseProductName());
out.println("DatabaseProductVersion: "
    + metadata.getDatabaseProductVersion());
out.println("DriverName: "
    + metadata.getDriverName());
out.println("DriverVersion: "
    + metadata.getDriverVersion());
out.println("URL: "
    + metadata.getURL());
out.println("UserName: "
    + metadata.getUserName());
connection.close();
%>

上記のJSPにアクセスして、次のように表示されれば、接続成功です。


DatabaseProductName: MySQL
DatabaseProductVersion: 5.5.27
DriverName: MySQL-AB JDBC Driver
DriverVersion: mysql-connector-java-5.1.17-SNAPSHOT ( Revision: ${bzr.revision-id} )
URL: jdbc:mysql://suz-mysql.cpwbxg8dcrxi.ap-northeast-1.rds.amazonaws.com/suzuki
UserName: suzuki@10.0.0.166

そして、RDSをフェイルオーバーしてみると...
--------
http://www.suz-lab.com

0 コメント: