Return-Path: X-Original-To: apmail-chemistry-commits-archive@www.apache.org Delivered-To: apmail-chemistry-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 02B5F9136 for ; Wed, 14 Dec 2011 15:05:07 +0000 (UTC) Received: (qmail 32888 invoked by uid 500); 14 Dec 2011 15:05:06 -0000 Delivered-To: apmail-chemistry-commits-archive@chemistry.apache.org Received: (qmail 32848 invoked by uid 500); 14 Dec 2011 15:05:06 -0000 Mailing-List: contact commits-help@chemistry.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@chemistry.apache.org Delivered-To: mailing list commits@chemistry.apache.org Received: (qmail 32838 invoked by uid 99); 14 Dec 2011 15:05:06 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 14 Dec 2011 15:05:06 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.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, 14 Dec 2011 15:05:03 +0000 Received: from eris.apache.org (localhost [127.0.0.1]) by eris.apache.org (Postfix) with ESMTP id 8278923889D7; Wed, 14 Dec 2011 15:04:41 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1214286 - /chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/cookies/CmisCookieStoreImpl.java Date: Wed, 14 Dec 2011 15:04:41 -0000 To: commits@chemistry.apache.org From: fmui@apache.org X-Mailer: svnmailer-1.0.8-patched Message-Id: <20111214150441.8278923889D7@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: fmui Date: Wed Dec 14 15:04:41 2011 New Revision: 1214286 URL: http://svn.apache.org/viewvc?rev=1214286&view=rev Log: Limit the number of cookies per session Modified: chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/cookies/CmisCookieStoreImpl.java Modified: chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/cookies/CmisCookieStoreImpl.java URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/cookies/CmisCookieStoreImpl.java?rev=1214286&r1=1214285&r2=1214286&view=diff ============================================================================== --- chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/cookies/CmisCookieStoreImpl.java (original) +++ chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-bindings/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/cookies/CmisCookieStoreImpl.java Wed Dec 14 15:04:41 2011 @@ -27,7 +27,7 @@ import java.net.URI; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; -import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Set; @@ -38,18 +38,38 @@ import java.util.Set; class CmisCookieStoreImpl implements Serializable { private static final long serialVersionUID = 1L; - private Map> storeMap = new HashMap>(); + private final Map> storeMap; + + public CmisCookieStoreImpl() { + this(1000); + } + + public CmisCookieStoreImpl(final int maxUrls) { + storeMap = new LinkedHashMap>(maxUrls + 1, 0.70f, true) { + private static final long serialVersionUID = 1L; + + @Override + public boolean removeEldestEntry(Map.Entry> eldest) { + return size() > maxUrls; + } + }; + } public void add(URI uri, CmisHttpCookie cookie) { if (uri == null || cookie == null) { throw new NullPointerException(); } - ArrayList cookies; + ArrayList cookies = null; if (storeMap.containsKey(uri)) { cookies = storeMap.get(uri); cookies.remove(cookie); cookies.add(cookie); + + // eliminate expired cookies + if (cookies.size() > 1) { + cleanCookieList(cookies); + } } else { cookies = new ArrayList(); cookies.add(cookie); @@ -68,11 +88,7 @@ class CmisCookieStoreImpl implements Ser cookies = new ArrayList(); } else { // eliminate expired cookies - for (CmisHttpCookie cookie : cookies) { - if (cookie.hasExpired()) { - cookies.remove(cookie); - } - } + cleanCookieList(cookies); } // get cookies whose domain matches the given URI @@ -96,6 +112,14 @@ class CmisCookieStoreImpl implements Ser return cookies; } + private void cleanCookieList(List cookies) { + for (CmisHttpCookie cookie : cookies) { + if (cookie.hasExpired()) { + cookies.remove(cookie); + } + } + } + public List getCookies() { List cookies = new ArrayList(); Collection> values = storeMap.values();