ovidiu 02/04/09 17:35:06
Modified: src/scratchpad/schecoon/src/org/apache/cocoon/components/flow
ContinuationsManagerImpl.java
Log:
Pass and additional time-to-live argument in
createWebContinuation(). Added an 'expirations' sorted set to maintain
continuations in the order of their expiration.
Revision Changes Path
1.3 +20 -7
xml-cocoon2/src/scratchpad/schecoon/src/org/apache/cocoon/components/flow/ContinuationsManagerImpl.java
Index: ContinuationsManagerImpl.java
===================================================================
RCS file:
/home/cvs/xml-cocoon2/src/scratchpad/schecoon/src/org/apache/cocoon/components/flow/ContinuationsManagerImpl.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- ContinuationsManagerImpl.java 2 Apr 2002 04:59:49 -0000 1.2
+++ ContinuationsManagerImpl.java 10 Apr 2002 00:35:06 -0000 1.3
@@ -2,17 +2,20 @@
import java.security.SecureRandom;
import java.util.Collections;
+import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
+import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
+import java.util.SortedSet;
+import java.util.TreeSet;
import org.apache.avalon.framework.component.Component;
import org.apache.avalon.framework.configuration.Configurable;
import org.apache.avalon.framework.configuration.Configuration;
import org.apache.avalon.framework.logger.AbstractLoggable;
import org.apache.avalon.framework.thread.ThreadSafe;
-import java.util.Iterator;
/**
* The default implementation of {@link ContinuationsManager}.
@@ -33,10 +36,8 @@
/**
* How long does a continuation exist in memory since the last
* access? The time is in seconds, and the default is 3600 (1 hour).
- *
- * FIXME: Not used for the moment.
*/
- protected int timeToLive;
+ protected int defaultTimeToLive;
/**
* Maintains the forrest of <code>WebContinuation</code> trees.
@@ -49,6 +50,13 @@
*/
protected Map idToWebCont = Collections.synchronizedMap(new HashMap());
+ /**
+ * Sorted set of <code>WebContinuation</code> instances, based on
+ * their expiration time. This is used by the background thread to
+ * invalidate continuations.
+ */
+ protected SortedSet expirations = new TreeSet();
+
public ContinuationsManagerImpl()
throws Exception
{
@@ -59,17 +67,21 @@
public void configure(Configuration config)
{
- this.timeToLive = config.getAttributeAsInteger("time-to-live", 3600);
+ defaultTimeToLive = config.getAttributeAsInteger("time-to-live", 3600);
}
public WebContinuation createWebContinuation(Object kont,
- WebContinuation parentKont)
+ WebContinuation parentKont,
+ int timeToLive)
{
- WebContinuation wk = new WebContinuation(kont, parentKont, this);
+ int ttl = (timeToLive == 0 ? defaultTimeToLive : timeToLive);
+ WebContinuation wk = new WebContinuation(kont, parentKont, this, ttl);
if (parentKont == null)
forrest.add(wk);
+ expirations.add(wk);
+
// No need to add the WebContinuation in idToWebCont as it was
// already done during its construction.
@@ -92,6 +104,7 @@
protected void _invalidate(WebContinuation wk)
{
idToWebCont.remove(wk.getId());
+ expirations.remove(wk);
// Invalidate all the children continuations as well
List children = wk.getChildren();
----------------------------------------------------------------------
In case of troubles, e-mail: [EMAIL PROTECTED]
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]