1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 package org.apache.http.impl.nio.conn;
28
29 import java.util.concurrent.TimeUnit;
30
31 import org.apache.commons.logging.Log;
32 import org.apache.commons.logging.LogFactory;
33 import org.apache.http.annotation.Contract;
34 import org.apache.http.annotation.ThreadingBehavior;
35 import org.apache.http.conn.routing.HttpRoute;
36 import org.apache.http.nio.NHttpClientConnection;
37 import org.apache.http.nio.conn.ManagedNHttpClientConnection;
38 import org.apache.http.nio.pool.AbstractNIOConnPool;
39 import org.apache.http.nio.pool.NIOConnFactory;
40 import org.apache.http.nio.pool.SocketAddressResolver;
41 import org.apache.http.nio.reactor.ConnectingIOReactor;
42
43 @Contract(threading = ThreadingBehavior.SAFE)
44 class CPool extends AbstractNIOConnPool<HttpRoute, ManagedNHttpClientConnection, CPoolEntry> {
45
46 private final Log log = LogFactory.getLog(CPool.class);
47
48 private final long timeToLive;
49 private final TimeUnit timeUnit;
50
51 public CPool(
52 final ConnectingIOReactor ioReactor,
53 final NIOConnFactory<HttpRoute, ManagedNHttpClientConnection> connFactory,
54 final SocketAddressResolver<HttpRoute> addressResolver,
55 final int defaultMaxPerRoute, final int maxTotal,
56 final long timeToLive, final TimeUnit timeUnit) {
57 super(ioReactor, connFactory, addressResolver, defaultMaxPerRoute, maxTotal);
58 this.timeToLive = timeToLive;
59 this.timeUnit = timeUnit;
60 }
61
62 @Override
63 protected CPoolEntry createEntry(final HttpRoute route, final ManagedNHttpClientConnection conn) {
64 final CPoolEntryonn/CPoolEntry.html#CPoolEntry">CPoolEntry entry = new CPoolEntry(this.log, conn.getId(), route, conn, this.timeToLive, this.timeUnit);
65 entry.setSocketTimeout(conn.getSocketTimeout());
66 return entry;
67 }
68
69 @Override
70 protected void onLease(final CPoolEntry entry) {
71 final NHttpClientConnection conn = entry.getConnection();
72 conn.setSocketTimeout(entry.getSocketTimeout());
73 }
74
75 @Override
76 protected void onRelease(final CPoolEntry entry) {
77 final NHttpClientConnection conn = entry.getConnection();
78 conn.setSocketTimeout(0);
79 }
80
81 }