問題タブ [apache-commons-pool]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
apache-commons - Apache Commons Pool close() の動作とは
アプリケーションの一部にプーリングを実装しようとしています。close()
Commons Pool ライブラリを使用したいのですが、動作が少し気になります。close()
javadoc とソース コードを見ると、メソッドが呼び出されたときにプールで作成されたオブジェクトが破棄されるかどうかは明確ではないようです。私が見る限り、プールでアイドル状態のオブジェクトのみが破棄されます。使用されていて、まだ返されていないオブジェクトには触れられません。
ここで何かを見逃しましたか?プールが閉じられたときに、すべてのオブジェクトが正しく破棄されるようにしたいと考えています。
誰もこれを以前に使用していて、それがどのように機能するかについて考えを持っていますか?
java - ジャカルタの Commons-Pool はオブジェクトセーフですか?
ジャカルタ commons-pool-1.5.6.jar を使用しています。同じタイプのオブジェクト (例: 車) の 2 つの異なるプールがあります。オブジェクトをプールに戻さないようにする方法はありますか?
サンプルは次のとおりです。
プールがそのコンテンツを管理し、外部オブジェクトを返すのを防ぐと思っていたでしょうか?
これについて何か考えはありますか?これは自分で管理する必要がありますか?
java - Apache共通オブジェクトプールのジェネリックバージョンはありますか?
apache common poolを使用すると、Java オブジェクト プーリングの優れた実装が得られます。ただし、それらのKeyedPoolableObjectFactoryインターフェイスはタイプ セーフではありません。タイプ セーフなオブジェクト プールを作成するためのジェネリック インターフェイスを提供できる Java のオブジェクト プール ライブラリはありますか?
java - Commons Pooling: 具体的なプールをインスタンス化する方法は?
commons-pooling-1.6.jar をクラスパスに追加し、インスタンス化しようとしましたStackObjectPool
が、毎回失敗しています:
これは完全に非推奨の API ですか? もしそうなら、Commons Pooling に代わるオープンソースの方法は何ですか? それ以外の場合、どのようにインスタンス化しStackObjectPool
ますか?
web-services - Apache Commons プールを使用してタイムアウトでオブジェクトをプールに戻す方法
私は Apache Commons Pool ライブラリを使用して、couchbase 接続のプールを維持しています (あらゆる種類の接続と見なすことができますが、実際には問題ではありません)。
私が直面している問題は、オブジェクトをプールに返す唯一の方法が、 GenericObjectPoolクラスからreturnObjectメソッドを呼び出してプログラムで行うことだということです。これにより、アプリケーションでの例外や予期しない動作に関係なく、アプリケーションはプールから借用されたオブジェクトの戻りを保証するようになります。
アプリケーション全体でオブジェクトのプールへの戻りを制御しているとはいえ、オブジェクトの戻りをプログラマだけに依存するのは危険だと思います。特定のタイムアウトを超えるとオブジェクトを自動的に返す方法を知っている人はいますか (オブジェクトを回収します)。借用したオブジェクトのタイムアウトを超えると、プールに新しいオブジェクトを作成させることもできます。
PS: 私のアプリケーションは、分散 memcache サーバー (Couchbase) に接続する一連の REST Web サービスを公開しています。プールは、Couchbase への一連の接続を作成します。
どんな提案も役に立ちます!
編集
私が試した最初の解決策は、プールに格納されているオブジェクトのタイプ ( CouchbaseClient ) からの接続オブジェクトを含む新しいクラス ( CouchbaseClientHandler ) を作成することでした。CouchbaseClientHandlerにfinalizeメソッドを実装し、このオブジェクトへの参照が予期しない例外によって失われた場合に、関連するオブジェクトが実際にプールに返されるようにしました。ガベージ コレクターがオブジェクトを破棄すると、オブジェクトが返されます。これは期待どおりに機能しませんでした。ガベージ コレクターが再利用オブジェクトをいつ到着するかを予測することは不可能であり、通常は必要以上に時間がかかります。
私が現在実際に取り組んでいるソリューションは少し異なりますが、より安全です。私のプールは Web サービスによって使用されることを意図しており、すべての Web サービスは個別の一意のスレッドで実行されているため (私は Tomcat で Jersey を使用しています)、一意のスレッド ID をマップする静的ハッシュマップ変数を使用することにしました。 Web サービスの実行時にプールから借用して作成されたCouchbaseClientオブジェクトのリストに。私の Web サービスは、何が起こってもハンドラー メソッドが返す前に最終出力を処理するように設計されているため、借用したオブジェクト (接続) をプールに返すメソッドを常に実行することができます。効果的にプールに戻されていません。
これは私にとってはかなりうまくいきましたが、返されていない借用オブジェクトをタイムアウトで要求またはワイプするより良い方法があるかどうかを本当に知りたいです。
java - 複数の GenericKeyedObjectPools が同じエビクション スレッドを使用していますか?
GenericKeyedObjectPool
非同期アイドル オブジェクトの削除を有効にしたアプリケーションで複数のスレッドを使用している場合、バックグラウンドで実行される "アイドル オブジェクトの削除" スレッドはいくつですか?
複数GenericKeyedObjectPool
の がエビクション スレッドを 1 つだけ作成しますか?それともプールごとに個別のスレッドを作成しますか?
java - GenericKeyedObjectPoolを安全にシャットダウンする方法は?
アプリケーションにがありGenericKeyedObjectPool
ます。メソッドで閉じることはできclose
ますが、借用したすべてのオブジェクトがクライアントからプールに戻る(そしてプールが破棄される)のをどのように待つ必要がありますか?
のようなものが必要ですExecutorService.awaitTermination
。
pool - apachecommonspool-引数を取るファクトリの使用方法
apachecommonspoolを使用して「オブジェクト」のプールを作成しようとしています。文字列型の引数を取り、正しい型のオブジェクトを作成するオブジェクトファクトリがすでにあるので、このファクトリを使用したいと思います。
しかし、問題は、汎用プールオブジェクトのシグネチャのいずれも、引数を取るファクトリを渡すことができないことです。
PoolableObjectfactoryインターフェースは、makeObject、destroyObject、validateObject、activateObject、passivateObjectなどのメソッドを定義します。ただし、パラメータを受け取るmakeObject()メソッドはありません。
これを行う唯一の方法は、オブジェクトのタイプごとに複数のファクトリクラスを記述し、次のようなif-elseのものを記述することだと思われます。
または、この目的のためだけにいくつかのファクトリクラスを複製/作成する代わりに、エレガントな方法はありますか?
java - commons.dbcpブロックからのプールされた接続を使用する次の単純なJavaコードはなぜですか?
hsqldbデータベースにファイルを保存しようとする単純なJavaコードを作成しました。特定のディレクトリからファイルを読み取り、それらをDBに配置するだけです。シングルスレッドですが、後でマルチスレッドアクセスに対応できるようにするために、apachecommons.dbcpからのプールされた接続を使用しています。
問題は、いくつかのファイルを読み取った後にコードがブロックされることです。
以下にソースコード全体を見つけてください。
Program.java
HsqldbFileStorage.java
コードはcommons-dbcp1.4、commons-pool 1.6、hsqldb2.2.9に依存します
プロジェクトディレクトリ自体で実行すると、DBに62個のファイルが配置され(前述の2つのソースファイルよりもはるかに多くのファイルがあります)、ファイルごとに1行が出力されます。
残念ながら、次のスタックトレースで8番目のファイルをブロックします。
私は何が間違っているのですか?
java - Apache-Commons-Pool を使用するとスレッドがブロックされるのはなぜですか?
これが私のデモです:
PoolableObjectFactoryImpl.java
ThreadPool.java
結果.java
テスト.java
次は構成プロパティです。
次は、4 つのスレッドがある場合の Jprofiler のスレッド ビューです。
Test.java が数分間実行された後、いくつかのスレッドがブロックされたままになり、1 つだけがまだ実行されていますが、ログは出力されません。スレッドのことはよくわかりません。誰でも理由を説明できますか?スレッドがブロックされないようにする方法は?