在生产中使用公共池的提示

Dav*_*itz 9 java sockets pool

基于我在这里得到的答案,我开始认真对待公共泳池.我最近使用它的经历是在2003年左右,可能是版本1.1或1.2.它的主要用户DBCP被许多人认为是有缺陷的并且要避免.

有没有人在生产中使用公共池来编写自己的池?什么是最好的泳池类型?我打算在其中存储客户端 TCP套接字.

是否有另一个通用池替换它?

Con*_*ion 9

有没有人在生产中使用公共池来编写自己的池?

是的,我这样做,并且池保持TCP连接,就像你想要的那样.它是通过Spring连接的,所以假设您了解Spring配置:

<bean class="com.company.ConnectionSupplier">
<constructor-arg>
  <!-- The ConnectionSupplier wraps an object pool -->
  <bean class="org.apache.commons.pool.impl.GenericObjectPool">
    <constructor-arg>
       <!-- The ObjectPool uses a ConnectionFactory to build new connections -->
       <bean class="com.company.ConnectionFactory">
         <constructor-arg value="server" />
         <constructor-arg value="3000" />  
       </bean>  
    </constructor-arg>
    <property name="maxActive" value="20" />
    <property name="testOnBorrow" value="true" />
  </bean>
</constructor-arg>
</bean>  
Run Code Online (Sandbox Code Playgroud)

ConnectionFactory扩展了BasePoolableObjectFactory,是一个围绕SocketFactory的小包装器.

@First comment:ConnectionFactory构造函数接受服务器和端口.在重写的makeObject()中,它创建连接到该服务器和端口的套接字.它返回'Connection'对象,它们使用一些方便的方法来包装创建的套接字,以便通过套接字进行通信.

使用由用于通过套接字进行通信的协议提供的"ping"或"echo"来测试连接.如果没有可用,除了询问套接字是否已关闭之外,不可能对连接进行验证/测试.在这种情况下,如果池中的连接引发异常,并且使用Connections的每个方法都应为此类故障做好准备并尝试与另一个连接进行相同的操作,则池中的连接将失效.