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

MyMemoWiki

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

提供: MyMemoWiki
ナビゲーションに移動 検索に移動
(ページの作成:「==Tomcat 5.5 JNDI Datasource の利用== [Tomcat] http://tomcat.apache.org/tomcat-5.5-doc/jndi-datasource-examples-howto.html ===Database Connection Pool(DBCP) の…」)
 
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
  
39行目: 39行目:
  
 
ContextタグをHostタグの中に記述
 
ContextタグをHostタグの中に記述
  <Context path="/myoracle" docBase="DBTest"
+
  &lt;Context path="/myoracle" docBase="DBTest"
         debug="5" reloadable="true" crossContext="true">
+
         debug="5" reloadable="true" crossContext="true"&gt;
 
   
 
   
     <!-- maxActive: Maximum number of dB connections in pool. Make sure you
+
     &lt;!-- maxActive: Maximum number of dB connections in pool. Make sure you
 
           configure your mysqld max_connections large enough to handle
 
           configure your mysqld max_connections large enough to handle
 
           all of your db connections. Set to 0 for no limit.
 
           all of your db connections. Set to 0 for no limit.
           -->
+
           --&gt;
 
   
 
   
     <!-- maxIdle: Maximum number of idle dB connections to retain in pool.
+
     &lt;!-- 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 minEvictableIdleTimeMillis configuration parameter.
           -->
+
           --&gt;
 
   
 
   
     <!-- maxWait: Maximum time to wait for a dB connection to become available
+
     &lt;!-- maxWait: Maximum time to wait for a dB connection to become available
 
           in ms, in this example 10 seconds. An Exception is thrown if
 
           in ms, in this example 10 seconds. An Exception is thrown if
 
           this timeout is exceeded.  Set to -1 to wait indefinitely.
 
           this timeout is exceeded.  Set to -1 to wait indefinitely.
           -->
+
           --&gt;
 
   
 
   
     <!-- username and password: MySQL dB username and password for dB connections  -->
+
     &lt;!-- username and password: MySQL dB username and password for dB connections  --&gt;
 
   
 
   
     <!-- driverClassName: Class name for the old mm.mysql JDBC driver is
+
     &lt;!-- 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.
           -->
+
           --&gt;
 
      
 
      
     <!-- url: The JDBC connection url for connecting to your MySQL dB.
+
     &lt;!-- url: The JDBC connection url for connecting to your MySQL dB.
 
           The autoReconnect=true argument to the url makes sure that the
 
           The autoReconnect=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.
           -->
+
           --&gt;
 
   
 
   
 
    
 
    
   <Resource name="jdbc/myoracle" auth="Container"
+
   &lt;Resource name="jdbc/myoracle" auth="Container"
 
               type="javax.sql.DataSource" driverClassName="oracle.jdbc.OracleDriver"
 
               type="javax.sql.DataSource" driverClassName="oracle.jdbc.OracleDriver"
 
               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"
               maxWait="-1"/>
+
               maxWait="-1"/&gt;
 
   
 
   
  </Context>
+
  &lt;/Context&gt;
 
   
 
   
 
====web.xmlの設定====
 
====web.xmlの設定====
 
WebアプリケーションのWeb.xmlファイルに、DTDの記述順に従い以下の記述を追記。
 
WebアプリケーションのWeb.xmlファイルに、DTDの記述順に従い以下の記述を追記。
  <resource-ref>
+
  &lt;resource-ref&gt;
   <description>Oracle Datasource example</description>
+
   &lt;description&gt;Oracle Datasource example&lt;/description&gt;
   <res-ref-name>jdbc/myoracle</res-ref-name>
+
   &lt;res-ref-name&gt;jdbc/myoracle&lt;/res-ref-name&gt;
   <res-type>javax.sql.DataSource</res-type>
+
   &lt;res-type&gt;javax.sql.DataSource&lt;/res-type&gt;
   <res-auth>Container</res-auth>
+
   &lt;res-auth&gt;Container&lt;/res-auth&gt;
  </resource-ref>
+
  &lt;/resource-ref&gt;
  
 
====コード例====
 
====コード例====
97行目: 97行目:
  
 
=====(2)=====
 
=====(2)=====
  <%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %>
+
  &lt;%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %&gt;
  <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
+
  &lt;%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %&gt;
 
   
 
   
  <sql:query var="rs" dataSource="jdbc/myoracle">
+
  &lt;sql:query var="rs" dataSource="jdbc/myoracle"&gt;
 
  select id, foo, bar from testdata
 
  select id, foo, bar from testdata
  </sql:query>
+
  &lt;/sql:query&gt;
 
   
 
   
  <html>
+
  &lt;html&gt;
   <head>
+
   &lt;head&gt;
     <title>DB Test</title>
+
     &lt;title&gt;DB Test&lt;/title&gt;
   </head>
+
   &lt;/head&gt;
   <body>
+
   &lt;body&gt;
 
   
 
   
   <h2>Results</h2>
+
   &lt;h2&gt;Results&lt;/h2&gt;
 
    
 
    
  <c:forEach var="row" items="${rs.rows}">
+
  &lt;c:forEach var="row" items="${rs.rows}"&gt;
     Foo ${row.foo}<br/>
+
     Foo ${row.foo}&lt;br/&gt;
     Bar ${row.bar}<br/>
+
     Bar ${row.bar}&lt;br/&gt;
  </c:forEach>
+
  &lt;/c:forEach&gt;
 
   
 
   
   </body>
+
   &lt;/body&gt;
  </html>
+
  &lt;/html&gt;
 
   
 
   
  

2020年2月15日 (土) 08:06時点における版

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"