|
|||||||
| 前のパッケージ 次のパッケージ | フレームあり フレームなし | ||||||
DataSource を実装した1つの public クラスを持ちます。
参照:
説明
| クラスの概要 | |
| Jdbc2PoolDataSource |
J2EE環境でのデプロイに適切なプーリングを行う DataSource です。
|
このパッケージはデータベースコネクションプールの機能を提供する
DataSource を実装した1つの public クラスを持ちます。
以下に2通りの使用例を示します。
1つは JNDI システム内にデプロイする方法です。
もう1つは一般的な java のコードでプールを初期化する単純な例です。
ほとんどの J2EE コンテナはリソースを JNDI 内にデプロイする何らかの方法を提供しています。 その方法はコンテナごとに違いますが、 JNDI 経由でリソースが利用可能になれば アプリケーションはコンテナから独立した方法でリソースにアクセスすることができます。 以下の例は catalina(Tomcat3.3以降) にデプロイする方法を示します。
server.xml 内の
<Resource name="jdbc/bookstore" auth="Container"
type="org.apache.commons.dbcp.jdbc2pool.Jdbc2PoolDataSource"/>
<ResourceParams name="jdbc/bookstore">
<parameter>
<name>factory</name>
<value>org.apache.commons.dbcp.jdbc2pool.Jdbc2PoolDataSource</value>
</parameter>
<parameter>
<name>dataSourceName</name><value>java:comp/env/jdbc/bookstoreCPDS</value>
</parameter>
<parameter>
<name>defaultMaxActive</name><value>30</value>
</parameter>
</ResourceParams>
web.xml に以下の記述を追加してください。 これらの要素の順番はサーブレット定義のDTD宣言に従わなくてはいけないことに注意してください:
<resource-ref>
<description>
Resource reference to a factory for java.sql.Connection
instances that may be used for talking to a particular
database that is configured in the server.xml file.
</description>
<res-ref-name>
jdbc/bookstore
</res-ref-name>
<res-type>
org.apache.commons.dbcp.jdbc2pool.Jdbc2PoolDataSource
</res-type>
<res-auth>
Container
</res-auth>
</resource-ref>
Catalina は java:comp/env ネームスペース内にも同様に設定された全てのオブジェクトをデプロイします。
そのため dataSourceName パラメータに渡される JNDI パスは
cpdsadapterのサンプルでデプロイされた
ConnectionPoolDataSource にも有効です。
以下の手順でアプリケーション内で DataSource を利用することができます:
Context ctx = new InitialContext();
DataSource ds = (DataSource)
ctx.lookup("java:comp/env/jdbc/bookstore");
Connection con = null;
try
{
con = ds.getConnection();
...
use the connection
...
}
finally
{
if (con != null)
con.close();
}
複数の getConnection() リクエストのために DataSource への参照を保持することができます。
また、 DataSource アプリケーションコード内の他のパーツから参照することもできます。
Jdbc2PoolDataSource は異なる参照毎のプールの状態を保持することができます。
この振る舞いは他の実装とは異なるかもしれません。
これは BasicDataSource の振る舞いとは対照的で、
最大100個のコネクションを持つことのできるプールに2つの参照があった場合、
2つのプールは独立してコネクションを管理し、トータルで200個のコネクションを使用することができることになります。
Jdbc2PoolDataSource で独立したコネクションのセットを扱いたい場合には、
異なるインスタンスを異なる名前でデプロイしてください。
コネクションプーリングはJ2EE環境で動作しないアプリケーションにとっても有用です。 Jdbc2PoolDataSource はそのようなシンプルな環境でも利用することが可能です。 以下に示す例では DriverAdapterCPDS を使用していますが、どんな CPDS でも適用することが可能です。
public class Pool
{
public static DataSource ds;
static
{
DriverAdapterCPDS cpds = new DriverAdapterCPDS();
cpds.setDriver("org.gjt.mm.mysql.Driver");
cpds.setUrl("jdbc:mysql://localhost:3306/bookstore");
cpds.setUser("foo");
cpds.setPassword(null);
Jdbc2PoolDataSource tds = new Jdbc2PoolDataSource();
tds.setConnectionPoolDataSource(cpds);
tds.setDefaultMaxActive(10);
tds.setDefaultMaxWait(50);
ds = tds;
}
}
このクラスはコネクションが必要になったときにいつでも使用することができます:
Connection con = null;
try
{
con = Pool.ds.getConnection();
...
use the connection
...
}
finally
{
if (con != null)
con.close();
}
|
|||||||
| 前のパッケージ 次のパッケージ | フレームあり フレームなし | ||||||