Home > Tags > Tomcat

Tomcat

WTPのTomcat7.0でDataSource(PostgreSQL)からConnectionを取得する

コネクションプーリングをするために、DataSourceからコネクションを取得しようと思ったら、かなりハマってしまったので、備忘録です。

手順は以下。PostgreSQLの例ですが、大体どのDB製品でも同じだと思います。

  1. (サーバの)server.xmlにResourceを定義
  2. (アプリケーションの)web.xmlにresource-refを定義
  3. JDBCドライバを配備
  4. コネクション取得

(サーバの)server.xmlにResourceを定義

まずserver.xmlにResourceを定義します。WTPでサーバを動かしている場合は、以下のようにServersプロジェクト内にserver.xmlがあると思います。

server.xml
server.xml

この中にアプリケーションのContextタグがあると思うので、そこにResourceを追加する。
ここが、Tomcat 6.0と記述が異なっていたので、かなりハマってしまいました。しっかりマニュアルのほうを読まないといけませんね。

server.xml

<Context docBase="Sample" path="/Sample" reloadable="true" source="org.eclipse.jst.jee.server:Sample">
	<Resource name="jdbc/postgresql" auth="Container" type="javax.sql.DataSource"
		driverClassName="org.postgresql.Driver" url="jdbc:postgresql://localhost/SampleDB" username="postgres"
		password="xxxxxx" maxActive="20" maxIdle="10" maxWait="-1" />
</Context>

(アプリケーションの)web.xmlにresource-refを定義

次にアプリケーション内のweb.xmlにresource-refを定義します。サーバのweb.xmlではないので注意。

web.xml

<resource-ref>
	<res-ref-name>jdbc/postgresql</res-ref-name>
	<res-type>javax.sql.DataSource</res-type>
	<res-auth>Container</res-auth>
</resource-ref>

JDBCドライバを配備

WTPでサーバを起動している場合は、サーバプログラム本体のcommon/libにいくらjarを置いてもクラスパスには追加されません。
WTPでjarを追加するには以下のようにします。

プロジェクト・エクスプローラーを右クリック → 実行(実行構成) → クラスパス → ユーザー・エントリでjarを追加

コネクション取得

これで準備ができたので、実際にServletからコネクションを取得してみます。

SampleServlet

package jp.co.njk.nems.controller.authentication;

import java.io.IOException;
import java.sql.Connection;
import java.sql.SQLException;

import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.sql.DataSource;

@WebServlet("/SampleServlet")
public class SampleServlet extends HttpServlet {

    private static final long serialVersionUID = 1L;

    private Connection connection;

    public void init(ServletConfig config) throws ServletException {
        try {
            InitialContext context = new InitialContext();
            DataSource dataSource = (DataSource) context.lookup("java:comp/env/jdbc/postgresql");
            connection = dataSource.getConnection();

        } catch (NamingException e) {
            throw new RuntimeException(e);
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        System.out.println(connection);
    }
}

参考

Home > Tags > Tomcat

Search
Feeds
Meta

Return to page top