• 締切済み

接続プーリングについて

接続プーリングについて下記説明がネットに ありました。 ----------------------------------------------------------------------------- 複数の接続を用意しておき、これを使いまわすことで更なる処理能力の向上が期待できます。 つまり、「複数の接続をサーブレットの外に用意しておき、サーブレットは必要なときだけ接続を 借用する」 と言った処理形態です。 これを一般に「接続プーリング」と呼びます。DB接続要求を受けた場合にプールから接続を借用し、 処理終了後に 直ちに接続をプールへ返却します。 複数のサーブレットからプーリングを共有出来るので、パフォーマンスとリソース面で有利です。 ----------------------------------------------------------------------------- ここでの「複数の接続をサーブレットの外に用意しておき」という記載ですが 例えばAPサーバーを再起動した場合、init()みたいな感じで DBに対し複数のDB接続が確立されているのでしょうか?。 でJava側は「接続済み」のオブジェクトを使う。 それとも 「接続はしていない」Connectionオブジェクトのみを使いまわし インスタンス生成を抑えるのが「接続プーリング」なのでしょうか?。 良く「複数のConnectionをあらかじめ作成しておき、ためておきます。」みたいな 説明が書籍にあるんですが・・ どちらが正しいかご意見お願い致します。

みんなの回答

  • process9
  • ベストアンサー率29% (81/272)
回答No.1

