问题标签 [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 投票
2 回答
2505 浏览

apache-commons - 什么是 Apache Commons Pool close() 行为

我一直在寻找在我的应用程序的一部分中实现池化。我想使用 Commons Pool 库,但有点担心这种close()行为是如何工作的。从查看 javadocs 和源代码来看,似乎并不清楚在close()调用该方法时是否会销毁池中创建的对象。据我所知,只有池中空闲的对象才会被销毁——任何正在使用但尚未返回的对象都不会被触及。

我在这里错过了什么吗?我想确保在池关闭时所有对象都被正确销毁。

有人以前用过这个并且知道它是如何工作的吗?

0 投票
2 回答
369 浏览

java - Jakarta 的 Commons-Pool 对象安全吗?

我正在使用 Jakarta commons-pool-1.5.6.jar。我有 2 个相同类型对象的不同池(例如:汽车)。是一种防止对象返回池的方法吗?

这是一个示例:

我原以为池会管理其内容并防止将外部对象返回给它?

对此有什么想法吗?我必须自己管理吗?

0 投票
2 回答
949 浏览

java - 是否有任何泛型版本的 apache 通用对象池?

在使用apache common pool时,它可以为我提供一个很好的 Java 对象池实现。但是他们的KeyedPoolableObjectFactory接口不是类型安全的。Java中是否有任何对象池库可以为我们提供泛型接口来创建类型安全的对象池?

0 投票
2 回答
6172 浏览

java - Commons Pooling:如何实例化一个具体的池?

我已将 commons-pooling-1.6.jar 添加到我的类路径中,并尝试实例化 aStackObjectPool并且每次都失败:

这是一个完全弃用的 API 吗?如果是这样,Commons Pooling 的一些开源替代方案是什么?否则,我如何实例化 a StackObjectPool

0 投票
1 回答
1896 浏览

web-services - 如何使用 apache commons pool 通过超时将对象返回到池中

我正在使用 Apache Commons Pool 库来维护一个 couchbase 连接池(可以看作任何类型的连接,并不重要)。

我面临的问题是,我发现将对象返回池的唯一方法是通过调用GenericObjectPool类的returnObject方法以编程方式完成。这迫使应用程序保证一旦从池中借用对象就返回,而不管应用程序中的任何异常或意外行为。

尽管我在整个应用程序中控制对象返回到池中,但我发现完全依赖程序员返回对象是有风险的。有没有人知道一旦超过给定超时(回收对象)自动返回对象的方法。一旦借用对象超过超时,它也可以以任何方式使池创建新对象。

PS:我的应用程序公开了一组 REST Web 服务,它们连接到分布式内存缓存服务器(Couchbase)。该池创建一组到 Couchbase 的连接。

任何建议都会有所帮助!

编辑

我尝试的第一个解决方案是创建一个新类 ( CouchbaseClientHandler ),其中包含来自存储在池 ( CouchbaseClient )中的对象类型的连接对象。我已经在CouchbaseClientHandler上实现了finalize方法,以确保如果对该对象的引用因意外异常而丢失,则关联实际上返回到池中。当垃圾收集器销毁对象时,该对象将被返回。这没有按预期工作。无法预测垃圾收集器何时会到达回收对象,而且它通常花费的时间比预期的要长。

我现在实际工作的解决方案有点不同,但更安全。由于我的池旨在供 Web 服务使用,并且由于每个 Web 服务都在单独且唯一的线程中运行(我在 Tomcat 上使用 Jersey),因此我决定使用映射唯一线程 ID 的静态 hashmap 变量到在执行 web 服务时从池中借用的CouchbaseClient对象列表。由于我的 Web 服务的设计方式是,无论发生什么,处理程序方法都会在返回之前处理最终输出,因此我可以确保始终运行一个方法,将那些借用的对象(连接)返回到池中,即没有被有效地返回到池中。

尽管这对我来说效果很好,但我真的很想知道是否有更好的方法来通过超时借用的对象来声明或擦除尚未归还的对象。

0 投票
1 回答
383 浏览

java - 多个 GenericKeyedObjectPools 是否使用相同的驱逐线程?

如果我在GenericKeyedObjectPool启用了异步空闲对象驱逐的应用程序中使用多个线程,那么后台将运行多少个“空闲对象驱逐”线程?

多个GenericKeyedObjectPools 只创建一个驱逐线程还是为每个池创建单独的线程?

0 投票
2 回答
1325 浏览

java - 如何安全地关闭 GenericKeyedObjectPool?

我的应用程序中有一个GenericKeyedObjectPool。我可以使用该close方法将其关闭,但是我应该如何等待客户端将每个借用的对象返回(并且池销毁)池中?

我需要类似的东西ExecutorService.awaitTermination

0 投票
1 回答
1148 浏览

pool - apache commons pool - 如何使用带参数的工厂

我正在尝试使用 apache commons pool 创建一个“对象”池。由于我已经有一个对象工厂,它接受一个字符串类型参数并创建一个正确类型的对象,我想使用这个工厂。

但问题是通用池对象的签名都不允许我传递一个带参数的工厂。

PoolableObjectfactory 接口定义了 makeObject、destroyObject、validateObject、activateObject 和 passivateObject 等方法。但是没有带参数的 makeObject() 方法。

似乎我能做到这一点的唯一方法是为每种类型的对象编写多个工厂类并编写 if-else 的东西,例如:

或者,有没有什么优雅的方法,而不是仅仅为了这个而复制/创建几个工厂类?

0 投票
1 回答
522 浏览

java - 为什么以下使用来自 commons.dbcp 的池连接的简单 Java 代码会阻塞?

我编写了一个简单的 Java 代码,它尝试将文件存储在 hsqldb 数据库中。它所做的只是从某个目录读取文件并将它们放入数据库中。它是单线程的,但我使用来自 apache commons.dbcp 的池连接,以便以后能够处理多线程访问。

问题是读取几个文件后代码块。

请在下面找到整个源代码。

程序.java

HsqldbFileStorage.java

代码依赖于 commons-dbcp 1.4、commons-pool 1.6 和 hsqldb 2.2.9

在项目目录本身上运行它应该在数据库中放置 62 个文件(我那里的文件比前面提到的两个源文件多得多),为每个文件打印一行。

不幸的是,它阻塞了第八个文件,并带有以下堆栈跟踪:

我究竟做错了什么?

0 投票
2 回答
1099 浏览

java - 为什么当我使用 Apache-Commons-Pool 时线程会被阻塞?

这是我的演示:

PoolableObjectFactoryImpl.java

线程池.java

结果.java

测试.java

接下来是配置属性:

在此处输入图像描述

接下来是 Jprofiler 的线程视图,当它有 4 个线程时:

在此处输入图像描述

Test.java 运行几分钟后,一些线程一直被阻塞,只有一个仍在运行但不打印任何日志。我不太了解线程的事情。谁能解释为什么?如何避免线程被阻塞?