You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by tc...@apache.org on 2005/01/31 01:52:05 UTC

svn commit: r149195 - in jakarta/commons/sandbox/javaflow/trunk: .classpath project.xml src/java/org/apache/commons/javaflow/Continuation.java src/test/org/apache/commons/javaflow/ContinuationClassLoaderTestCase.java src/test/org/apache/commons/javaflow/testcode/Calculator.java

Author: tcurdt
Date: Sun Jan 30 16:52:04 2005
New Revision: 149195

URL: http://svn.apache.org/viewcvs?view=rev&rev=149195
Log:
added some fixes from phil@whirlycott.com


Removed:
    jakarta/commons/sandbox/javaflow/trunk/.classpath
Modified:
    jakarta/commons/sandbox/javaflow/trunk/project.xml
    jakarta/commons/sandbox/javaflow/trunk/src/java/org/apache/commons/javaflow/Continuation.java
    jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/ContinuationClassLoaderTestCase.java
    jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/testcode/Calculator.java

Modified: jakarta/commons/sandbox/javaflow/trunk/project.xml
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/javaflow/trunk/project.xml?view=diff&r1=149194&r2=149195
==============================================================================
--- jakarta/commons/sandbox/javaflow/trunk/project.xml (original)
+++ jakarta/commons/sandbox/javaflow/trunk/project.xml Sun Jan 30 16:52:04 2005
@@ -32,7 +32,7 @@
     <unitTestSourceDirectory>src/test</unitTestSourceDirectory>
     <unitTest>
       <includes>
-        <include>**/*Test.java</include>
+        <include>**/*TestCase.java</include>
       </includes>
     </unitTest>
   </build>
@@ -67,6 +67,12 @@
      <groupId>ant</groupId>
      <artifactId>ant</artifactId>
      <version>1.5.3-1</version>
+   </dependency>
+
+   <dependency>
+     <groupId>junit</groupId>
+     <artifactId>junit</artifactId>
+     <version>3.8.1</version>
    </dependency>
 
   </dependencies>

Modified: jakarta/commons/sandbox/javaflow/trunk/src/java/org/apache/commons/javaflow/Continuation.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/javaflow/trunk/src/java/org/apache/commons/javaflow/Continuation.java?view=diff&r1=149194&r2=149195
==============================================================================
--- jakarta/commons/sandbox/javaflow/trunk/src/java/org/apache/commons/javaflow/Continuation.java (original)
+++ jakarta/commons/sandbox/javaflow/trunk/src/java/org/apache/commons/javaflow/Continuation.java Sun Jan 30 16:52:04 2005
@@ -30,7 +30,7 @@
  *
  * @author <a href="mailto:stephan@apache.org">Stephan Michels</a>
  * @author <a href="mailto:tcurdt@apache.org">Torsten Curdt</a>
