问题标签 [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.
java - 消息侦听器中的 JMS 连接池
目前我正在开发一个连接到 Websphere MQ 以发送和接收消息的独立 Java 应用程序。
流程处于异步模式,我们使用MessageListener
类来实现,以便在消息准备好时从队列中检索消息。使用监听器初始化消费者的代码如下:
该getJmsConnection()
方法将从池中返回一个连接,使用 Apache Commons Pool 库实现。
我的问题是,只要程序正在运行,从池中分配给侦听器的连接是否会处于活动状态并绑定到该侦听器?或者连接被间歇性使用并且可以被其他进程重用?我们的想法是让发送和接收过程重用池中的连接,但我不确定如何MessageListener
处理分配给它们的连接。
谢谢你。
java - 使用 Java 创建对象池
不久前,我创建了一个程序,该程序创建套接字连接并将其输入集中到与我们的旧服务器的单个 telnet 连接。该项目的目标是为遗留数据库创建前端并最终迁移到现代数据库。我以一种我认为可以扩展到多个 telnet 连接的方式设置它。好吧,现在是我开始使用 2-4 连接到旧版服务器的时候了,但它不起作用。它总是将输入发送到最后建立的连接。这是我所做的:
1 类 - 服务器控制台
2 类 - 多服务器线程
第 3 类 - MvTelnet 包 serverconsole;
我已经找到了 Apaches 通用池库,但我无法弄清楚如何在使用我的 MvTelnet 类作为池对象时正确实现它。commons-pool 是正确的方法吗?如果是,我该如何实施?
编辑: 好的,我根据评论添加了所有代码。我想创建一个包含各种 MvTelnet 对象的池,我的套接字可以向这些对象发送命令。我在 bc 中没有任何池代码,这只是一团糟。
java - 如何将 Spring bean 注入 Apache Commons Pooling 类流程中由反射生成的类
我正在使用 Spring MVC 3.2.4 和 Apache Commons Pooling 2.3 来管理与 SOAP 服务的连接。我正在使用的其中一件事是 GenericObjectPool 类中的“空闲对象驱逐”线程功能:
使用此功能,我指定用于测试连接对象的驱逐的类的名称:
在检查 GenericObjectPool 类的 Commons Pooling 实现后,驱逐类使用反射进行实例化并执行。所有将 Spring bean 注入此类的尝试都失败了,包括使用常见技术,例如在生成的类上使用 @EnableLoadTimeWeaving 和 @Configurable 进行加载时编织。
是否可以将 Spring bean 注入到由反射在内部生成且不受 Spring 容器管理的类中?
编辑:
下面是实例化 evictor 类的方法:
这是在设定的时间间隔内在线程内执行的 run 方法:
下面是 EvictionPolicy 类的实现示例:
java - 有效池化 ByteBuffer 的实例
我正在编写一个消息传递门面,它接收任意 POJO 并以 JSON 格式通过网络发送它们,工作流程如下:
- 用户调用
MessagingFacade.sendMessage(Object)
- 从池中借用一个 ByteBuffer,我们将把消息序列化到这个缓冲区中
- 通过调用将 POJO 转换为 JSON
JsonSerializer.serialize(Object, ByteBuffer)
- 通过网络发送已编码的消息
Transport.send(ByteBuffer)
,保留对将在消息发送时通知的承诺的引用 - 将回调附加到 Promise 以在 ByteBuffer 被写入线路后将其返回到池中
- 从
MessagingFacade.sendMessage(Object)
调用返回
这是池化 ByteBuffers 的一个相对简单的用例,因为我们可以调用clear()
以在对象返回池时重置状态。
我没有编写自己的对象池,而是尝试利用 Apache 中已经提供的对象池commons-pool
。然而,似乎有一个相当大的警告GenericObjectPool
和SoftReferenceObjectPool
......
在借用/归还对象时,这两个池使用hashCode()
和/或equals()
来标识关联的PooledObject<ByteBuffer>
. ByteBuffer
鉴于equals()
和hashCode()
实现涉及评估底层byte
数组的内容,这对 有非常实际的影响:
- 对象清理 - 当对象
ByteBuffer
返回池时,它的状态为“已清理”。这仅涉及调用ByteBuffer.clear()
. 这不会将数组中的所有字节清零,这意味着返回 ,equals()
与借用时会hashCode()
给出不同的结果。ByteBuffer
- 评估速度 - 鉴于我正在
ByteBuffer
以最大消息大小 (1MB) 的容量汇集实例,评估两者hashCode()
并且equals()
必须线性遍历这个非常大的数组
Apache commons-pool 实现似乎不适合任何用例,其中(a)该类具有昂贵的equals()
实现hashCode()
或(b)hashCode()
在清理后不会产生稳定的结果。
GenericObjectPool
为这个用例制作或工作的唯一可行选择SoftReferenceObjectPool
似乎是将其包装ByteBuffer
在另一个使用身份相等/哈希码逻辑的类中。
这是可行的,但考虑到这个用例的普通程度,感觉有点麻烦。这种方法有更好的选择吗?
最后一点;由于 和 的不稳定性,equals()
实际上hashCode()
会从 中获得异常GenericObjectPool
,因为池认为您正在尝试返回一个从未从池中借来的对象:
spring - 春季数据Redis。如何知道活动、空闲连接的数量?
在 Spring 中,我有一个 jedisConnFactory 和一个像这样的 jedisPoolConfig bean
向服务器发送数据就可以了。但我不知道如何验证 JedisPoll 是否正常工作。
如何查看活动、空闲连接的数量?
java - 准备 Nashorn 引擎的 Apache Commons 池的有效方法
我正在使用Apache Commons Pool创建一个 Nashorn 引擎池。在应用程序启动时,我调用以将所有脚本的实例数preparePool()
预热到引擎中,以便它准备好立即响应调用。minIdle
eval()
invokeFunction()
热身赛
根据池大小和预加载脚本的复杂性,这需要相当长的时间。
问题
我可以只预热一个实例并安全地将其克隆到
minIdle
实例数量吗?可以安全地序列化和持久化已创建实例的克隆吗?(这将允许维护一个引擎缓存,仅在其中一项资产更改时才需要失效)
相关资源(将在适当时更新此部分)
apache - 如何关闭使用 Apache Commons Pool 的 SSH Maverick 连接对象
我正在使用 SSH Maverich Library 进行 SFTP 调用,并且我使用 apache commons pool 封装了 maverick 对象和池化连接对象。
我实现了公共池工厂方法来创建对象。
当空闲对象有资格被驱逐时,如何关闭传输层连接?
工厂中的 PSdestroyObject 不起作用。Apache 公用池版本:1.6
java - 处理 apache commons-pool 中的饥饿问题
我正在使用 1.6 版本的 apache commons-pool 库。根据javadoc,
whenExhaustedAction 指定了当池用完时 borrowObject() 方法的行为:它可以是 WHEN_EXHAUSTED_FAIL、WHEN_EXHAUSTED_GROW 或 WHEN_EXHAUSTED_BLOCK。
我想使用borrowObject,如果在指定的时间范围内没有得到对象,我需要某种句柄来处理场景(比如我将重新安排任务,如果我没有得到目标对象)
但我在这里得到的唯一选择是 NoSuchElementException,它是一个 RuntimeException,我需要捕获并处理错误场景。我对捕获 RuntimeException 持怀疑态度
这是使用 GenericObjectPool 处理对象饥饿的预期方式还是我有任何其他选择?
concurrency - Redis dequeue 上处于“停车等待”状态的线程
我有一个运行多个线程的tomcat - spring4.2 应用程序。每个线程仅从一个队列中出列,但是分配给一个队列的线程不止一个。
事情开始很好,但在几个小时/〜500k出队操作后,我发现线程出队的速度非常慢。
在 jvisualvm 中,我看到了橙色的线程,即 park 线程转储如下:
出队方法是:
将欣赏投入。该应用程序在重新启动后再次运行良好一段时间。池配置:
java - 如果 commons-pool2 可以带参数的新对象?
PooledObjectFactory的create方法没有参数
如果我的 Foo 类定义是:
这个 Foo 可以由 commons-pool 汇集吗?
谢谢你的任何建议