- 2011年7月20日 3:45 AM
- Java
コネクションプーリングをするために、DataSourceからコネクションを取得しようと思ったら、かなりハマってしまったので、備忘録です。
手順は以下。PostgreSQLの例ですが、大体どのDB製品でも同じだと思います。
- (サーバの)server.xmlにResourceを定義
- (アプリケーションの)web.xmlにresource-refを定義
- JDBCドライバを配備
- コネクション取得
(サーバの)server.xmlにResourceを定義
まずserver.xmlにResourceを定義します。WTPでサーバを動かしている場合は、以下のようにServersプロジェクト内に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);
}
}
参考
Comments:0
Trackbacks:0
- Trackback URL for this entry
- http://sinsengumi.net/blog/2011/07/wtp%e3%81%aetomcat7-0%e3%81%a7datasourcepostgresql%e3%81%8b%e3%82%89connection%e3%82%92%e5%8f%96%e5%be%97%e3%81%99%e3%82%8b/trackback/
- Listed below are links to weblogs that reference
- WTPのTomcat7.0でDataSource(PostgreSQL)からConnectionを取得する from sinsengumi血風録
