crafterm 2002/12/06 10:20:15 Modified: src/java/org/apache/cocoon/components/flow ContinuationsManagerImpl.java WebContinuation.java flow.xconf Log: Applied patch for better logging of continuation hierarchies. PR: BZ#15078 Submitted By: Michael Melhem <[EMAIL PROTECTED]> Revision Changes Path 1.6 +43 -1 xml-cocoon2/src/java/org/apache/cocoon/components/flow/ContinuationsManagerImpl.java Index: ContinuationsManagerImpl.java =================================================================== RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/flow/ContinuationsManagerImpl.java,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- ContinuationsManagerImpl.java 5 Dec 2002 09:37:20 -0000 1.5 +++ ContinuationsManagerImpl.java 6 Dec 2002 18:20:15 -0000 1.6 @@ -112,13 +112,27 @@ int timeToLive) { int ttl = (timeToLive == 0 ? defaultTimeToLive : timeToLive); + WebContinuation wk = new WebContinuation(kont, parentKont, this, ttl); + wk.enableLogging(getLogger()); if (parentKont == null) forrest.add(wk); + // REVISIT: Place only the "leaf" nodes in the expirations Sorted Set. + if (parentKont != null) { + if (wk.getParentContinuation().getChildren().size() < 2) { + expirations.remove(wk.getParentContinuation()); + } + } + expirations.add(wk); + if (this.getLogger().isDebugEnabled()) { + displayAllContinuations(); + displayExpireSet(); + } + // No need to add the WebContinuation in idToWebCont as it was // already done during its construction. @@ -140,6 +154,9 @@ protected void _invalidate(WebContinuation wk) { + if (this.getLogger().isDebugEnabled()) { + getLogger().debug("WK: Expiring Continuation " + wk.getId()); + } idToWebCont.remove(wk.getId()); expirations.remove(wk); @@ -194,10 +211,35 @@ return continuationId; } + /** + * Dump to Log file the current contents of + * the expirations <code>SortedSet</code> + */ + public void displayExpireSet() { + Iterator iter = expirations.iterator(); + StringBuffer wkSet = new StringBuffer("\nWK: Expire Set, size: " + expirations.size()); + while (iter.hasNext()) { + final WebContinuation wk = (WebContinuation)iter.next(); + final long lat = wk.getLastAccessTime(); + wkSet.append("\nWK: ") + .append(wk.getId()) + .append(" Last Touched [") + .append(lat) + .append("]"); + } + + getLogger().debug(wkSet.toString()); + } + + /** + * Dump to Log file all <code>WebContinuation</code>s + * in the system + */ public void displayAllContinuations() { Iterator iter = forrest.iterator(); - while (iter.hasNext()) + while (iter.hasNext()) { ((WebContinuation)iter.next()).display(); + } } } 1.5 +36 -11 xml-cocoon2/src/java/org/apache/cocoon/components/flow/WebContinuation.java Index: WebContinuation.java =================================================================== RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/flow/WebContinuation.java,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- WebContinuation.java 5 Dec 2002 09:37:20 -0000 1.4 +++ WebContinuation.java 6 Dec 2002 18:20:15 -0000 1.5 @@ -49,6 +49,8 @@ import java.util.Date; import java.util.List; +import org.apache.avalon.framework.logger.AbstractLogEnabled; + /** * Representation of continuations in a Web environment. * @@ -64,7 +66,7 @@ * @author <a href="mailto:[EMAIL PROTECTED]">Ovidiu Predescu</a> * @since March 19, 2002 */ -public class WebContinuation +public class WebContinuation extends AbstractLogEnabled implements Comparable { /** @@ -136,7 +138,9 @@ this.continuation = continuation; this.parentContinuation = parentContinuation; id = manager.generateContinuationId(this); + this.updateLastAccessTime(); this.timeToLive = timeToLive; + if (parentContinuation != null) this.parentContinuation.children.add(this); } @@ -210,6 +214,17 @@ } /** + * Returns the last time this + * <code>WebContinuation</code> was accessed. + * + * @return a <code>long</code> value + */ + public long getLastAccessTime() + { + return lastAccessTime; + } + + /** * Sets the user object associated with this instance. * * @param obj an <code>Object</code> value @@ -278,7 +293,7 @@ */ public void display() { - display(0); + getLogger().debug("\nWK: Tree" + display(0)); } /** @@ -290,19 +305,29 @@ * * @param depth an <code>int</code> value */ - protected void display(int depth) + protected String display(int depth) { - StringBuffer buf = new StringBuffer(); - for (int i = 0; i < depth; i++) - buf.append(" "); - String spaces = buf.toString(); + StringBuffer tree = new StringBuffer("\n"); + for (int i = 0; i < depth; i++) { + tree.append(" "); + } - System.out.print(spaces); System.out.println("WebContinuation " + id); + tree.append("WK: WebContinuation ") + .append(id) + .append(" Last Touched [") + .append(lastAccessTime) + .append("]"); + + //REVISIT: is this needed for some reason? + //System.out.print(spaces); System.out.println("WebContinuation " + id); int size = children.size(); depth++; - for (int i = 0; i < size; i++) - ((WebContinuation)children.get(i)).display(depth); + for (int i = 0; i < size; i++) { + tree.append(((WebContinuation)children.get(i)).display(depth)); + } + + return tree.toString(); } /** @@ -310,6 +335,6 @@ */ protected void updateLastAccessTime() { - lastAccessTime = (new Date()).getTime(); + lastAccessTime = new Date().getTime(); } } 1.3 +1 -1 xml-cocoon2/src/java/org/apache/cocoon/components/flow/flow.xconf Index: flow.xconf =================================================================== RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/flow/flow.xconf,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- flow.xconf 1 Oct 2002 07:33:07 -0000 1.2 +++ flow.xconf 6 Dec 2002 18:20:15 -0000 1.3 @@ -64,6 +64,6 @@ </flow-interpreters> - <continuations time-to-live="3600"/> + <continuations logger="flow" time-to-live="3600"/> </xconf>
---------------------------------------------------------------------- In case of troubles, e-mail: [EMAIL PROTECTED] To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]