- PR -

コネクションプールを使用した接続

1
投稿者投稿内容
うるる
会議室デビュー日: 2005/07/10
投稿数: 2
投稿日時: 2005-07-10 21:13
初めてスレッドを書かせていただきました。
質問内容の記述が不十分であればご指摘お願います。

アプリケーションサーバーにTOMCATを使用しています。
現在接続プールを使用する為に以下のコードで
Connectionを取得しています。(server.xml)は記述済み

[java]
InitialContext ic = new InitialContext();
DataSource ds = (DataSource)ic.lookup("java:comp/env/jdbc/MySQL");
Connection con = ds.getConnection();

質問1:
上記のコードだとアプリケーションサーバー側でプールを作成するし、
ds.getConnection();
で使用できるConnectionを取得している?と考えていますが
その際、使用後にcon.close()はしなければいけないのですか?
(OracleでSession数を確認すると、どんどん増えていきました・・・)

質問2:
Oracle接続時に必要なuserとpasswordを途中で切り替えたいと
考えておりますが、ds.getConnection(user,password);
とするとエラーが発生し、server.xmlで登録していたuser,passwordに
接続しとしてしまいます。
切り替えたいとなると、

private Vector connectionPool = null;

DriverManager.registerDriver(new oracle.jdbc.OracleDriver());
if(connectionPool == null) {
 connectionPool = new Vector();
 for(int i = 0;i<1;i++){
   Connection connection = DriverManager.getConnection(conStr);
  connectionPool.add(connection);
  }
 }
Connection return_connection = (Connection)connectionPool.get(0);
connectionPool.remove(0);
return_connection.setAutoCommit(false);
return return_connection;

のように自前でコネクションプールを作成する必要があるのでしょうか?


かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2005-07-10 21:30
質問1:
コネクションプールの実装によりますが、
大体のコネクションプールにて提供されたコネクションは、
closeメソッドで自分自身を、プールに返却する実装になっています。
ですので、返却を行わないと「使用中」と判断されます。
プールが空の状態なら新たにコネクションを作成する使用であれば、
セッションが増えるのも当然です。
アイドル状態の接続数や空の状態での新規接続数などは、設定にて行う事ができます。

質問2:
コネクションプールとは、コネクションをある程度ためておく事を言います。
どのように接続をためるかというと、予め設定されたID/PASSWORDで接続を自動的に行い、
その接続をためておきます。なので、当然の動作だと思います。


接続方法を切り替えたいケースですが、ユーザ名が動的に変わるものなのでしょうか。
変わらないのであれば、データソースをユーザ単位で複数作成してもいいのではないでしょうか。

変わるようなら独自でコネクションプールを作成する必要があると思いますが、
Tomcatではコネクションプールの実装にCommonsDBCPが使用されています。
サーブレット側でもCommonsDBCPを使用して、独自にデータソースの取得も可能です。
コネクションプールをマジメに実装すると大変なので、
既に存在するプロダクトを利用するのがいいと思います。
うるる
会議室デビュー日: 2005/07/10
投稿数: 2
投稿日時: 2005-07-10 22:05
かつのりさん、返信ありがとうございます。

>変わるようなら独自でコネクションプールを作成する必要があると思いますが、
>Tomcatではコネクションプールの実装にCommonsDBCPが使用されています。
>サーブレット側でもCommonsDBCPを使用して、独自にデータソースの取得も可能です。
>コネクションプールをマジメに実装すると大変なので、
>既に存在するプロダクトを利用するのがいいと思います。

ユーザは動的に変わるので作成する必要があるのですね。
ずっと悩んでいたので的確に解答をいただけて、本当に感謝しております。
これからCommonsDBCPについて調べてみます。

ありがとうございました。

かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2005-07-10 23:18
関係ないですが、動的にDB接続のユーザが変わるというのは
一体どんなシステムなんでしょうか?
通常の業務システムでは考えにくいケースだと思いました。

興味があるので差し支えなければ教えていただけないでしょうか。
1

スキルアップ/キャリアアップ(JOB@IT)