「Tomcat 5.5 JNDI Datasource の利用」の版間の差分
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 | ||
− | + | これらのライブラリは、ひとつのJA[[R]]ファイルとして、$CATALINA_HOME/common/lib/naming-factory-dbcp.jar に置かれている。 | |
====DBコネクションのリークを防ぐ==== | ====DBコネクションのリークを防ぐ==== | ||
データベースコネクションプールは、データベースの接続を生成し、これを(新規作成するより効率がよいことから)再利用します。 | データベースコネクションプールは、データベースの接続を生成し、これを(新規作成するより効率がよいことから)再利用します。 | ||
− | + | これには、ひとつ問題があります。[[Webアプリケーション]]は、明示的にResultSetや、Stetement、Connectionを閉じる必要があります。[[Webアプリケーション]]がこれらを閉じるのに失敗すると、これらは再利用されなくなってしまいます。この状態がコネクションプールの"リーク"です。有効な接続を使い切ってしまうかもしれません。 | |
DBCPでは、このように不正に終了したコネクションを追跡し、復帰させることができます。 | DBCPでは、このように不正に終了したコネクションを追跡し、復帰させることができます。 | ||
30行目: | 30行目: | ||
デフォルト値はfalseです。 | デフォルト値はfalseです。 | ||
− | ===Oracle 8i、9i、10g=== | + | ===[[Oracle]] 8i、9i、10g=== |
====はじめに==== | ====はじめに==== | ||
− | * | + | *以前のバージョンの[[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 | + | 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 | + | 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行目: | ||
− | < | + | <[[R]]esource name="jdbc/myoracle" auth="Container" |
− | type="javax.sql.DataSource" driverClassName="oracle.jdbc. | + | 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の記述順に従い以下の記述を追記。 | |
<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> | + | <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"}}
© 2006 矢木浩人