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.conn;
28
29 import java.util.concurrent.TimeUnit;
30 import java.util.concurrent.atomic.AtomicLong;
31
32 import org.apache.commons.logging.Log;
33 import org.apache.commons.logging.LogFactory;
34 import org.apache.http.annotation.Contract;
35 import org.apache.http.annotation.ThreadingBehavior;
36 import org.apache.http.conn.ManagedHttpClientConnection;
37 import org.apache.http.conn.routing.HttpRoute;
38 import org.apache.http.pool.AbstractConnPool;
39 import org.apache.http.pool.ConnFactory;
40 import org.apache.http.pool.PoolEntryCallback;
41
42
43
44
45 @Contract(threading = ThreadingBehavior.SAFE)
46 class CPool extends AbstractConnPool<HttpRoute, ManagedHttpClientConnection, CPoolEntry> {
47
48 private static final AtomicLong COUNTER = new AtomicLong();
49
50 private final Log log = LogFactory.getLog(CPool.class);
51 private final long timeToLive;
52 private final TimeUnit timeUnit;
53
54 public CPool(
55 final ConnFactory<HttpRoute, ManagedHttpClientConnection> connFactory,
56 final int defaultMaxPerRoute, final int maxTotal,
57 final long timeToLive, final TimeUnit timeUnit) {
58 super(connFactory, defaultMaxPerRoute, maxTotal);
59 this.timeToLive = timeToLive;
60 this.timeUnit = timeUnit;
61 }
62
63 @Override
64 protected CPoolEntry createEntry(final HttpRoute route, final ManagedHttpClientConnection conn) {
65 final String id = Long.toString(COUNTER.getAndIncrement());
66 return new CPoolEntry(this.log, id, route, conn, this.timeToLive, this.timeUnit);
67 }
68
69 @Override
70 protected boolean validate(final CPoolEntry entry) {
71 return !entry.getConnection().isStale();
72 }
73
74 @Override
75 protected void enumAvailable(final PoolEntryCallback<HttpRoute, ManagedHttpClientConnection> callback) {
76 super.enumAvailable(callback);
77 }
78
79 @Override
80 protected void enumLeased(final PoolEntryCallback<HttpRoute, ManagedHttpClientConnection> callback) {
81 super.enumLeased(callback);
82 }
83
84 }