>例えばAPサーバーを再起動した場合、init()みたいな感じで >DBに対し複数のDB接続が確立されているのでしょうか?。 >でJava側は「接続済み」のオブジェクトを使う。 こっちです。 DBとコネクション接続処理が重いために ほとんどのAPサーバは、最初から接続してます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • コネクションプーリングの枯渇

    tomcat-Servletでの開発を行っています。 MVCモデルでのWEBアプリケーションです。 DBへの接続用として自作のコネクションプーリングを使用しています。 (プーリング数は20を設定) 基本的なSQL実行フローは下記のようになります。 1.コネクションプーリングを取得 2.SQL文を実行 3.コネクションプーリングを返却 ところが、時間を置いて psコマンドで確認すると、 だんだん数が減っていっているようです。 原因を調査しているのですが、 もし次のような原因で正しいかどうか分かりましたらご連絡ください。 <考えている原因> 要するに上記の3(返却)がされていないのであって。 ・実行処理中に利用者がクライアント側のブラウザを落としている。 と仮説を立てているのですが。 この仮説が正しいかどうか、 また、もし正しい場合には、どうすれば回避可能かをご教授ください。 補足の必要があればご連絡ください。 (コネクションプーリングの全文を載せたいのですが、  長すぎるようで・・・)

    • ベストアンサー
    • Java
  • DB接続について

    JAVA初心者です。 DB接続についてなのですが、いままで設定ファイルより<url>,<user>,<password>等の情報を取得してDB接続していたのですが、今後、『WebSphere』のデータソースの設定から取得する方式に変更となり、プログラム例として次のコードをもらったのですが… InitialContext ctx = new InitialContext(); DataSource ds = (DataSource)ctx.lookup("登録したJNDI名"); Connection conn = ds.getConnection(); これを以下のコードにどう組み込んでよいかわかりません… どうかご教授お願いします。 public class ConnectionCache{ private static final string This_Name = "jp.co.ise.filetransfer.server.common.ConnectionCache"; private static ConnectionCache instance = null; private static ObjectPool pool = null; private DataSource ds = null; // java.lang.Object#Object() private ConnectionCache(){} // Method ConnectionCache // @param ds private ConnectionCache(DataSource ds){ this.ds = ds; } // Method getDataSource // @return DataSource public static DataSource getDataSource(){ return instance.ds; } public static void init(Properties prop) throws Exception { try { class.formName(prop.getProperty("drive")); // プールするアイドルコネクション数の上限 int maxIdleNum = Integer.parselnt(prop.getProperty("maxIdle")); // プール初期化時のアイドルコネクション数 int initIdleCapacityNum = Integer.parselnt(prop.getProperty("initIdleCapacity")); // ObjectPoolインスタンスを生成 int initIdleCapacityNum = Integer.parselnt(prop.getProperty("initIdleCapacity")); // Connectionオブジェクトを生成するためのConnectionFactoryインスタンスの生成 ConnectionFactory conFactory = new DriverManagerConnectionFactory( prop.getProperty("url"), prop.getProperty("user"), prop.getProperty("password") ); // PoolableConnectionFactoryインスタンスの生成 new PoolableConnectionFactory( conFactory, pool, null, prop.getProperty("validationQuery"), true, true ); // プーリング機能を持つDataSourceインスタンスの生成 DataSource ds = new PoolingDataSource(pool); // 初期サイズ指定分のコネクションをプール ArrayList initConnections = new ArrayList(); // 新規接続 for(int i = 0; i < initIdleCapacityNum; i++){ initConnections.add(ds.getConnection()); } // プールへ返却 for(int i = 0; i < initIdleCapacityNum; i++){ ((Connection)initConnections.get(i)).close(); } instance = new AppleConnectionCache(ds); system.out.println( THIS_NAME + "DB接続プールを初期化しました。:プール内のコネクション数 = " + pool.getNumIdle()); } catch (Throwable t) { throw new Exception ( THIS_NAME + "DB接続プールの初期化に失敗しました。:" + t.getMessage()); } } //Method getInstance. //@return AppleConnectionCache public static synchronized AppleConnectionCache getInstance() { return instance; } //Method getConnection. //@return Connection public synchronized Connection getConnection() throws Exception { Connection conn = null; try{ conn = ds.getConnection(); } catch (SQLException e) { throw new Exception ( THIS_NAME + "DB接続に失敗しました。:" + e.getMessage()); } return conn; } //Method closeCache. public synchronized void closeCache() { try{ pool.close(); system.out.println(THIS_NAME + "DB接続プールのリソースを開放しました。"); } catch (Exception e) { } }

  • サーブレットのinit-param記述方法

    サーブレットのweb.xmlへのinit-paramの記述についてですが、 複数のサーブレットがある場合に まとめてinit-paramを記述する方法がわかりません。 サーブレット毎に<servlet> ~ </servlet>の中へ DBへの接続(url,user,passwd)用のinit-paramを記述していますが、 毎回書くとweb.xmlが長く見難いものになってしまいます。 あるパス配下(../servlet/ など)でまとめて記述することはできますか? 現状でも動くことは問題ないのですが・・・

    • ベストアンサー
    • Java
  • ADODB.Connectionはインターフェイス

    いつもお世話になっております。 C#で特定のDBに接続するクラスを作ろうとADODB.Connection(ADO.Conn)を継承しようとしたところADO.Connはインターフェイスであるため、各メンバの実装をしなくてはなりません。ADO.Connはオブジェクトととしてインスタンスを生成できていたため、なぜインターフェイスがインスタンスを生成してオブジェクトとして使えるのかがわかりません(Excel.Applicationなども同様です)。 これはどのような仕組みになっているのでしょうか?

  • ヒープメモリについて

    下記のソースにあるようにConnectionオブジェクトをインスタンス変数として持つ DBManagerクラスのオブジェクトをクラスAのコンストラクタの引数として渡す。 さらにそのクラスAのインスタンスメソッドであるinsert()をforループで100万回ほど 回すというような作りのソースがあります。 これを実行した時、JConsoleでヒープ領域をモニタリングすると徐々に使用量が増加していきます。 さらに、EclipseのMemoryAnalyzerなどで解析してみるとHeapの90%以上をConnectionのオブジェクト が占有しているという結果が出ました。 クラスAのオブジェクトaがループ処理の中にあることによってConnectionオブジェクトが増加すること はあり得るのでしょうか。インスタンス変数としてクラスの中に存在するとそれは メモリリークの原因となるのでしょうか。 pulic class DBManager { Connection conn; pubulic DBManager() { Class.forName("com.mysql.jdbc.Driver"); conn = DriverManager.getConnection(jdbc:mysql://localhost/test,user,pass); } public close() { conn.close(); } } public class A() { DBManager db; public A(DBManager db) { this.db = db; } } public class test { public static void main(String args) { DBManager db = new DBManager(); A a = new A(db); for(int i=0;i<1000000;i++) { a.insert(); } db.close(); } }

    • ベストアンサー
    • Java
  • MYSQL再起動後に接続できなくなってしまいました

    CENTOS5.6でMYSQL5.5.22を入れて使用しています。 テスト用プログラムを作っていて、MSYQLへのデータ挿入が止まらなかったためMSYQLをリスタートしました。 すると、起動後おそらく接続できないとのメッセージが出ています。 postfixをMysqlで使用して使っているため、メールができなくて困っています。 下記エラーメッセージがmysqlのログにありました。 120626 14:15:57 [Warning] Unknown character set: 'utf8a' 120626 14:15:57 [Warning] Aborted connection 131 to db: 'postfix用のDB名' user: 'postfix用のユーザー名' host: 'localhost' (init_connect command failed) 120626 14:15:57 [Warning] Unknown character set: 'utf8a' 120626 14:15:57 [Warning] Aborted connection 132 to db:'postfix用のDB名' user: 'postfix用のユーザー名' host: 'localhost' (init_connect command failed) 120626 14:15:57 [Warning] Unknown character set: 'utf8a' 120626 14:16:58 [Warning] Aborted connection 133 to db: 'postfix用のDB名' user: 'postfix用のユーザー名' host: 'localhost' (init_connect command failed) 120626 14:16:58 [Warning] Unknown character set: 'utf8a' 120626 14:16:58 [Warning] Aborted connection 134 to db: 'postfix用のDB名' user: 'postfix用のユーザー名' host: 'localhost' (init_connect command failed) 120626 14:16:58 [Warning] Unknown character set: 'utf8a' 120626 14:16:58 [Warning] Aborted connection 135 to db: 'postfix用のDB名' user: 'postfix用のユーザー名' host: 'localhost' (init_connect command failed) 120626 14:16:58 [Warning] Unknown character set: 'utf8a' Aborted connection の部分を色々調べたのですが、情報が少なく解決策がわかりませんでした。 Mysqlの再起動やサーバー自体の再起動を行ったのですが解決できませんでした。 何かヒントになるような事がありましたら、教えていただけないでしょうか? 宜しくお願いします。

    • ベストアンサー
    • MySQL
  • BeanにてのDB接続方法

    こんばんは、こちらの皆様には大変お世話になっております。 早速ですがまた質問です^_^; 今MVCモデルを使って社員データをDBにいれる簡単なプログラムを作っているのですが、DB接続がうまくいきません。というよりも私の考え方で合っているのかが定かではないのですが…。 BeanのほうでDB接続のメソッドを作って、それをサーブレットで使おうと思っているのですが、Beanクラスのコンパイルができないんです。(画面表示担当のJSPから直接DBへ接続するぶんにはなんの問題もありません) Beanにはいろんなメソッドを作るつもりで、DBへの指示のSQL文も一つ一つメソッド(データを追加したり、削除したり)を作るつもりでいます。 問題はメソッドの中でDB接続の処理をしてしまうと、別のメソッドでStatementオブジェクトが使えなくなってしまうことです。 DB接続のメソッドは戻り値も引数もなく、DBへ指示を出すメソッドはその時々に合ったものにしようと考えています。この引数をうまく使うのかなぁ、と思いつつも良い案が浮かびません。それとも根本的に考え方が間違っているのでしょうか? 皆様お忙しいとは思いますがご教示のほど、宜しくお願いいたします<(_ _)>

    • ベストアンサー
    • Java
  • ウェブサービスによるoracleへの同時接続

    こんにちは vb2005で作成したアプリケーションソフトをwebサービス(asp.net)を使用してoracle10gに接続してデータの取得、更新処理を するシステムを開発しています。 現在、複数の端末から同時にファイル更新を行うと、下記のようなメッセージが出力され大変困っています。 ・この操作に対して接続がオープンされている必要があります。 ・サーバは要求を処理できませんでした。-->オブジェクト参照がオブジェクトインスタンスに設定されていません ・リモートサーバーに接続できません。 複数で同時アクセスするような場合、何か他の設定が足りないのでしょうか。 以上、宜しくお願いします。

  • OLE DBプロバイダを使ってADOでMySQLに接続するには

    お世話になっております。 OLE DBプロバイダを使ってADOでMySQLに接続を試みていますがうまくいかず困っております。 Connectionオブジェクト.Open に設定する接続の文字列の書き方がわかりません。 どなたか、ヒントでも何でもけっこうですので、情報をいただけないでしょうか。 どうか、何とぞよろしくお願いいたします。

    • ベストアンサー
    • MySQL
  • 接続プール、またはコネクションプールを教えて下さい。

    「接続プール」、「コネクションプール」について質問があります。 MSDNのサイトで「接続プール」に関するサイトを読んでみましたが難しくてあんまり理解できませんでしたが何となく何ですがDBコネクションを共有して使ってパフォーマンスをあげるっていうのはわかりましたが・・・間違ってたらすみません m(_ _)m 申し訳ありませんがこんな私でも簡単にわかるように説明してくれませんでしょうか? 「接続プール」と「コネクションプール」って同じですか? 開発環境は以下のとおりです。 言語:VB.net2005(ADO.net) DB:SQLServer2005 宜しくお願いします。

このQ&Aのポイント
  • 旧PCから新パソコンでの引継ぎ方法についての質問です。新しいPCで旧PCのデータを引き継いで利用したいです。
  • 旧PCで筆まめVer.21を使っていますが、Windows7であり、動作も遅く壊れかけです。新しいPCで旧PCのデータを引き継ぎたいです。最新の筆まめアップグレード版を購入しても問題なく利用できるでしょうか。
  • 新PCで旧PCのデータを引き継いで筆まめを利用したいです。アップグレード版を購入して、データを移すことはできますか?費用はかかりますか?
回答を見る