/** * Add a buffered response to the redirect buffer. * * @param sessionId * the session id * @param bufferId * the id that should be used for storing the buffer * @param renderedResponse * the response to buffer */ final void addBufferedResponse(String sessionId, String bufferId, BufferedHttpServletResponse renderedResponse) { Map responsesPerSession = (Map)bufferedResponses.get(sessionId); if (responsesPerSession == null) { responsesPerSession = new MostRecentlyUsedMap(4); bufferedResponses.put(sessionId, responsesPerSession); } responsesPerSession.put(bufferId, renderedResponse); }
/** * @see java.util.LinkedHashMap#removeEldestEntry(java.util.Map.Entry) */ protected boolean removeEldestEntry(final Map.Entry eldest) { final boolean remove = size() > maxEntries; // when it should be removed remember the oldest value that will be removed if (remove) { this.removedValue = eldest.getValue(); } else { removedValue = null; } return remove; } }
@Override public BufferedWebResponse remove(Object key) { Value removedValue; synchronized (this) { removedValue = (Value)super.remove(key); } return removedValue != null ? removedValue.response : null; }
@Override public BufferedWebResponse put(String key, Object bufferedResponse) { if (!(bufferedResponse instanceof BufferedWebResponse)) { throw new IllegalArgumentException(StoredResponsesMap.class.getSimpleName() + " can store only instances of " + BufferedWebResponse.class.getSimpleName()); } Value value = new Value(); value.creationTime = Time.now(); value.response = (BufferedWebResponse)bufferedResponse; Value oldValue; synchronized (this) { oldValue = (Value)super.put(key, value); } return oldValue != null ? oldValue.response : null; }
@Override protected synchronized boolean removeEldestEntry(java.util.Map.Entry<String, Object> eldest) { boolean removed = super.removeEldestEntry(eldest); if (removed == false) { Value value = (Value)eldest.getValue(); if (value != null) { Duration elapsedTime = Time.now().subtract(value.creationTime); if (lifetime.lessThanOrEqual(elapsedTime)) { removedValue = value.response; removed = true; } } } return removed; }
@Override public BufferedWebResponse get(Object key) { BufferedWebResponse result = null; Value value; synchronized (this) { value = (Value)super.get(key); } if (value != null) { Duration elapsedTime = Time.now().subtract(value.creationTime); if (lifetime.greaterThan(elapsedTime)) { result = value.response; } else { // expired, remove it remove(key); } } return result; }
@Override public BufferedWebResponse put(String key, Object bufferedResponse) { if (!(bufferedResponse instanceof BufferedWebResponse)) { throw new IllegalArgumentException(StoredResponsesMap.class.getSimpleName() + " can store only instances of " + BufferedWebResponse.class.getSimpleName()); } Value value = new Value(); value.creationTime = Time.now(); value.response = (BufferedWebResponse)bufferedResponse; Value oldValue; synchronized (this) { oldValue = (Value)super.put(key, value); } return oldValue != null ? oldValue.response : null; }
@Override protected synchronized boolean removeEldestEntry(java.util.Map.Entry<String, Object> eldest) { boolean removed = super.removeEldestEntry(eldest); if (removed == false) { Value value = (Value)eldest.getValue(); if (value != null) { Duration elapsedTime = Time.now().subtract(value.creationTime); if (lifetime.lessThanOrEqual(elapsedTime)) { removedValue = value.response; removed = true; } } } return removed; }
@Override public BufferedWebResponse get(Object key) { BufferedWebResponse result = null; Value value; synchronized (this) { value = (Value)super.get(key); } if (value != null) { Duration elapsedTime = Time.now().subtract(value.creationTime); if (lifetime.greaterThan(elapsedTime)) { result = value.response; } else { // expired, remove it remove(key); } } return result; }
/** * create version cache * <p/> * the cache will accept a maximum number of entries specified * by <code>maxEntries</code> before evicting the oldest entries. * * @param delegate * resource version provider * @param maxEntries * maximum number of cache entries */ public CachingResourceVersion(IResourceVersion delegate, int maxEntries) { if (maxEntries < 1) { throw new IllegalArgumentException("maxEntries must be greater than zero"); } this.delegate = Args.notNull(delegate, "delegate"); this.cache = Collections.synchronizedMap( new MostRecentlyUsedMap<Serializable, String>(maxEntries)); }
/** * @see java.util.LinkedHashMap#removeEldestEntry(java.util.Map.Entry) */ @Override protected boolean removeEldestEntry(final Map.Entry<K, V> eldest) { final boolean remove = size() > maxEntries; // when it should be removed remember the oldest value that will be removed if (remove) { this.removedValue = eldest.getValue(); } else { removedValue = null; } return remove; } }
@Override public BufferedWebResponse remove(Object key) { Value removedValue; synchronized (this) { removedValue = (Value)super.remove(key); } return removedValue != null ? removedValue.response : null; }
/** * create version cache * <p/> * the cache will accept a maximum number of entries specified * by <code>maxEntries</code> before evicting the oldest entries. * * @param delegate * resource version provider * @param maxEntries * maximum number of cache entries */ public CachingResourceVersion(IResourceVersion delegate, int maxEntries) { if (maxEntries < 1) { throw new IllegalArgumentException("maxEntries must be greater than zero"); } this.delegate = Args.notNull(delegate, "delegate"); this.cache = Collections.synchronizedMap( new MostRecentlyUsedMap<Serializable, String>(maxEntries)); }
/** * @see java.util.LinkedHashMap#removeEldestEntry(java.util.Map.Entry) */ @Override protected boolean removeEldestEntry(final Map.Entry<K, V> eldest) { final boolean remove = size() > maxEntries; // when it should be removed remember the oldest value that will be removed if (remove) { this.removedValue = eldest.getValue(); } else { removedValue = null; } return remove; } }
/** * Add a buffered response to the redirect buffer. * * @param sessionId * the session id * @param bufferId * the id that should be used for storing the buffer * @param renderedResponse * the response to buffer */ final void addBufferedResponse(String sessionId, String bufferId, BufferedHttpServletResponse renderedResponse) { Map<String, BufferedHttpServletResponse> responsesPerSession = bufferedResponses.get(sessionId); if (responsesPerSession == null) { responsesPerSession = Collections.synchronizedMap(new MostRecentlyUsedMap<String, BufferedHttpServletResponse>( 4)); Map<String, BufferedHttpServletResponse> previousValue = bufferedResponses.putIfAbsent( sessionId, responsesPerSession); if (previousValue != null) { responsesPerSession = previousValue; } } String bufferKey = bufferId.startsWith("/") ? bufferId.substring(1) : bufferId; responsesPerSession.put(bufferKey, renderedResponse); }