Tomcat 5.0.* 系及び 5.5.* 系での DataSource ( データソース ) の利用
- Administretion Tool 編-
技術情報 TOP へ

本ページでの使用環境
OS:Windows XP SP 2 ( Linux 系 OS の場合も本ページと手順は同様です。 )
Java:JDK 5.0 UPDATE 8
Tomcat:5.0.28 ( もしくは 5.5.20 )

ここでは、JDK 5.0 UPDATE 8 、Tocmat 5.0.28 ( もしくは 5.5.20 ) がインストールされていることを前提として説明いたします。 これらのインストールについては下記のページを参照ください。

JDK のインストール -Windows 編-

● Tomcat 5.0.* 系の場合
Tomcat 5.0.* 系のインストール - Windows 編 ( exe , zip ファイル ) -
* ここでは zip ファイルを使用して C:\jakarta-tomcat-5.0.28 に Tomcat をインストールした前提とします。
CATALINA_HOME は、C:\jakarta-tomcat-5.0.28 です。
( exe ファイルを使用してインストールした場合も本ページの手順で作成可能です。 )

● Tomcat 5.5.* 系の場合
Tomcat 5.5.* 系のインストール - Windows 編 ( exe , zip ファイル ) -
* ここでは zip ファイルを使用して C:\apache-tomcat-5.5.20 に Tomcat をインストールした前提とします。
CATALINA_HOME は、C:\apache-tomcat-5.5.20 です。
( exe ファイルを使用してインストールした場合も本ページの手順で作成可能です。 )

データソースを利用する対象の Web アプリケーションがすでに存在し、利用可能である前提で説明しますので、 まだ Web アプリケーションを作成していない場合は、 以下のページを参考にデータソースを利用する対象の Web アプリケーションを作成してください。

Eclipce を使用した簡単な Java サーブレットの作成

ここでは、データソースを利用する対象の Web アプリケーションのコンテキストパスを「/HelloWebApp」 とします。


以下、Tomcat Web Server Administretion Tool を使用してデータソース ( コネクションプール ) を作成し、簡単なプログラムから利用してみます。




( 1 ) Tomcat の起動

ここでは、Tomcat Web Server Administretion Tool を使用してデータソースを作成してみます。

まず、現在、使用している環境で Tomcat Web Server Administretion Tool が使用できるか否か確認してください。

Tomcat 5.0.* 系を使用している場合は、ユーザやパスワード設定されているか否か。

( CATALINA_HOME/conf/tomcat-users.xml にユーザ、パスワード、ロールを設定。
Windows exe ファイルからインストールしている場合はインストール時に設定していると思います。 )

Tomcat 5.5.* 系を使用している場合は、Tomcat Web Server Administretion Tool がインストールされているか確認してください。

Tomcat Web Server Administretion Tool でのユーザやパスワード設定及び
Tomcat 5.5.* 系の Tomcat Web Server Administretion Tool のインストールについては、
以下のページを参考にしてください。

Tomcat 5.5.* 系の Administration Tool のインストール -Windows 編-

Tomcat 5.5.* 系の Administration Tool のインストール -Linux 編-


Tomcat Web Server Administretion Tool が使用できる環境を確認後、
Tomcat を起動します。




( 2 ) Tomcat Web Server Administretion Tool の起動

下記のアドレスにブラウザでアクセスします。

< http://サーバ名:8080/admin/index.jsp >

以下の画面が表示されますので、[ユーザ名]、 [パスワード] を入力しログインしてください。




* Tomcat 5.0.* 系でWindwos exe ファイルを使用している場合、インストール時に指定した [ユーザ名] [パスワード]

上記以外では、CATALINA_HOME/conf/tomcat-users.xml に設定されている [ユーザ名] [パスワード] です。




( 3 ) データソースの設定

ログイン後、以下の画面が表示されます。


左側の画面で以下をクリックします。

[ Tomcat Server ]
 - [サービス ( Catalina ) ] - [ホスト ( localhosst ) ]
  - [ コンテキスト ( /HelloWebApp ) ]
    - [ リソース ]
      - [ データソース ]



右画面の [ Data Source Actions ] リストボックスで「新しいデータソースの作成」を選択します。



[ 新しいデータソースの作成 ] 画面が表示されますので、環境に合わせて各値を入力します。

入力例 1 :Oracle の場合 ( thin ドライバ使用 ) 
JNDI名:jdbc/oracle データソースURL: jdbc:oracle:thin:@192.168.0.123:1521:s920 JDBCドライバクラス: oracle.jdbc.driver.OracleDriver ユーザ名: scott パスワード: tiger 有効な最大接続数: 4 ( デフォルト値 ) アイドル状態の最大接続数: 2 ( デフォルト値 ) アイドル状態の最大接続数: 5000 ( デフォルト値 )
入力例 2 :PosgreSQL の場合
JNDI名:jdbc/postgres データソースURL: jdbc:postgresql://192.168.0.123:5432/white JDBCドライバクラス: org.postgresql.Driver ユーザ名: postgres パスワード: postgres 有効な最大接続数: 4 ( デフォルト値 ) アイドル状態の最大接続数: 2 ( デフォルト値 ) アイドル状態の最大接続数: 5000 ( デフォルト値 )
ここでは、上記の簡単な設定しか行いませんが、 詳細な設定は Tomcat 5.0.* 系では Context ファイル を使用して、5.5.* 系では server.xml を使用して 設定します。

