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

MyMemoWiki

「Tomcat 5.5 JNDI Datasource の利用」の版間の差分

提供: MyMemoWiki
ナビゲーションに移動 検索に移動
 
(同じ利用者による、間の1版が非表示)
1行目: 1行目:
==Tomcat 5.5 JNDI Datasource の利用==
+
==[[Tomcat 5.5 JNDI Datasource の利用]]==
[[Tomcat]]
+
[[Tomcat]] |
 
http://tomcat.apache.org/tomcat-5.5-doc/jndi-datasource-examples-howto.html
 
http://tomcat.apache.org/tomcat-5.5-doc/jndi-datasource-examples-howto.html
  
===Database Connection Pool(DBCP) の設定===
+
===[[Database]] Connection Pool(DBCP) の設定===
 
http://jakarta.apache.org/commons/dbcp/configuration.html
 
http://jakarta.apache.org/commons/dbcp/configuration.html
 
====インストール====
 
====インストール====
10行目: 10行目:
 
*Jakarta-Commons Collections
 
*Jakarta-Commons Collections
 
*Jakarta-Commons Pool
 
*Jakarta-Commons Pool
これらのライブラリは、ひとつのJARファイルとして、$CATALINA_HOME/common/lib/naming-factory-dbcp.jar に置かれている。
+
これらのライブラリは、ひとつのJA[[R]]ファイルとして、$CATALINA_HOME/common/lib/naming-factory-dbcp.jar に置かれている。
 
====DBコネクションのリークを防ぐ====
 
====DBコネクションのリークを防ぐ====
 
データベースコネクションプールは、データベースの接続を生成し、これを(新規作成するより効率がよいことから)再利用します。
 
データベースコネクションプールは、データベースの接続を生成し、これを(新規作成するより効率がよいことから)再利用します。
  
これには、ひとつ問題があります。Webアプリケーションは、明示的にResultSetや、Stetement、Connectionを閉じる必要があります。Webアプリケーションがこれらを閉じるのに失敗すると、これらは再利用されなくなってしまいます。この状態がコネクションプールの"リーク"です。有効な接続を使い切ってしまうかもしれません。
+
これには、ひとつ問題があります。[[Webアプリケーション]]は、明示的にResultSetや、Stetement、Connectionを閉じる必要があります。[[Webアプリケーション]]がこれらを閉じるのに失敗すると、これらは再利用されなくなってしまいます。この状態がコネクションプールの"リーク"です。有効な接続を使い切ってしまうかもしれません。
  
 
DBCPでは、このように不正に終了したコネクションを追跡し、復帰させることができます。
 
DBCPでは、このように不正に終了したコネクションを追跡し、復帰させることができます。
30行目: 30行目:
 
デフォルト値はfalseです。
 
デフォルト値はfalseです。
  
===Oracle 8i、9i、10g===
+
===[[Oracle]] 8i、9i、10g===
 
====はじめに====
 
====はじめに====
*以前のバージョンのOracleでは、*.zipとしてドライバが提供されていたが、Tomcatで利用できるのは、*.jarのみ。
+
*以前のバージョンの[[Oracle]]では、*.zipとしてドライバが提供されていたが、Tomcatで利用できるのは、*.jarのみ。
 
*$CATALINA_HOME/common/lib にインストールする。
 
*$CATALINA_HOME/common/lib にインストールする。
 
* *.zip は *.jarにリネームする
 
* *.zip は *.jarにリネームする
49行目: 49行目:
 
     <!-- maxIdle: Maximum number of idle dB connections to retain in pool.
 
     <!-- maxIdle: Maximum number of idle dB connections to retain in pool.
 
           Set to -1 for no limit.  See also the DBCP documentation on this
 
           Set to -1 for no limit.  See also the DBCP documentation on this
           and the minEvictableIdleTimeMillis configuration parameter.
+
           and the minE[[vi]]ctableIdleTimeMillis configuration parameter.
 
           -->
 
           -->
 
   
 
   
57行目: 57行目:
 
           -->
 
           -->
 
   
 
   
     <!-- username and password: MySQL dB username and password for dB connections  -->
+
     <!-- username and password: [[MySQL]] dB username and password for dB connections  -->
 
   
 
   
 
     <!-- driverClassName: Class name for the old mm.mysql JDBC driver is
 
     <!-- driverClassName: Class name for the old mm.mysql JDBC driver is
 
           org.gjt.mm.mysql.Driver - we recommend using Connector/J though.
 
           org.gjt.mm.mysql.Driver - we recommend using Connector/J though.
           Class name for the official MySQL Connector/J driver is com.mysql.jdbc.Driver.
