Return-Path: Delivered-To: apmail-hc-commits-archive@www.apache.org Received: (qmail 56409 invoked from network); 26 Aug 2009 11:45:59 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.3) by minotaur.apache.org with SMTP; 26 Aug 2009 11:45:59 -0000 Received: (qmail 50150 invoked by uid 500); 26 Aug 2009 11:45:59 -0000 Delivered-To: apmail-hc-commits-archive@hc.apache.org Received: (qmail 50117 invoked by uid 500); 26 Aug 2009 11:45:59 -0000 Mailing-List: contact commits-help@hc.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: "HttpComponents Project" Delivered-To: mailing list commits@hc.apache.org Received: (qmail 50106 invoked by uid 99); 26 Aug 2009 11:45:58 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 26 Aug 2009 11:45:58 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 26 Aug 2009 11:45:54 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id 66DA623888D7; Wed, 26 Aug 2009 11:45:33 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r807966 - in /httpcomponents/project: ./ src/site/apt/ src/site/resources/ src/site/resources/css/ Date: Wed, 26 Aug 2009 11:45:33 -0000 To: commits@hc.apache.org From: sebb@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20090826114533.66DA623888D7@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: sebb Date: Wed Aug 26 11:45:32 2009 New Revision: 807966 URL: http://svn.apache.org/viewvc?rev=807966&view=rev Log: Add eol-style native Modified: httpcomponents/project/KEYS (props changed) httpcomponents/project/src/site/apt/charter.apt (props changed) httpcomponents/project/src/site/apt/commons-httpclient-lessons.apt (contents, props changed) httpcomponents/project/src/site/apt/dev-docs.apt (props changed) httpcomponents/project/src/site/apt/goals.apt (props changed) httpcomponents/project/src/site/apt/index.apt (props changed) httpcomponents/project/src/site/apt/mail.apt (props changed) httpcomponents/project/src/site/apt/news.apt (props changed) httpcomponents/project/src/site/apt/status.apt (props changed) httpcomponents/project/src/site/apt/user-docs.apt (props changed) httpcomponents/project/src/site/resources/css/site.css (props changed) httpcomponents/project/src/site/resources/downloads.cgi (props changed) Propchange: httpcomponents/project/KEYS ------------------------------------------------------------------------------ svn:eol-style = native Propchange: httpcomponents/project/src/site/apt/charter.apt ------------------------------------------------------------------------------ svn:eol-style = native Modified: httpcomponents/project/src/site/apt/commons-httpclient-lessons.apt URL: http://svn.apache.org/viewvc/httpcomponents/project/src/site/apt/commons-httpclient-lessons.apt?rev=807966&r1=807965&r2=807966&view=diff ============================================================================== --- httpcomponents/project/src/site/apt/commons-httpclient-lessons.apt (original) +++ httpcomponents/project/src/site/apt/commons-httpclient-lessons.apt Wed Aug 26 11:45:32 2009 @@ -1,80 +1,80 @@ -~~ $HeadURL$ -~~ $Revision$ -~~ $Date$ -~~ -~~ ==================================================================== -~~ 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 -~~ . - - ---------- - Lessons Learned - Jakarta Commons HttpClient - ---------- - ---------- - ---------- - -Lessons Learned - - The HttpComponents project was undertaken following our experience in developing and - supporting Jakarta Commons HttpClient. The shortcomings and inefficiencies - listed below emerged during our work with HttpClient and prompted our action. HttpComponents - is an attempt to address these issues. - -* {Monolithic design of Commons HttpClient} - - * The use patterns of Commons HttpClient have evolved much since its first release. We - have found HttpClient used in applications it was never specifically designed - for: in spiders, in server side services such as HTTP proxies or light-weight HTTP - connectors. Essentially we saw HttpClient users trying to use it as a toolkit of generic - HTTP components. In some areas the original monolithic design of Commons HttpClient - proved quite lacking. - - * HttpClient has a rich set of features. Some of them, however, are used infrequently in - a limited number of specific cases, and represent unnecessary code bloat for a sizable - percentage of HttpClient users. Moreover, some of those infrequently used features in - Commons HttpClient were introduced at the expense of the API clarity. There are some - core HTTP components that are required by all HTTP services whether they be on the client or on the - server side. More application specific aspects of HTTP, however, cannot be adequately - represented by one monolithic library. - -* {Inherent API deficiencies of Commons HttpClient} - - * HttpMethod interface, one of the most fundamental interfaces in Commons HttpClient, - is inherently flawed. It tightly couples the HTTP request and HTTP response and implies one - to one relationship between the two, which is not always the case. - - * Abuse of inheritance. HttpMethodBase class contains the greatest chunk of processing - logic in HttpClient. It inseparably couples the logic of generating HTTP requests and - processing HTTP responses. This makes it virtually impossible to create a custom - implementation of an HttpMethod interface, essentially rendering it useless. In practice all - HTTP methods must be derived from HttpMethodBase class. - - * The fact that all HTTP methods in practical terms must be derived from one common - base (HttpMethodBase) has a number of side effects. For instance, if one needs to - introduce a common behavior across all standard HTTP methods, one would have to - subclass all the existing subclasses of the HttpMethodBase: GetMethod, PostMethod, etc. - -* {External dependencies} - - * One of the most frequently cited complaints is its dependency on Commons Logging and - Commons Codec. We would like to give the users an option to use core HTTP components +~~ $HeadURL$ +~~ $Revision$ +~~ $Date$ +~~ +~~ ==================================================================== +~~ 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 +~~ . + + ---------- + Lessons Learned - Jakarta Commons HttpClient + ---------- + ---------- + ---------- + +Lessons Learned + + The HttpComponents project was undertaken following our experience in developing and + supporting Jakarta Commons HttpClient. The shortcomings and inefficiencies + listed below emerged during our work with HttpClient and prompted our action. HttpComponents + is an attempt to address these issues. + +* {Monolithic design of Commons HttpClient} + + * The use patterns of Commons HttpClient have evolved much since its first release. We + have found HttpClient used in applications it was never specifically designed + for: in spiders, in server side services such as HTTP proxies or light-weight HTTP + connectors. Essentially we saw HttpClient users trying to use it as a toolkit of generic + HTTP components. In some areas the original monolithic design of Commons HttpClient + proved quite lacking. + + * HttpClient has a rich set of features. Some of them, however, are used infrequently in + a limited number of specific cases, and represent unnecessary code bloat for a sizable + percentage of HttpClient users. Moreover, some of those infrequently used features in + Commons HttpClient were introduced at the expense of the API clarity. There are some + core HTTP components that are required by all HTTP services whether they be on the client or on the + server side. More application specific aspects of HTTP, however, cannot be adequately + represented by one monolithic library. + +* {Inherent API deficiencies of Commons HttpClient} + + * HttpMethod interface, one of the most fundamental interfaces in Commons HttpClient, + is inherently flawed. It tightly couples the HTTP request and HTTP response and implies one + to one relationship between the two, which is not always the case. + + * Abuse of inheritance. HttpMethodBase class contains the greatest chunk of processing + logic in HttpClient. It inseparably couples the logic of generating HTTP requests and + processing HTTP responses. This makes it virtually impossible to create a custom + implementation of an HttpMethod interface, essentially rendering it useless. In practice all + HTTP methods must be derived from HttpMethodBase class. + + * The fact that all HTTP methods in practical terms must be derived from one common + base (HttpMethodBase) has a number of side effects. For instance, if one needs to + introduce a common behavior across all standard HTTP methods, one would have to + subclass all the existing subclasses of the HttpMethodBase: GetMethod, PostMethod, etc. + +* {External dependencies} + + * One of the most frequently cited complaints is its dependency on Commons Logging and + Commons Codec. We would like to give the users an option to use core HTTP components without any external libraries and a minimal footprint. \ No newline at end of file Propchange: httpcomponents/project/src/site/apt/commons-httpclient-lessons.apt ------------------------------------------------------------------------------ svn:eol-style = native Propchange: httpcomponents/project/src/site/apt/commons-httpclient-lessons.apt ('svn:executable' removed) Propchange: httpcomponents/project/src/site/apt/dev-docs.apt ------------------------------------------------------------------------------ svn:eol-style = native Propchange: httpcomponents/project/src/site/apt/goals.apt ------------------------------------------------------------------------------ svn:eol-style = native Propchange: httpcomponents/project/src/site/apt/index.apt ------------------------------------------------------------------------------ svn:eol-style = native Propchange: httpcomponents/project/src/site/apt/mail.apt ------------------------------------------------------------------------------ svn:eol-style = native Propchange: httpcomponents/project/src/site/apt/news.apt ------------------------------------------------------------------------------ svn:eol-style = native Propchange: httpcomponents/project/src/site/apt/status.apt ------------------------------------------------------------------------------ svn:eol-style = native Propchange: httpcomponents/project/src/site/apt/user-docs.apt ------------------------------------------------------------------------------ svn:eol-style = native Propchange: httpcomponents/project/src/site/resources/css/site.css ------------------------------------------------------------------------------ svn:eol-style = native Propchange: httpcomponents/project/src/site/resources/downloads.cgi ------------------------------------------------------------------------------ svn:eol-style = native