View Javadoc

1   /*
2    * ====================================================================
3    *
4    *  Licensed to the Apache Software Foundation (ASF) under one or more
5    *  contributor license agreements.  See the NOTICE file distributed with
6    *  this work for additional information regarding copyright ownership.
7    *  The ASF licenses this file to You under the Apache License, Version 2.0
8    *  (the "License"); you may not use this file except in compliance with
9    *  the License.  You may obtain a copy of the License at
10   *
11   *      http://www.apache.org/licenses/LICENSE-2.0
12   *
13   *  Unless required by applicable law or agreed to in writing, software
14   *  distributed under the License is distributed on an "AS IS" BASIS,
15   *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16   *  See the License for the specific language governing permissions and
17   *  limitations under the License.
18   * ====================================================================
19   *
20   * This software consists of voluntary contributions made by many
21   * individuals on behalf of the Apache Software Foundation.  For more
22   * information on the Apache Software Foundation, please see
23   * <http://www.apache.org/>.
24   *
25   */
26  
27  package org.apache.http.conn;
28  
29  import java.io.IOException;
30  
31  /**
32   * Interface for releasing a connection. This can be implemented by various
33   * "trigger" objects which are associated with a connection, for example
34   * a {@link EofSensorInputStream stream} or an {@link BasicManagedEntity entity}
35   * or the {@link ManagedClientConnection connection} itself.
36   * <p>
37   * The methods in this interface can safely be called multiple times.
38   * The first invocation releases the connection, subsequent calls
39   * are ignored.
40   *
41   * @since 4.0
42   */
43  public interface ConnectionReleaseTrigger {
44  
45      /**
46       * Releases the connection with the option of keep-alive. This is a
47       * "graceful" release and may cause IO operations for consuming the
48       * remainder of a response entity. Use
49       * {@link #abortConnection abortConnection} for a hard release. The
50       * connection may be reused as specified by the duration.
51       *
52       * @throws IOException
53       *             in case of an IO problem. The connection will be released
54       *             anyway.
55       */
56      void releaseConnection()
57          throws IOException;
58  
59      /**
60       * Releases the connection without the option of keep-alive.
61       * This is a "hard" release that implies a shutdown of the connection.
62       * Use {@link #releaseConnection()} for a graceful release.
63       *
64       * @throws IOException      in case of an IO problem.
65       *         The connection will be released anyway.
66       */
67      void abortConnection()
68          throws IOException;
69  
70  }