diff options
Diffstat (limited to 'src/org/apache/http/impl/conn/tsccm/package.html')
-rw-r--r-- | src/org/apache/http/impl/conn/tsccm/package.html | 205 |
1 files changed, 0 insertions, 205 deletions
diff --git a/src/org/apache/http/impl/conn/tsccm/package.html b/src/org/apache/http/impl/conn/tsccm/package.html deleted file mode 100644 index 5aca5d4..0000000 --- a/src/org/apache/http/impl/conn/tsccm/package.html +++ /dev/null @@ -1,205 +0,0 @@ -<html> -<head> -<!-- -/* - * $HeadURL: http://svn.apache.org/repos/asf/httpcomponents/httpclient/trunk/module-client/src/main/java/org/apache/http/impl/conn/tsccm/package.html $ - * $Revision: 653041 $ - * $Date: 2008-05-03 03:39:28 -0700 (Sat, 03 May 2008) $ - * - * ==================================================================== - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * <http://www.apache.org/>. - * - */ ---> -</head> -<body> - -The implementation of a thread-safe client connection manager. - -<center> -<img src="doc-files/tsccm-structure.png" alt="Relation Diagram"/> -</center> - -<p> -The implementation is structured into three areas, as illustrated -by the diagram above. -Facing the application is the <i>Manager</i> (green), which internally -maintains a <i>Pool</i> (yellow) of connections and waiting threads. -Both Manager and Pool rely on <i>Operations</i> (cyan) to provide the -actual connections. -</p> -<p> -In order to allow connection garbage collection, it is -imperative that hard object references between the areas are -restricted to the relations indicated by arrows in the diagram: -</p> -<ul> -<li>Applications reference only the Manager objects.</li> -<li>Manager objects reference Pool objects, but not vice versa.</li> -<li>Operations objects do not reference either Manager or Pool objects.</li> -</ul> - -<p> -The following table shows a selection of classes and interfaces, -and their assignment to the three areas. -</p> -<center> -<table border="1"> -<colgroup> - <col width="50%"/> - <col width="50%"/> -</colgroup> - -<tr> -<td style="text-align: center; background-color: #00ff00;"> -{@link org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager} -</td> -<td style="text-align: center; background-color: #ffff00;"> -{@link org.apache.http.impl.conn.tsccm.AbstractConnPool} -</td> -</tr> - -<tr> -<td style="text-align: center; background-color: #00ff00;"> -{@link org.apache.http.impl.conn.tsccm.BasicPooledConnAdapter} -</td> -<td style="text-align: center; background-color: #ffff00;"> -{@link org.apache.http.impl.conn.tsccm.ConnPoolByRoute} -</td> -</tr> - -<!-- appears on both sides! --> - -<tr> -<td style="text-align: right; background-color: #00ff00;"> -{@link org.apache.http.impl.conn.tsccm.BasicPoolEntry} -</td> -<td style="text-align: left; background-color: #ffff00;"> -{@link org.apache.http.impl.conn.tsccm.BasicPoolEntry} -</td> -</tr> - -<!-- ====================== --> - -<tr style="border-width: 5px;"> -</tr> - -<tr> -<td colspan="2" style="text-align: center; background-color: #00ffff;"> -{@link org.apache.http.conn.ClientConnectionOperator} -</td> -</tr> - -<tr> -<td colspan="2" style="text-align: center; background-color: #00ffff;"> -{@link org.apache.http.conn.OperatedClientConnection} -</td> -</tr> - -</table> -</center> - -<p> -The Manager area has implementations for the connection management -interfaces {@link org.apache.http.conn.ClientConnectionManager} -and {@link org.apache.http.conn.ManagedClientConnection}. -The latter is an adapter from managed to operated connections, based on a -{@link org.apache.http.impl.conn.tsccm.BasicPoolEntry}. -<br/> -The Pool area shows an abstract pool class -{@link org.apache.http.impl.conn.tsccm.AbstractConnPool} -and a concrete implementation -{@link org.apache.http.impl.conn.tsccm.ConnPoolByRoute} -which uses the same basic algorithm as the -<code>MultiThreadedHttpConnectionManager</code> -in HttpClient 3.x. -A pool contains instances of -{@link org.apache.http.impl.conn.tsccm.BasicPoolEntry}. -Most other classes in this package also belong to the Pool area. -<br/> -In the Operations area, you will find only the interfaces for -operated connections as defined in the org.apache.http.conn package. -The connection manager will work with all correct implementations -of these interfaces. This package therefore does not define anything -specific to the Operations area. -</p> - -<p> -As you have surely noticed, the -{@link org.apache.http.impl.conn.tsccm.BasicPoolEntry} -appears in both the Manager and Pool areas. -This is where things get tricky for connection garbage collection. -<br/> -A connection pool may start a background thread to implement cleanup. -In that case, the connection pool will not be garbage collected until -it is shut down, since the background thread keeps a hard reference -to the pool. The pool itself keeps hard references to the pooled entries, -which in turn reference idle connections. Neither of these is subject -to garbage collection. -Only the shutdown of the pool will stop the background thread, -thereby enabling garbage collection of the pool objects. -<br/> -A pool entry that is passed to an application by means of a connection -adapter will move from the Pool area to the Manager area. When the -connection is released by the application, the manager returns the -entry back to the pool. With that step, the pool entry moves from -the Manager area back to the Pool area. -While the entry is in the Manager area, the pool MUST NOT keep a -hard reference to it. -</p> - -<p> -The purpose of connection garbage collection is to detect when an -application fails to return a connection. In order to achieve this, -the only hard reference to the pool entry in the Manager area is -in the connection wrapper. The manager will not keep a hard reference -to the connection wrapper either, since that wrapper is effectively -moving to the Application area. -If the application drops it's reference to the connection wrapper, -that wrapper will be garbage collected, and with it the pool entry. -<br/> -In order to detect garbage collection of pool entries handed out -to the application, the pool keeps a <i>weak reference</i> to the -entry. Instances of -{@link org.apache.http.impl.conn.tsccm.BasicPoolEntryRef} -combine the weak reference with information about the route for -which the pool entry was allocated. If one of these entry references -becomes stale, the pool can accommodate for the lost connection. -This is triggered either by a background thread waiting for the -references to be queued by the garbage collector, or by the -application calling a {@link - org.apache.http.conn.ClientConnectionManager#closeIdleConnections cleanup} -method of the connection manager. -<br/> -Basically the same trick is used for detecting garbage collection -of the connection manager itself. The pool keeps a weak reference -to the connection manager that created it. However, this will work -only if there is a background thread to detect when that reference -is queued by the garbage collector. Otherwise, a finalizer of the -connection manager will shut down the pool and release it's resources. -</p> - - -</body> -</html> |