| ページ一覧 | ブログ | twitter |  書式 | 書式(表) |

MyMemoWiki

Tomcat 5.5 JNDI Datasource の利用

提供: MyMemoWiki
2020年2月15日 (土) 07:36時点におけるPiroto (トーク | 投稿記録)による版 (ページの作成:「==Tomcat 5.5 JNDI Datasource の利用== [Tomcat] http://tomcat.apache.org/tomcat-5.5-doc/jndi-datasource-examples-howto.html ===Database Connection Pool(DBCP) の…」)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
ナビゲーションに移動 検索に移動

Tomcat 5.5 JNDI Datasource の利用

[Tomcat] http://tomcat.apache.org/tomcat-5.5-doc/jndi-datasource-examples-howto.html

Database Connection Pool(DBCP) の設定

http://jakarta.apache.org/commons/dbcp/configuration.html

インストール

DBCPは、Jakarta-Commonsのコンポーネントに依存している。

  • Jakarta-Commons DBCP
  • Jakarta-Commons Collections
  • Jakarta-Commons Pool

これらのライブラリは、ひとつのJARファイルとして、$CATALINA_HOME/common/lib/naming-factory-dbcp.jar に置かれている。

DBコネクションのリークを防ぐ

データベースコネクションプールは、データベースの接続を生成し、これを(新規作成するより効率がよいことから)再利用します。

これには、ひとつ問題があります。Webアプリケーションは、明示的にResultSetや、Stetement、Connectionを閉じる必要があります。Webアプリケーションがこれらを閉じるのに失敗すると、これらは再利用されなくなってしまいます。この状態がコネクションプールの"リーク"です。有効な接続を使い切ってしまうかもしれません。

DBCPでは、このように不正に終了したコネクションを追跡し、復帰させることができます。

不正終了したコネクションを取り除き再利用するには、以下の属性をDBCP DataSourceの設定に追加します。

 removeAbandoned="true"

デフォルト値はfalseです

以下の設定をすることで、以下の秒数アイドル状態のコネクションを不正終了したとみなすことができます。

removeAbandonedTimeout="60"

デフォルト値は300秒です。

以下の設定を行うことで、スタックトレースログをとることができます。

logAbandoned="true"

デフォルト値はfalseです。

Oracle 8i、9i、10g

はじめに

  • 以前のバージョンのOracleでは、*.zipとしてドライバが提供されていたが、Tomcatで利用できるのは、*.jarのみ。
  • $CATALINA_HOME/common/lib にインストールする。
  • *.zip は *.jarにリネームする

Server.xmlの設定

JNDI DataSource を $CATALINA_HOME/conf/server.xml に記述する。

ContextタグをHostタグの中に記述

<Context path="/myoracle" docBase="DBTest"
        debug="5" reloadable="true" crossContext="true">





    

  
 <Resource name="jdbc/myoracle" auth="Container"
             type="javax.sql.DataSource" driverClassName="oracle.jdbc.OracleDriver"
             url="jdbc:oracle:thin:@127.0.0.1:1521:mysid"
             username="scott" password="tiger" maxActive="20" maxIdle="10"
             maxWait="-1"/> 

</Context>

web.xmlの設定

WebアプリケーションのWeb.xmlファイルに、DTDの記述順に従い以下の記述を追記。

<resource-ref>
 <description>Oracle Datasource example</description>
 <res-ref-name>jdbc/myoracle</res-ref-name>
 <res-type>javax.sql.DataSource</res-type>
 <res-auth>Container</res-auth>
</resource-ref>

コード例

(1)
Context initContext = new InitialContext();
Context envContext  = (Context)initContext.lookup("java:/comp/env");
DataSource ds = (DataSource)envContext.lookup("jdbc/myoracle");
Connection conn = ds.getConnection();
//etc.
(2)
<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<sql:query var="rs" dataSource="jdbc/myoracle">
select id, foo, bar from testdata
</sql:query>

<html>
  <head>
    <title>DB Test</title>
  </head>
  <body>

Results

<c:forEach var="row" items="${rs.rows}">
    Foo ${row.foo}
Bar ${row.bar}
</c:forEach> </body> </html>

DB2


テンプレート:Include html banner html, "!J2EE"