Có ai sử dụng hồ bơi commons trong sản xuất để viết hồ bơi của riêng bạn không?
Có, tôi làm và hồ bơi chứa các kết nối TCP, như bạn dự định. Nó có dây lên qua mùa xuân, vì vậy giả sử bạn hiểu cấu hình 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>
Các ConnectionFactory kéo dài BasePoolableObjectFactory và là một wrapper nhỏ xung quanh một SocketFactory.
@Lời bình luận đầu tiên: Trình xây dựng ConnectionFactory có một máy chủ và một cổng. Trong hàm makeObject(), nó tạo ra các ổ cắm kết nối với máy chủ và cổng đó. Nó trả về các đối tượng 'Connection' bao bọc socket được tạo ra với một số phương thức thuận tiện để giao tiếp thông qua socket.
Kết nối được kiểm tra bằng cách sử dụng loại 'ping' hoặc 'echo' được cung cấp bởi giao thức được sử dụng để giao tiếp qua socket. Nếu điều đó không có sẵn, việc xác nhận/kiểm tra kết nối là không thực sự có thể, ngoại trừ việc yêu cầu ổ cắm cho dù nó đã được đóng chưa. Trong trường hợp đó, một kết nối trong hồ bơi sẽ bị vô hiệu nếu nó ném một ngoại lệ và mọi phương pháp sử dụng kết nối phải được chuẩn bị cho loại lỗi đó và cố gắng thực hiện cùng một kết nối khác.
Đó là lần đầu tiên tôi nghe nói về DBCP bị thiếu sót ... bạn có điều gì cụ thể hơn không? – skaffman
@skaffman - hầu hết là mất kết nối không có lý do –
Điều này thật thú vị: http://static.springsource.com/projects/tc-server/6.0/admin/radmjdbc.html ... đề cập đến sự thiếu sót của DBCP. Mặc dù vậy, không có nhiều trợ giúp vì nó là nguồn đóng. – skaffman