問題タブ [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.

0 投票する
1 に答える
1529 参照

java - メッセージ リスナでの JMS 接続プール

現在、Websphere MQ に接続してメッセージを送受信するスタンドアロンの Java アプリに取り組んでいます。

フローは非同期モードであり、クラスを使用して実装しMessageListener、準備ができたときにキューからメッセージを取得します。リスナーでコンシューマを初期化するコードは次のとおりです。

このgetJmsConnection()メソッドは、Apache Commons Pool ライブラリを使用して実装されたプールから接続を返します。

私の質問は、プログラムが実行されている限り、プールからリスナーに割り当てられた接続がアクティブになり、そのリスナーに結び付けられるでしょうか? または、接続が断続的に使用され、他のプロセスで再利用できますか? 私たちの考えは、送信プロセスと受信プロセスでプールからの接続を再利用することですが、MessageListenerそれらが割り当てられている接続をどのように扱うかわかりません。

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

0 投票する
1 に答える
1230 参照

java - Java でオブジェクトのプールを作成する

しばらく前に、ソケット接続を作成し、それらの入力をレガシー サーバーへの単一の telnet 接続に送るプログラムを作成しました。このプロジェクトの目標は、レガシー データベースのフロント エンドを作成し、最終的に最新のデータベースに移行することです。複数の telnet 接続にスケールアウトできると思われる方法でセットアップしました。さて、レガシーサーバーへの2〜4接続の使用を開始する時が来ましたが、機能しません。最後に行われた接続に常に入力を送信します。これが私がやったことです:

クラス 1 - サーバーコンソール

クラス 2 - マルチサーバー スレッド

クラス 3 - MvTelnet パッケージ サーバーコンソール。

その後、Apache の共通プール ライブラリを見つけましたが、プールするオブジェクトとして MvTelnet クラスを使用しているときに、それを正しく実装する方法がわかりません。commons-pool は正しい方法ですか? もしそうなら、どのように実装すればよいですか?

編集: コメントごとにすべてのコードを追加しました。ソケットがコマンドを送信できるさまざまな MvTelnet オブジェクトのプールを作成したいと考えています。私は bc にプール コードを持っていません。それはただの混乱でした。

0 投票する
1 に答える
902 参照

java - Apache Commons Pooling クラスフローでリフレクションによって生成されたクラスに Spring Bean を注入する方法

SOAP サービスへの接続を管理するために、Spring MVC 3.2.4 と Apache Commons Pooling 2.3 を使用しています。私が使用しているものの 1 つは、GenericObjectPool クラスの「アイドル オブジェクトの削除」スレッド機能です。

http://commons.apache.org/proper/commons-pool/api-2.3/org/apache/commons/pool2/impl/GenericObjectPool.html

この機能を使用して、接続オブジェクトの削除をテストするために使用するクラスの名前を指定します。

http://commons.apache.org/proper/commons-pool/api-2.3/org/apache/commons/pool2/impl/BaseObjectPoolConfig.html#setEvictionPolicyClassName(java.lang.String)

GenericObjectPool クラスの Commons Pooling 実装を調べると、エビクション クラスがリフレクションを使用してインスタンス化され、実行されます。生成されたクラスで @EnableLoadTimeWeaving および @Configurable を使用したロード時のウィービングなどの一般的な手法を使用するなど、Spring Bean をこのクラスに注入する試みはすべて失敗しました。

リフレクションによって内部的に生成され、Spring コンテナーによって管理されないクラスに Spring Bean を注入することは可能ですか?

編集:

以下は、evictor クラスをインスタンス化するメソッドです。

設定された間隔でスレッド内で実行される run メソッドを次に示します。

EvictionPolicy クラスの実装のサンプルを次に示します。

0 投票する
1 に答える
1090 参照

java - ByteBuffer のインスタンスを効果的にプールする

次のワークフローで、任意の POJO を取り込んでネットワーク経由で JSON 形式で送信するメッセージング ファサードを作成しています。

  1. ユーザーが呼び出すMessagingFacade.sendMessage(Object)
  2. プールから ByteBuffer を借りて、メッセージをこのバッファにシリアル化します
  3. 呼び出して POJO を JSON に変換するJsonSerializer.serialize(Object, ByteBuffer)
  4. エンコードされたメッセージをネットワーク経由で送信し、Transport.send(ByteBuffer)メッセージが送信されたときに通知される promise への参照を保持します。
  5. コールバックを promise にアタッチして、ByteBuffer がワイヤに書き込まれた後にプールに返すようにします。
  6. MessagingFacade.sendMessage(Object)呼び出しから戻る

clear()オブジェクトがプールに返されたときに状態をリセットするために呼び出すことができることを考えると、これは ByteBuffers をプールするための比較的単純なユースケースです。


独自のオブジェクト プールを作成するのではなく、既に Apache で提供されているものを利用しようとしましたcommons-poolGenericObjectPoolただし、 and SoftReferenceObjectPool...にはかなり大きな注意点があるようです。

オブジェクトを借用/返却する場合、これらの 2 つのプールは関連する を識別するためにhashCode()and/orを使用しています。との実装が基礎となる配列の内容の評価を伴うことを考えると、これは に非常に現実的な意味を持ちます。equals()PooledObject<ByteBuffer>ByteBufferequals()hashCode()byte

  1. オブジェクトのクリーニング -ByteBufferがプールに戻されると、その状態は「クリーニング済み」になります。これには、 を呼び出すだけByteBuffer.clear()です。これは、配列内のすべてのバイトをゼロにするわけではありません。つまり、equals()hashCode()返すByteBufferときと、借用したときの結果が異なります。
  2. ByteBuffer評価速度 -最大メッセージ サイズ (1MB) の容量で のインスタンスをプールしている場合、両方hashCode()を評価し、equals()この非常に大きな配列を直線的にトラバースする必要があります。

equals()Apache commons-pool の実装は、(a) クラスのコストとhashCode()実装が高いか、(b)hashCode()クリーニング後に安定した結果が得られないユースケースには適していないようです。

GenericObjectPoolこのユースケースを作成または機能させるための唯一の実行可能なオプションは、同一性等価/ハッシュコードロジックを使用する別のクラスでSoftReferenceObjectPoolラップすることです。ByteBuffer

これは機能していますが、このユースケースがいかにバニラであるかを考えると、少し面倒に感じます。このアプローチに代わるより良い方法はありますか?


最後に 1 つ。の不安定性により、equals()実際hashCode()には から例外が発生しGenericObjectPoolます。これは、プールから借用されたことのないオブジェクトを返そうとしているとプールが認識しているためです。

0 投票する
2 に答える
2129 参照

spring - 春のデータ Redis。アクティブ、アイドル接続の数を知るには?

春には、このような jedisConnFactory と jedisPoolConfig Bean があります。

サーバーへのデータ送信はOKです。しかし、JedisPoll が機能しているかどうかを確認する方法がわかりません。

Active、Idle 接続の数を確認するにはどうすればよいですか?

0 投票する
2 に答える
255 参照

apache - Apache Commons Pool を使用する SSH Maverick 接続オブジェクトを閉じる方法

私は SFTP 呼び出しを行うために SSH Maverich ライブラリを使用しており、apache commons プールを使用して maverick オブジェクトとプールされた接続オブジェクトをカプセル化しています。

Commons プールの Factory メソッドを実装して、オブジェクトを作成しました。

アイドル状態のオブジェクトがエビクションの対象である間にトランスポート層接続を閉じるにはどうすればよいですか?

Factory の PSdestroyObject が機能していません。Apache コモンズ プールのバージョン: 1.6

0 投票する
1 に答える
507 参照

java - commons-pool2 がパラメーターを使用して新しいオブジェクトを作成できる場合は?

PooledObjectFactory の create メソッドにはパラメータがありません

https://commons.apache.org/proper/commons-pool/api-2.4.2/org/apache/commons/pool2/BasePooledObjectFactory.html#create--

私の Foo クラス定義が次の場合:

この Foo は commons-pool でプールできますか?

アドバイスありがとうございます