+
           Class name for the official [[MySQL]] Connector/J driver is com.mysql.jdbc.Driver.
 
           -->
 
           -->
 
      
 
      
     <!-- url: The JDBC connection url for connecting to your MySQL dB.
+
     <!-- url: The JDBC connection url for connecting to your [[MySQL]] dB.
           The autoReconnect=true argument to the url makes sure that the
+
           The auto[[R]]econnect=true argument to the url makes sure that the
 
           mm.mysql JDBC Driver will automatically reconnect if mysqld closed the
 
           mm.mysql JDBC Driver will automatically reconnect if mysqld closed the
 
           connection.  mysqld by default closes idle connections after 8 hours.
 
           connection.  mysqld by default closes idle connections after 8 hours.
71行目: 71行目:
 
   
 
   
 
    
 
    
   <Resource name="jdbc/myoracle" auth="Container"
+
   <[[R]]esource name="jdbc/myoracle" auth="Container"
               type="javax.sql.DataSource" driverClassName="oracle.jdbc.OracleDriver"
+
               type="javax.sql.DataSource" driverClassName="oracle.jdbc.[[Oracle]]Driver"
 
               url="jdbc:oracle:thin:@127.0.0.1:1521:mysid"
 
               url="jdbc:oracle:thin:@127.0.0.1:1521:mysid"
 
               username="scott" password="tiger" maxActive="20" maxIdle="10"
 
               username="scott" password="tiger" maxActive="20" maxIdle="10"
80行目: 80行目:
 
   
 
   
 
====web.xmlの設定====
 
====web.xmlの設定====
WebアプリケーションのWeb.xmlファイルに、DTDの記述順に従い以下の記述を追記。
+
[[Webアプリケーション]]のWeb.xmlファイルに、DTDの記述順に従い以下の記述を追記。
 
  <resource-ref>
 
  <resource-ref>
   <description>Oracle Datasource example</description>
+
   <description>[[Oracle]] Datasource example</description>
 
   <res-ref-name>jdbc/myoracle</res-ref-name>
 
   <res-ref-name>jdbc/myoracle</res-ref-name>
 
   <res-type>javax.sql.DataSource</res-type>
 
   <res-type>javax.sql.DataSource</res-type>
110行目: 110行目:
 
   <body>
 
   <body>
 
   
 
   
   <h2>Results</h2>
+
   <h2>[[R]]esults</h2>
 
    
 
    
 
  <c:forEach var="row" items="${rs.rows}">
 
  <c:forEach var="row" items="${rs.rows}">
121行目: 121行目:
 
   
 
   
  
===DB2===
+
===[[DB2]]===
 
*[http://www.ibm.com/developerworks/jp/data/library/dataserver/techdoc/tomcat.html LinuxへのApache+Tomcat+DB2インストール]
 
*[http://www.ibm.com/developerworks/jp/data/library/dataserver/techdoc/tomcat.html LinuxへのApache+Tomcat+DB2インストール]
 
    
 
    
 
----
 
----
{{include_html banner_html, "!J2EE"}}
+
{{include_html [[banner_html]], "!J2EE"}}

2020年2月16日 (日) 04:33時点における最新版

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">

    <!-- maxActive: Maximum number of dB connections in pool. Make sure you
         configure your mysqld max_connections large enough to handle
         all of your db connections. Set to 0 for no limit.
         -->

    <!-- maxIdle: Maximum number of idle dB connections to retain in pool.
         Set to -1 for no limit.  See also the DBCP documentation on this
         and the minEvictableIdleTimeMillis configuration parameter.
         -->

    <!-- maxWait: Maximum time to wait for a dB connection to become available
         in ms, in this example 10 seconds. An Exception is thrown if
         this timeout is exceeded.  Set to -1 to wait indefinitely.
         -->

    <!-- username and password: MySQL dB username and password for dB connections  -->

    <!-- driverClassName: Class name for the old mm.mysql JDBC driver is
         org.gjt.mm.mysql.Driver - we recommend using Connector/J though.
         Class name for the official MySQL Connector/J driver is com.mysql.jdbc.Driver.
         -->
    
    <!-- url: The JDBC connection url for connecting to your MySQL dB.
         The autoReconnect=true argument to the url makes sure that the
         mm.mysql JDBC Driver will automatically reconnect if mysqld closed the
         connection.  mysqld by default closes idle connections after 8 hours.
         -->

  
 <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>

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

  </body>
</html>

DB2


{{include_html banner_html, "!J2EE"}}