- * @version CVS $Id: Continuation.java,v 1.1 2005/01/23 03:55:21 tcurdt Exp $
+ * @version CVS $Id:$
  */
 public class Continuation implements Serializable {
 
@@ -42,6 +42,7 @@
     private final static transient Map continuationsMap = new HashMap();
 
     private boolean restoring = false;
+
     private boolean capturing = false;
 
     /**
@@ -56,95 +57,87 @@
     }
 
     /**
-     * Return the stack, which is used to store the frame information.
-    private Stack getStack() {
-        return stack;
-    }
+     * Return the stack, which is used to store the frame information. private
+     * Stack getStack() { return stack; }
      */
 
-
     // REVISIT
     private Object context;
+
     public Object getContext() {
         return context;
     }
-    
-    public static Continuation continueWith(
-            final Continuation parent,
-            final ContinuationContext context
-            ) {
 
-        // setup context outside
-        
+    /**
+     * Creates a new continuation to capture the
+     * next state. Resume where the old one was
+     * suspended.
+     * 
+     * @param parent parent continuation or null
+     * @param context context of the continuation
+     * @return new child continuation
+     */
+    public static Continuation continueWith(final Continuation parent, final ContinuationContext context) {
+
         final Continuation newContinuation = new Continuation(parent);
-        
+
         if (parent != null) {
             log.debug("resuming continuation " + parent);
             newContinuation.restoring = true;
-        }
-        else {
+        } else {
             log.debug("starting new flow");
             // create continuable instance
         }
 
         newContinuation.registerThread();
-
         newContinuation.context = context;
-        
+
         final Object instance = context.getInstance();
         final Method method = context.getMethod();
 
         try {
             method.invoke(instance, new Object[0]);
-        }
-        catch(Exception e) {
-            log.error("could not execute " + instance + " " + method, e);
-        }
-        finally {
-            
+
+        } catch (final Exception e) {
+            log.error("could not execute " + instance + " " + method, e);       
+        } finally {
             if (newContinuation.capturing) {
                 newContinuation.stack.popReference();
             }
 
             newContinuation.context = null;
-
             newContinuation.deregisterThread();
         }
-        
+
         return newContinuation;
     }
-    
+
     /**
      * Stop the running continuation.
      */
     public static void suspend() {
-    	
-    	log.debug("suspend()");
+        log.debug("suspend()");
 
-        Continuation continuation = Continuation.currentContinuation();
+        final Continuation continuation = Continuation.currentContinuation();
 
         if (continuation == null)
             throw new IllegalStateException("no continuation is running");
 
-        if (continuation.restoring) {
-            continuation.capturing = false;
-        } else {
-            continuation.capturing = true;
-        }
-        
+        continuation.capturing = !continuation.restoring;        
         continuation.restoring = false;
     }
 
     /**
-     * True, if the continuation restores the previous stack trace to the
-     * last invocation of suspend().
+     * True, if the continuation restores the previous stack trace to the last
+     * invocation of suspend().
      */
     public boolean isRestoring() {
         return restoring;
     }
 
     /**
-     * True, is the continuation freeze the strack trace, and stops the continuation.
+     * True, is the continuation freeze the strack trace, and stops the
+     * continuation.
      */
     public boolean isCapturing() {
         return capturing;
@@ -153,7 +146,7 @@
     public Stack getStack() {
         return stack;
     }
-    
+
     /**
      * Bind the continuation to running thread.
      */
@@ -173,13 +166,11 @@
     }
 
     /**
-     * Return the continuation, which is associated to the
-     * current thread.
+     * Return the continuation, which is associated to the current thread.
      */
     public static Continuation currentContinuation() {
         synchronized (continuationsMap) {
-            Thread t = Thread.currentThread();
-            return (Continuation) continuationsMap.get(t);
+            return (Continuation) continuationsMap.get(Thread.currentThread());
         }
     }
 }

Modified: jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/ContinuationClassLoaderTestCase.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/ContinuationClassLoaderTestCase.java?view=diff&r1=149194&r2=149195
==============================================================================
--- jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/ContinuationClassLoaderTestCase.java (original)
+++ jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/ContinuationClassLoaderTestCase.java Sun Jan 30 16:52:04 2005
@@ -18,6 +18,8 @@
 import java.lang.reflect.Method;
 import java.util.Map;
 
+import junit.framework.TestCase;
+
 import org.apache.commons.javaflow.utils.ReflectionUtils;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
@@ -27,40 +29,65 @@
  * @author tcurdt
  *
  */
-public final class ContinuationClassLoaderTestCase {
+public final class ContinuationClassLoaderTestCase extends TestCase {
 
+    /**
+     * Logger.
+     */
     private final static Log log = LogFactory.getLog(ContinuationClassLoaderTestCase.class);
 
-    private void testCalculator() throws Exception {
+    public void testCalculator() throws Exception {
+        log.debug("Doing testCalculator()");
+        
+        final String calculatorTestClass = "org.apache.commons.javaflow.testcode.Calculator";
+
+        // creating object instance
         final ClassLoader cl = new ContinuationClassLoader(getClass().getClassLoader());
-        final Class clazz = cl.loadClass("org.apache.commons.javaflow.testcode.Calculator");
- 
-        final Map m = ReflectionUtils.discoverMethods(clazz);
+        final Class clazz = cl.loadClass(calculatorTestClass);
+        assertNotNull(clazz);
         final Object instance = clazz.newInstance();
+        assertNotNull(instance);
+ 
+        // get method called "main"
+        final Map methods = ReflectionUtils.discoverMethods(clazz);
+        assertNotNull(methods);
+        final Method method = (Method) methods.get("main");
+        assertNotNull(method);
         
-        Continuation c = null;
+        Continuation continuation = null;
         ContinuationContext context = null;
-
+        
         
         context = new ContinuationContext();
-        context.setMethod((Method)m.get("main"));
+        context.setMethod(method);
         context.setInstance(instance);
-
-        log.debug("continuation 1");        
-        c = Continuation.continueWith(c, context);
-
         
+        log.debug("Continuation 1");
+        continuation = Continuation.continueWith(continuation, context);
+        
+        
+        final Continuation parent = continuation;
+
         context = new ContinuationContext();
-        context.setMethod((Method)m.get("main"));
+        context.setMethod(method);
         context.setInstance(instance);
 
-        log.debug("continuation 2");
-        c = Continuation.continueWith(c, context);
+        log.debug("Continuation 1.1");
+        final Continuation continuation11 = Continuation.continueWith(parent, context);
 
+        log.debug("Continuation 1.2");
+        final Continuation continuation12 = Continuation.continueWith(parent, context);
+        
     }
     
-    public static void main(String[] args) throws Exception {
-        ContinuationClassLoaderTestCase t = new ContinuationClassLoaderTestCase();
+    
+    /**
+     * The junit tests are preferred over running this main() method.
+     * @param args
+     * @throws Exception
+     */
+    public static void main(final String[] args) throws Exception {
+        final ContinuationClassLoaderTestCase t = new ContinuationClassLoaderTestCase();
         t.testCalculator();
     }
 }

Modified: jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/testcode/Calculator.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/testcode/Calculator.java?view=diff&r1=149194&r2=149195
==============================================================================
--- jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/testcode/Calculator.java (original)
+++ jakarta/commons/sandbox/javaflow/trunk/src/test/org/apache/commons/javaflow/testcode/Calculator.java Sun Jan 30 16:52:04 2005
@@ -19,6 +19,8 @@
 
 import org.apache.commons.javaflow.Continuable;
 import org.apache.commons.javaflow.Continuation;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
 
 /**
  * @author tcurdt
@@ -26,13 +28,18 @@
  */
 public final class Calculator implements Continuable, Serializable {
     
+    /**
+     * Logger.
+     */
+    private static final Log log = LogFactory.getLog(Calculator.class);
+    
     public void main() {
 
-        System.out.println("Calculator1");
+        log.debug("Calculator1");
 
         Continuation.suspend();
         
-        System.out.println("Calculator2");
+        log.debug("Calculator2");
         
     }
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org