以下のページも参照ください。

Tomcat 5.0.* 系での DataSource ( データソース ) の利用 - Context ファイル 編-

Tomcat 5.5.* 系での DataSource ( データソース ) の利用 - server.xml 編-


ここでは、入力例 1 :Oracle を使用してみます。


値を入力したら、[ 保存 ] ボタン及び [ 設定を反映 ] ボタンをクリックします。





( 4 ) データソース利用プログラムの作成

HelloWebApp 内でデータソースを利用するプログラムの作成を行います。

SimpleServlet.java
package hello;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.servlet.ServletException;
import javax.servlet.http.*;
import javax.sql.DataSource;

public class SimpleServlet extends HttpServlet {
	
	protected DataSource baseDataSource = null;
	/* Oracle の場合 */
	protected String jndiName = "java:comp/env/jdbc/oracle";
	//protected String jndiName = "java:comp/env/jdbc/postgres";

	
	public void doGet(HttpServletRequest request, 
            HttpServletResponse response) 
                throws ServletException, IOException {
		
		Connection conn = null;
		Statement stmt = null;
		ResultSet rset = null; 
		String rec = null;
		
		try {
		    
		    /* Connectionの取得 */
		    conn = baseDataSource.getConnection();
		    
		    /* Statementの作成 */
		    stmt = conn.createStatement();

		    /* SQL の実行、Resultsetの取得 */
		    rset = stmt.executeQuery("select EMPNO from EMP");
		    
		    response.setContentType("text/html; charset=Shift_JIS");

		    /* HTML 出力用 PrintWriter */
		    PrintWriter out = response.getWriter();
		    
		    /* HTML出力 */
		    out.println("<html>");
		    out.println("<head>");
		    out.println("<title>Data Source</title>");
		    out.println("</head>"); 
		    out.println("<body>");
		    out.println("select EMPNO from EMP<BR>");
		    out.println("<font size=\"2\">");
		    /* 取得したデータを表示します。 */
		    while (rset.next()) {
		    	out.println(rset.getString(1));	
		    	out.println("<BR>");
		    }
		    out.println("</font>");
		    
		    out.println("</body>");
		    out.println("</html>");
		    out.close();
		    
		    
		} catch (Exception e) {	
		    e.printStackTrace();
		}finally{		    
		try {
		    /* クローズ処理 */
		    if(conn != null){
		      conn.close();
		      conn = null;
		    }
		    if(stmt != null){
		      stmt.close();	
		      stmt = null;
		    }		    
		    if(rset != null){
		      rset.close();
		      rset = null;
		    }
		} catch (SQLException e) {		    
		    e.printStackTrace();
		}
	 }	
	}	
	public void init() throws ServletException {
		super.init();
		try {			 
		      getDataSource();
		    } catch (NamingException e) {
		      e.printStackTrace();
		}	
	}	
	
	private synchronized void getDataSource() throws NamingException{
		if (baseDataSource == null) {
		      Context initialContext = new InitialContext();
		      baseDataSource = (DataSource) initialContext.lookup(jndiName);
		}
	}
}
上記のプログラムの簡単な説明

ここでは、データソースの取得に init メソッドを利用します。

init メソッドとは、対象のサーブレットが呼び出された時 ( 実行時 ) に一度だけ実行されます。 
初期化処理などによく利用されるメソッドです。

データソースの取得には比較的処理時間がかかるため、init メソッドなどの初期化処理で
一度だけ行うようにします。

データソースの取得は、以下のプログラムで行います。

Context initialContext = new InitialContext();
baseDataSource = (DataSource) initialContext.lookup(jndiName);

init メソッド実行時にインスタンス変数 baseDataSource に対して initialContext.lookup(jndiName) 
で取得した DataSource  を代入するメソッドを呼び出しています。

インスタンス変数 baseDataSource は他のスレッド ( リクエスト ) からも利用されます。

インスタンス変数やクラス変数に代入しておければオブジェクトは保持されるため、
再度 DataSource を取得する必要はなく、DataSource は再利用可能となります。
( 但し、インスタンス変数やクラス変数はスレッドアンセーフです。代入処理には注意が必要で、
ここでは、念のため synchronized を使用しています。 )

但し、上記のプログラムはあくまで DataSource を取得するサンプルとなります。

実際にシステム開発などで DataSource を利用する場合は、別の DataSource 取得、保持クラスを
作成したり、それらを行う親クラスなどを作成し、サブクラスから利用するなどが一般的です。
		



( 5 ) ビルドとデプロイ

上述 ( 4 ) のプログラムをビルド、デプロイします。



( 6 ) JDBC ドライバの配置

JDBC ドライバを CATALINA_HOME/common/lib/ に配置します。

以下の例は Oracle の場合です。





( 6 ) Tomcat の再起動

Tomcat の再起動を行います。



( 6 ) コネクションの確認

netstat コマンド等でコネクションの確認を行います。

例:Oracle の場合 ( PostgreSQL の場合は 5432 )
# netstat -na| findstr 1521




( 6 ) 動作確認

下記のアドレスにブラウザでアクセスします。
< http://localhost:8080/HelloWebApp/SimpleServlet >

以下の画面が表示されれば成功です。

データソースから取得したコネクションからデータベースへアクセスしています。





技術情報 TOP へ


Google
WWW を検索 whitemark.co.jp を検索

Copyright © 2006 by WhiteMark, All rights Reserved. Last Modified: 2006/05