You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@oozie.apache.org by tu...@apache.org on 2012/08/03 06:59:55 UTC

svn commit: r1368795 [2/2] - in /incubator/oozie/trunk: ./ core/ core/src/main/java/org/apache/oozie/action/control/ core/src/main/java/org/apache/oozie/action/hadoop/ core/src/main/java/org/apache/oozie/command/wf/ core/src/main/java/org/apache/oozie/...

Modified: incubator/oozie/trunk/core/src/test/java/org/apache/oozie/command/wf/TestActionStartXCommand.java
URL: http://svn.apache.org/viewvc/incubator/oozie/trunk/core/src/test/java/org/apache/oozie/command/wf/TestActionStartXCommand.java?rev=1368795&r1=1368794&r2=1368795&view=diff
==============================================================================
--- incubator/oozie/trunk/core/src/test/java/org/apache/oozie/command/wf/TestActionStartXCommand.java (original)
+++ incubator/oozie/trunk/core/src/test/java/org/apache/oozie/command/wf/TestActionStartXCommand.java Fri Aug  3 04:59:53 2012
@@ -45,6 +45,7 @@ import org.apache.oozie.executor.jpa.Wor
 import org.apache.oozie.service.HadoopAccessorService;
 import org.apache.oozie.service.InstrumentationService;
 import org.apache.oozie.service.JPAService;
+import org.apache.oozie.service.LiteWorkflowStoreService;
 import org.apache.oozie.service.Services;
 import org.apache.oozie.service.UUIDService;
 import org.apache.oozie.test.XDataTestCase;
@@ -248,8 +249,9 @@ public class TestActionStartXCommand ext
      */
     protected WorkflowJobBean addRecordToWfJobTableWithCustomAppPath(WorkflowJob.Status jobStatus, WorkflowInstance.Status instanceStatus)
     throws Exception {
-        WorkflowApp app = new LiteWorkflowApp("testApp", "<workflow-app/>", new StartNodeDef("end"))
-        .addNode(new EndNodeDef("end"));
+        WorkflowApp app = new LiteWorkflowApp("testApp", "<workflow-app/>",
+            new StartNodeDef(LiteWorkflowStoreService.LiteControlNodeHandler.class, "end")).
+                addNode(new EndNodeDef("end", LiteWorkflowStoreService.LiteControlNodeHandler.class));
         Configuration conf = new Configuration();
         Path appUri = getAppPath();
         conf.set(OozieClient.APP_PATH, appUri.toString());
@@ -424,8 +426,9 @@ public class TestActionStartXCommand ext
      */
     private WorkflowJobBean addRecordToWfJobTableWithEscapedStringAndCDATA(WorkflowJob.Status jobStatus,
             WorkflowInstance.Status instanceStatus) throws Exception {
-        WorkflowApp app = new LiteWorkflowApp("testApp", "<workflow-app/>", new StartNodeDef("end"))
-                .addNode(new EndNodeDef("end"));
+        WorkflowApp app = new LiteWorkflowApp("testApp", "<workflow-app/>",
+            new StartNodeDef(LiteWorkflowStoreService.LiteControlNodeHandler.class, "end")).
+                addNode(new EndNodeDef("end", LiteWorkflowStoreService.LiteControlNodeHandler.class));
         Configuration conf = new Configuration();
         Path appUri = new Path(getAppPath(), "workflow.xml");
         conf.set(OozieClient.APP_PATH, appUri.toString());

Modified: incubator/oozie/trunk/core/src/test/java/org/apache/oozie/command/wf/TestPurgeXCommand.java
URL: http://svn.apache.org/viewvc/incubator/oozie/trunk/core/src/test/java/org/apache/oozie/command/wf/TestPurgeXCommand.java?rev=1368795&r1=1368794&r2=1368795&view=diff
==============================================================================
--- incubator/oozie/trunk/core/src/test/java/org/apache/oozie/command/wf/TestPurgeXCommand.java (original)
+++ incubator/oozie/trunk/core/src/test/java/org/apache/oozie/command/wf/TestPurgeXCommand.java Fri Aug  3 04:59:53 2012
@@ -32,6 +32,7 @@ import org.apache.oozie.executor.jpa.Wor
 import org.apache.oozie.executor.jpa.WorkflowJobGetJPAExecutor;
 import org.apache.oozie.executor.jpa.WorkflowJobInsertJPAExecutor;
 import org.apache.oozie.service.JPAService;
+import org.apache.oozie.service.LiteWorkflowStoreService;
 import org.apache.oozie.service.Services;
 import org.apache.oozie.service.UUIDService;
 import org.apache.oozie.service.WorkflowAppService;
@@ -235,8 +236,10 @@ public class TestPurgeXCommand extends X
 
     protected WorkflowJobBean addRecordToWfJobTableForNegCase(WorkflowJob.Status jobStatus,
             WorkflowInstance.Status instanceStatus) throws Exception {
-        WorkflowApp app = new LiteWorkflowApp("testApp", "<workflow-app/>", new StartNodeDef("end"))
-                .addNode(new EndNodeDef("end"));
+        WorkflowApp app =
+            new LiteWorkflowApp("testApp", "<workflow-app/>",
+                new StartNodeDef(LiteWorkflowStoreService.LiteControlNodeHandler.class, "end")).
+                    addNode(new EndNodeDef("end", LiteWorkflowStoreService.LiteControlNodeHandler.class));
         Configuration conf = new Configuration();
         Path appUri = new Path(getAppPath(), "workflow.xml");
         conf.set(OozieClient.APP_PATH, appUri.toString());

Modified: incubator/oozie/trunk/core/src/test/java/org/apache/oozie/executor/jpa/TestBulkUpdateInsertJPAExecutor.java
URL: http://svn.apache.org/viewvc/incubator/oozie/trunk/core/src/test/java/org/apache/oozie/executor/jpa/TestBulkUpdateInsertJPAExecutor.java?rev=1368795&r1=1368794&r2=1368795&view=diff
==============================================================================
--- incubator/oozie/trunk/core/src/test/java/org/apache/oozie/executor/jpa/TestBulkUpdateInsertJPAExecutor.java (original)
+++ incubator/oozie/trunk/core/src/test/java/org/apache/oozie/executor/jpa/TestBulkUpdateInsertJPAExecutor.java Fri Aug  3 04:59:53 2012
@@ -36,6 +36,7 @@ import org.apache.oozie.client.rest.Json
 import org.apache.oozie.command.SkipCommitFaultInjection;
 import org.apache.oozie.executor.jpa.WorkflowJobGetJPAExecutor;
 import org.apache.oozie.service.JPAService;
+import org.apache.oozie.service.LiteWorkflowStoreService;
 import org.apache.oozie.service.Services;
 import org.apache.oozie.test.XDataTestCase;
 import org.apache.oozie.workflow.WorkflowApp;
@@ -103,8 +104,9 @@ public class TestBulkUpdateInsertJPAExec
      * @throws Exception
      */
     public void testInserts() throws Exception{
-        WorkflowApp app = new LiteWorkflowApp("testApp", "<workflow-app/>", new StartNodeDef("end"))
-                .addNode(new EndNodeDef("end"));
+        WorkflowApp app = new LiteWorkflowApp("testApp", "<workflow-app/>",
+            new StartNodeDef(LiteWorkflowStoreService.LiteControlNodeHandler.class, "end"))
+                .addNode(new EndNodeDef("end", LiteWorkflowStoreService.LiteControlNodeHandler.class));
         Configuration conf = new Configuration();
         Path appUri = new Path(getAppPath(), "workflow.xml");
         conf.set(OozieClient.APP_PATH, appUri.toString());

Modified: incubator/oozie/trunk/core/src/test/java/org/apache/oozie/executor/jpa/TestWorkflowIdGetForExternalIdJPAExecutor.java
URL: http://svn.apache.org/viewvc/incubator/oozie/trunk/core/src/test/java/org/apache/oozie/executor/jpa/TestWorkflowIdGetForExternalIdJPAExecutor.java?rev=1368795&r1=1368794&r2=1368795&view=diff
==============================================================================
--- incubator/oozie/trunk/core/src/test/java/org/apache/oozie/executor/jpa/TestWorkflowIdGetForExternalIdJPAExecutor.java (original)
+++ incubator/oozie/trunk/core/src/test/java/org/apache/oozie/executor/jpa/TestWorkflowIdGetForExternalIdJPAExecutor.java Fri Aug  3 04:59:53 2012
@@ -24,6 +24,7 @@ import org.apache.oozie.client.WorkflowJ
 import org.apache.oozie.executor.jpa.WorkflowIdGetForExternalIdJPAExecutor;
 import org.apache.oozie.executor.jpa.WorkflowJobInsertJPAExecutor;
 import org.apache.oozie.service.JPAService;
+import org.apache.oozie.service.LiteWorkflowStoreService;
 import org.apache.oozie.service.Services;
 import org.apache.oozie.test.XDataTestCase;
 import org.apache.oozie.workflow.WorkflowApp;
@@ -65,8 +66,10 @@ public class TestWorkflowIdGetForExterna
 
     @Override
     protected WorkflowJobBean addRecordToWfJobTable(WorkflowJob.Status jobStatus, WorkflowInstance.Status instanceStatus) throws Exception {
-        WorkflowApp app = new LiteWorkflowApp("testApp", "<workflow-app/>", new StartNodeDef("end"))
-                .addNode(new EndNodeDef("end"));
+        WorkflowApp app =
+            new LiteWorkflowApp("testApp", "<workflow-app/>",
+                new StartNodeDef(LiteWorkflowStoreService.LiteControlNodeHandler.class, "end")).
+                    addNode(new EndNodeDef("end", LiteWorkflowStoreService.LiteControlNodeHandler.class));
         Configuration conf = new Configuration();
         conf.set(OozieClient.APP_PATH, "testPath");
         conf.set(OozieClient.LOG_TOKEN, "testToken");

Modified: incubator/oozie/trunk/core/src/test/java/org/apache/oozie/executor/jpa/TestWorkflowJobsGetForPurgeJPAExecutor.java
URL: http://svn.apache.org/viewvc/incubator/oozie/trunk/core/src/test/java/org/apache/oozie/executor/jpa/TestWorkflowJobsGetForPurgeJPAExecutor.java?rev=1368795&r1=1368794&r2=1368795&view=diff
==============================================================================
--- incubator/oozie/trunk/core/src/test/java/org/apache/oozie/executor/jpa/TestWorkflowJobsGetForPurgeJPAExecutor.java (original)
+++ incubator/oozie/trunk/core/src/test/java/org/apache/oozie/executor/jpa/TestWorkflowJobsGetForPurgeJPAExecutor.java Fri Aug  3 04:59:53 2012
@@ -26,6 +26,7 @@ import org.apache.oozie.WorkflowJobBean;
 import org.apache.oozie.client.OozieClient;
 import org.apache.oozie.client.WorkflowJob;
 import org.apache.oozie.service.JPAService;
+import org.apache.oozie.service.LiteWorkflowStoreService;
 import org.apache.oozie.service.Services;
 import org.apache.oozie.test.XDataTestCase;
 import org.apache.oozie.util.DateUtils;
@@ -70,8 +71,10 @@ public class TestWorkflowJobsGetForPurge
 
     @Override
     protected WorkflowJobBean addRecordToWfJobTable(WorkflowJob.Status jobStatus, WorkflowInstance.Status instanceStatus) throws Exception {
-        WorkflowApp app = new LiteWorkflowApp("testApp", "<workflow-app/>", new StartNodeDef("end"))
-                .addNode(new EndNodeDef("end"));
+        WorkflowApp app =
+            new LiteWorkflowApp("testApp", "<workflow-app/>",
+                new StartNodeDef(LiteWorkflowStoreService.LiteControlNodeHandler.class, "end")).
+                    addNode(new EndNodeDef("end", LiteWorkflowStoreService.LiteControlNodeHandler.class));
         Configuration conf = new Configuration();
         Path appUri = new Path(getAppPath(), "workflow.xml");
         conf.set(OozieClient.APP_PATH, appUri.toString());

Modified: incubator/oozie/trunk/core/src/test/java/org/apache/oozie/service/TestActionCheckerService.java
URL: http://svn.apache.org/viewvc/incubator/oozie/trunk/core/src/test/java/org/apache/oozie/service/TestActionCheckerService.java?rev=1368795&r1=1368794&r2=1368795&view=diff
==============================================================================
--- incubator/oozie/trunk/core/src/test/java/org/apache/oozie/service/TestActionCheckerService.java (original)
+++ incubator/oozie/trunk/core/src/test/java/org/apache/oozie/service/TestActionCheckerService.java Fri Aug  3 04:59:53 2012
@@ -107,7 +107,14 @@ public class TestActionCheckerService ex
         assertNotNull(jpaService);
         WorkflowActionsGetForJobJPAExecutor actionsGetExecutor = new WorkflowActionsGetForJobJPAExecutor(jobId);
         List<WorkflowActionBean> actions = jpaService.execute(actionsGetExecutor);
-        WorkflowActionBean action = actions.get(0);
+        WorkflowActionBean action = null;
+        for (WorkflowActionBean bean : actions) {
+            if (bean.getType().equals("test")) {
+                action = bean;
+                break;
+            }
+        }
+        assertNotNull(action);
         assertEquals(WorkflowActionBean.Status.RUNNING, action.getStatus());
 
         Thread.sleep(2000);
@@ -166,7 +173,14 @@ public class TestActionCheckerService ex
         assertNotNull(jpaService);
         WorkflowActionsGetForJobJPAExecutor actionsGetExecutor = new WorkflowActionsGetForJobJPAExecutor(jobId);
         List<WorkflowActionBean> actions = jpaService.execute(actionsGetExecutor);
-        WorkflowActionBean action = actions.get(0);
+        WorkflowActionBean action = null;
+        for (WorkflowActionBean bean : actions) {
+            if (bean.getType().equals("test")) {
+                action = bean;
+                break;
+            }
+        }
+        assertNotNull(action);
         assertEquals(WorkflowActionBean.Status.RUNNING, action.getStatus());
 
         action.setLastCheckTime(new Date());
@@ -180,7 +194,14 @@ public class TestActionCheckerService ex
         Thread.sleep(3000);
 
         List<WorkflowActionBean> actions2 = jpaService.execute(actionsGetExecutor);
-        WorkflowActionBean action2 = actions2.get(0);
+        WorkflowActionBean action2 = null;
+        for (WorkflowActionBean bean : actions2) {
+            if (bean.getType().equals("test")) {
+                action2 = bean;
+                break;
+            }
+        }
+        assertNotNull(action);
         assertEquals(WorkflowActionBean.Status.RUNNING, action2.getStatus());
         assertEquals(WorkflowJob.Status.RUNNING, engine.getJob(jobId).getStatus());
     }

Modified: incubator/oozie/trunk/core/src/test/java/org/apache/oozie/service/TestLiteWorkflowAppService.java
URL: http://svn.apache.org/viewvc/incubator/oozie/trunk/core/src/test/java/org/apache/oozie/service/TestLiteWorkflowAppService.java?rev=1368795&r1=1368794&r2=1368795&view=diff
==============================================================================
--- incubator/oozie/trunk/core/src/test/java/org/apache/oozie/service/TestLiteWorkflowAppService.java (original)
+++ incubator/oozie/trunk/core/src/test/java/org/apache/oozie/service/TestLiteWorkflowAppService.java Fri Aug  3 04:59:53 2012
@@ -39,6 +39,7 @@ import java.util.Collections;
 import java.util.List;
 
 import junit.framework.Assert;
+import org.apache.oozie.workflow.lite.StartNodeDef;
 
 public class TestLiteWorkflowAppService extends XTestCase {
 
@@ -266,8 +267,8 @@ public class TestLiteWorkflowAppService 
             LiteWorkflowApp app = (LiteWorkflowApp) wps.parseDef(jobConf, "authToken");
             assertNotNull(app);
             assertEquals("test-wf", app.getName());
-            assertNotNull(app.getNode("::start::"));
-            assertEquals("a", app.getNode("::start::").getTransitions().get(0));
+            assertNotNull(app.getNode(StartNodeDef.START));
+            assertEquals("a", app.getNode(StartNodeDef.START).getTransitions().get(0));
             assertEquals("b", app.getNode("a").getTransitions().get(0));
             assertEquals("c", app.getNode("a").getTransitions().get(1));
             assertEquals("c", app.getNode("a").getTransitions().get(2));

Modified: incubator/oozie/trunk/core/src/test/java/org/apache/oozie/service/TestRecoveryService.java
URL: http://svn.apache.org/viewvc/incubator/oozie/trunk/core/src/test/java/org/apache/oozie/service/TestRecoveryService.java?rev=1368795&r1=1368794&r2=1368795&view=diff
==============================================================================
--- incubator/oozie/trunk/core/src/test/java/org/apache/oozie/service/TestRecoveryService.java (original)
+++ incubator/oozie/trunk/core/src/test/java/org/apache/oozie/service/TestRecoveryService.java Fri Aug  3 04:59:53 2012
@@ -134,7 +134,14 @@ public class TestRecoveryService extends
         final WorkflowStore store = Services.get().get(WorkflowStoreService.class).create();
         store.beginTrx();
         List<WorkflowActionBean> actions = store.getActionsForWorkflow(jobId, false);
-        WorkflowActionBean action = actions.get(0);
+        WorkflowActionBean action = null;
+        for (WorkflowActionBean bean : actions) {
+            if (bean.getType().equals("test")) {
+                action = bean;
+                break;
+            }
+        }
+        assertNotNull(action);
         final String actionId = action.getId();
         assertEquals(WorkflowActionBean.Status.RUNNING, action.getStatus());
         String actionConf = action.getConf();

Modified: incubator/oozie/trunk/core/src/test/java/org/apache/oozie/service/TestStatusTransitService.java
URL: http://svn.apache.org/viewvc/incubator/oozie/trunk/core/src/test/java/org/apache/oozie/service/TestStatusTransitService.java?rev=1368795&r1=1368794&r2=1368795&view=diff
==============================================================================
--- incubator/oozie/trunk/core/src/test/java/org/apache/oozie/service/TestStatusTransitService.java (original)
+++ incubator/oozie/trunk/core/src/test/java/org/apache/oozie/service/TestStatusTransitService.java Fri Aug  3 04:59:53 2012
@@ -747,8 +747,9 @@ public class TestStatusTransitService ex
 
     protected WorkflowJobBean addRecordToWfJobTable(String wfId, WorkflowJob.Status jobStatus,
             WorkflowInstance.Status instanceStatus) throws Exception {
-        WorkflowApp app = new LiteWorkflowApp("testApp", "<workflow-app/>", new StartNodeDef("end"))
-                .addNode(new EndNodeDef("end"));
+        WorkflowApp app = new LiteWorkflowApp("testApp", "<workflow-app/>",
+            new StartNodeDef(LiteWorkflowStoreService.LiteControlNodeHandler.class, "end")).
+                addNode(new EndNodeDef("end", LiteWorkflowStoreService.LiteControlNodeHandler.class));
         Configuration conf = new Configuration();
         Path appUri = new Path(getAppPath(), "workflow.xml");
         conf.set(OozieClient.APP_PATH, appUri.toString());

Modified: incubator/oozie/trunk/core/src/test/java/org/apache/oozie/store/TestDBWorkflowStore.java
URL: http://svn.apache.org/viewvc/incubator/oozie/trunk/core/src/test/java/org/apache/oozie/store/TestDBWorkflowStore.java?rev=1368795&r1=1368794&r2=1368795&view=diff
==============================================================================
--- incubator/oozie/trunk/core/src/test/java/org/apache/oozie/store/TestDBWorkflowStore.java (original)
+++ incubator/oozie/trunk/core/src/test/java/org/apache/oozie/store/TestDBWorkflowStore.java Fri Aug  3 04:59:53 2012
@@ -17,6 +17,7 @@
  */
 package org.apache.oozie.store;
 
+import org.apache.oozie.service.LiteWorkflowStoreService;
 import org.apache.oozie.util.XLog;
 
 import java.sql.SQLException;
@@ -119,8 +120,9 @@ public class TestDBWorkflowStore extends
 
     private void _testInsertWF() throws Exception {
         store.beginTrx();
-        WorkflowApp app = new LiteWorkflowApp("testApp", "<workflow-app/>", new StartNodeDef("end"))
-                .addNode(new EndNodeDef("end"));
+        WorkflowApp app = new LiteWorkflowApp("testApp", "<workflow-app/>",
+            new StartNodeDef(LiteWorkflowStoreService.LiteControlNodeHandler.class, "end")).
+            addNode(new EndNodeDef("end", LiteWorkflowStoreService.LiteControlNodeHandler.class));
         Configuration conf1 = new Configuration();
 
         conf1.set(OozieClient.APP_PATH, "testPath");
@@ -456,8 +458,9 @@ public class TestDBWorkflowStore extends
         store.beginTrx();
         wfBean1.setEndTime(new Date(System.currentTimeMillis() - (31 * 24 * 60 * 60 * 1000l)));
         wfBean2.setEndTime(new Date(System.currentTimeMillis() - (31 * 24 * 60 * 60 * 1000l)));
-        WorkflowApp app = new LiteWorkflowApp("testApp", "<workflow-app/>", new StartNodeDef("end"))
-                .addNode(new EndNodeDef("end"));
+        WorkflowApp app = new LiteWorkflowApp("testApp", "<workflow-app/>",
+            new StartNodeDef(LiteWorkflowStoreService.LiteControlNodeHandler.class, "end")).
+                addNode(new EndNodeDef("end", LiteWorkflowStoreService.LiteControlNodeHandler.class));
         Configuration conf2 = new Configuration();
         conf2.set(OozieClient.APP_PATH, "testPath");
         conf2.set(OozieClient.LOG_TOKEN, "testToken");

Modified: incubator/oozie/trunk/core/src/test/java/org/apache/oozie/test/XDataTestCase.java
URL: http://svn.apache.org/viewvc/incubator/oozie/trunk/core/src/test/java/org/apache/oozie/test/XDataTestCase.java?rev=1368795&r1=1368794&r2=1368795&view=diff
==============================================================================
--- incubator/oozie/trunk/core/src/test/java/org/apache/oozie/test/XDataTestCase.java (original)
+++ incubator/oozie/trunk/core/src/test/java/org/apache/oozie/test/XDataTestCase.java Fri Aug  3 04:59:53 2012
@@ -57,6 +57,7 @@ import org.apache.oozie.executor.jpa.SLA
 import org.apache.oozie.executor.jpa.WorkflowActionInsertJPAExecutor;
 import org.apache.oozie.executor.jpa.WorkflowJobInsertJPAExecutor;
 import org.apache.oozie.service.JPAService;
+import org.apache.oozie.service.LiteWorkflowStoreService;
 import org.apache.oozie.service.Services;
 import org.apache.oozie.service.UUIDService;
 import org.apache.oozie.service.WorkflowAppService;
@@ -547,8 +548,9 @@ public abstract class XDataTestCase exte
      */
     protected WorkflowJobBean addRecordToWfJobTable(WorkflowJob.Status jobStatus, WorkflowInstance.Status instanceStatus)
             throws Exception {
-        WorkflowApp app = new LiteWorkflowApp("testApp", "<workflow-app/>", new StartNodeDef("end"))
-                .addNode(new EndNodeDef("end"));
+        WorkflowApp app = new LiteWorkflowApp("testApp", "<workflow-app/>",
+            new StartNodeDef(LiteWorkflowStoreService.LiteControlNodeHandler.class, "end")).
+                addNode(new EndNodeDef("end", LiteWorkflowStoreService.LiteControlNodeHandler.class));
         Configuration conf = new Configuration();
         Path appUri = new Path(getAppPath(), "workflow.xml");
         conf.set(OozieClient.APP_PATH, appUri.toString());

Modified: incubator/oozie/trunk/core/src/test/java/org/apache/oozie/workflow/lite/TestLiteWorkflowAppParser.java
URL: http://svn.apache.org/viewvc/incubator/oozie/trunk/core/src/test/java/org/apache/oozie/workflow/lite/TestLiteWorkflowAppParser.java?rev=1368795&r1=1368794&r2=1368795&view=diff
==============================================================================
--- incubator/oozie/trunk/core/src/test/java/org/apache/oozie/workflow/lite/TestLiteWorkflowAppParser.java (original)
+++ incubator/oozie/trunk/core/src/test/java/org/apache/oozie/workflow/lite/TestLiteWorkflowAppParser.java Fri Aug  3 04:59:53 2012
@@ -27,11 +27,10 @@ import java.util.Map;
 import java.util.concurrent.TimeoutException;
 
 
-
+import org.apache.oozie.service.ActionService;
 import org.apache.oozie.service.LiteWorkflowStoreService;
 import org.apache.oozie.service.SchemaService;
 import org.apache.oozie.service.Services;
-import org.apache.oozie.service.ActionService;
 import org.apache.oozie.service.SchemaService.SchemaName;
 import org.apache.oozie.service.TestSchemaService;
 import org.apache.oozie.workflow.WorkflowException;
@@ -62,8 +61,9 @@ public class TestLiteWorkflowAppParser e
 
     public void testParserGlobal() throws Exception {
         LiteWorkflowAppParser parser = new LiteWorkflowAppParser(null,
-                                                                 LiteWorkflowStoreService.LiteDecisionHandler.class,
-                                                                 LiteWorkflowStoreService.LiteActionHandler.class);
+            LiteWorkflowStoreService.LiteControlNodeHandler.class,
+            LiteWorkflowStoreService.LiteDecisionHandler.class,
+            LiteWorkflowStoreService.LiteActionHandler.class);
 
         LiteWorkflowApp app = parser.validateAndParse(IOUtils.getResourceAsReader("wf-schema-valid-global.xml", -1));
 
@@ -100,6 +100,7 @@ public class TestLiteWorkflowAppParser e
 
     public void testParserGlobalLocalAlreadyExists() throws Exception{
         LiteWorkflowAppParser parser = new LiteWorkflowAppParser(null,
+                LiteWorkflowStoreService.LiteControlNodeHandler.class,
                 LiteWorkflowStoreService.LiteDecisionHandler.class,
                 LiteWorkflowStoreService.LiteActionHandler.class);
 
@@ -129,14 +130,15 @@ public class TestLiteWorkflowAppParser e
                 "  <file>/tmp</file>\r\n" +
                 "  <file>/tmp</file>\r\n" +
                 "</pig>";
-        assertEquals(expectedE.replaceAll(" ",""), e.replaceAll(" ", ""));
+        assertEquals(expectedE.replaceAll(" ", ""), e.replaceAll(" ", ""));
 
     }
     
     public void testParserGlobalExtensionActions() throws Exception {
         LiteWorkflowAppParser parser = new LiteWorkflowAppParser(null,
-                                                                 LiteWorkflowStoreService.LiteDecisionHandler.class,
-                                                                 LiteWorkflowStoreService.LiteActionHandler.class);
+            LiteWorkflowStoreService.LiteControlNodeHandler.class,
+            LiteWorkflowStoreService.LiteDecisionHandler.class,
+            LiteWorkflowStoreService.LiteActionHandler.class);
 
         LiteWorkflowApp app = parser.validateAndParse(IOUtils.getResourceAsReader("wf-schema-valid-global-ext.xml", -1));
 
@@ -173,8 +175,9 @@ public class TestLiteWorkflowAppParser e
     
     public void testParserGlobalExtensionActionsLocalAlreadyExists() throws Exception {
         LiteWorkflowAppParser parser = new LiteWorkflowAppParser(null,
-                                                                 LiteWorkflowStoreService.LiteDecisionHandler.class,
-                                                                 LiteWorkflowStoreService.LiteActionHandler.class);
+            LiteWorkflowStoreService.LiteControlNodeHandler.class,
+            LiteWorkflowStoreService.LiteDecisionHandler.class,
+            LiteWorkflowStoreService.LiteActionHandler.class);
 
         LiteWorkflowApp app = parser.validateAndParse(IOUtils.getResourceAsReader("wf-schema-valid-global-ext.xml", -1));
 
@@ -205,8 +208,9 @@ public class TestLiteWorkflowAppParser e
     
     public void testParserGlobalExtensionActionsNoGlobal() throws Exception {
         LiteWorkflowAppParser parser = new LiteWorkflowAppParser(null,
-                                                                 LiteWorkflowStoreService.LiteDecisionHandler.class,
-                                                                 LiteWorkflowStoreService.LiteActionHandler.class);
+            LiteWorkflowStoreService.LiteControlNodeHandler.class,
+            LiteWorkflowStoreService.LiteDecisionHandler.class,
+            LiteWorkflowStoreService.LiteActionHandler.class);
         
         // If no global section is defined, some extension actions (e.g. hive) must still have name-node and job-tracker elements
         // or the handleGlobal() method will throw an exception
@@ -227,6 +231,7 @@ public class TestLiteWorkflowAppParser e
 
     public void testParser() throws Exception {
         LiteWorkflowAppParser parser = new LiteWorkflowAppParser(null,
+                                                                 LiteWorkflowStoreService.LiteControlNodeHandler.class,
                                                                  LiteWorkflowStoreService.LiteDecisionHandler.class,
                                                                  LiteWorkflowStoreService.LiteActionHandler.class);
 
@@ -281,6 +286,7 @@ public class TestLiteWorkflowAppParser e
     public void testWfValidationFailure() throws Exception {
         SchemaService wss = Services.get().get(SchemaService.class);
         final LiteWorkflowAppParser parser = new LiteWorkflowAppParser(wss.getSchema(SchemaName.WORKFLOW),
+                LiteWorkflowStoreService.LiteControlNodeHandler.class,
                 LiteWorkflowStoreService.LiteDecisionHandler.class, LiteWorkflowStoreService.LiteActionHandler.class);
 
         Thread testThread = new Thread() {
@@ -314,14 +320,16 @@ public class TestLiteWorkflowAppParser e
      */
    public void testWfNoForkJoin() throws WorkflowException  {
         LiteWorkflowAppParser parser = new LiteWorkflowAppParser(null,
+                LiteWorkflowStoreService.LiteControlNodeHandler.class,
                 LiteWorkflowStoreService.LiteDecisionHandler.class,
                 LiteWorkflowStoreService.LiteActionHandler.class);
 
-        LiteWorkflowApp def = new LiteWorkflowApp("name", "def", new StartNodeDef("one"))
+        LiteWorkflowApp def = new LiteWorkflowApp("name", "def",
+            new StartNodeDef(LiteWorkflowStoreService.LiteControlNodeHandler.class, "one"))
             .addNode(new ActionNodeDef("one", dummyConf, TestActionNodeHandler.class, "two", "three"))
             .addNode(new ActionNodeDef("two", dummyConf, TestActionNodeHandler.class, "end", "end"))
             .addNode(new ActionNodeDef("three", dummyConf, TestActionNodeHandler.class, "end", "end"))
-            .addNode(new EndNodeDef( "end"));
+            .addNode(new EndNodeDef("end", LiteWorkflowStoreService.LiteControlNodeHandler.class));
 
         try {
             invokeForkJoin(parser, def);
@@ -337,18 +345,21 @@ public class TestLiteWorkflowAppParser e
     */
     public void testSimpleForkJoin() throws WorkflowException {
         LiteWorkflowAppParser parser = new LiteWorkflowAppParser(null,
+                LiteWorkflowStoreService.LiteControlNodeHandler.class,
                 LiteWorkflowStoreService.LiteDecisionHandler.class,
                 LiteWorkflowStoreService.LiteActionHandler.class);
 
-        LiteWorkflowApp def = new LiteWorkflowApp("wf", "<worklfow-app/>", new StartNodeDef("one"))
+        LiteWorkflowApp def = new LiteWorkflowApp("wf", "<worklfow-app/>",
+        new StartNodeDef(LiteWorkflowStoreService.LiteControlNodeHandler.class, "one"))
         .addNode(new ActionNodeDef("one", dummyConf, TestActionNodeHandler.class, "f", "end"))
-        .addNode(new ForkNodeDef("f", Arrays.asList(new String[]{"two", "three"})))
-        .addNode(new ActionNodeDef("two", dummyConf,  TestActionNodeHandler.class, "j", "k"))
+        .addNode(new ForkNodeDef("f", LiteWorkflowStoreService.LiteControlNodeHandler.class,
+                                 Arrays.asList(new String[]{"two", "three"})))
+        .addNode(new ActionNodeDef("two", dummyConf, TestActionNodeHandler.class, "j", "k"))
         .addNode(new ActionNodeDef("three", dummyConf, TestActionNodeHandler.class, "j", "k"))
-        .addNode(new JoinNodeDef("j", "four"))
+        .addNode(new JoinNodeDef("j", LiteWorkflowStoreService.LiteControlNodeHandler.class, "four"))
         .addNode(new ActionNodeDef("four", dummyConf, TestActionNodeHandler.class, "end", "end"))
-        .addNode(new KillNodeDef("k", "kill"))
-        .addNode(new EndNodeDef("end"));
+        .addNode(new KillNodeDef("k", "kill", LiteWorkflowStoreService.LiteControlNodeHandler.class))
+        .addNode(new EndNodeDef("end", LiteWorkflowStoreService.LiteControlNodeHandler.class));
 
         try {
             invokeForkJoin(parser, def);
@@ -369,23 +380,27 @@ public class TestLiteWorkflowAppParser e
     */
     public void testNestedForkJoin() throws WorkflowException{
         LiteWorkflowAppParser parser = new LiteWorkflowAppParser(null,
+                LiteWorkflowStoreService.LiteControlNodeHandler.class,
                 LiteWorkflowStoreService.LiteDecisionHandler.class,
                 LiteWorkflowStoreService.LiteActionHandler.class);
 
-        LiteWorkflowApp def = new LiteWorkflowApp("testWf", "<worklfow-app/>", new StartNodeDef("one"))
+        LiteWorkflowApp def = new LiteWorkflowApp("testWf", "<worklfow-app/>",
+        new StartNodeDef(LiteWorkflowStoreService.LiteControlNodeHandler.class, "one"))
         .addNode(new ActionNodeDef("one", dummyConf, TestActionNodeHandler.class, "f","end"))
-        .addNode(new ForkNodeDef("f", Arrays.asList(new String[]{"two", "three"})))
-        .addNode(new ActionNodeDef("two", dummyConf, TestActionNodeHandler.class, "f2","k"))
-        .addNode(new ActionNodeDef("three", dummyConf, TestActionNodeHandler.class, "j","k"))
-        .addNode(new ForkNodeDef("f2", Arrays.asList(new String[]{"four", "five", "six"})))
-        .addNode(new ActionNodeDef("four", dummyConf, TestActionNodeHandler.class, "j2","k"))
-        .addNode(new ActionNodeDef("five", dummyConf, TestActionNodeHandler.class, "j2","k"))
-        .addNode(new ActionNodeDef("six", dummyConf, TestActionNodeHandler.class,"j2", "k"))
-        .addNode(new JoinNodeDef("j2", "seven"))
-        .addNode(new ActionNodeDef("seven", dummyConf, TestActionNodeHandler.class, "j","k"))
-        .addNode(new JoinNodeDef("j", "end"))
-        .addNode(new KillNodeDef("k", "kill"))
-        .addNode(new EndNodeDef("end"));
+        .addNode(new ForkNodeDef("f", LiteWorkflowStoreService.LiteControlNodeHandler.class,
+                                 Arrays.asList(new String[]{"two", "three"})))
+        .addNode(new ActionNodeDef("two", dummyConf, TestActionNodeHandler.class, "f2", "k"))
+        .addNode(new ActionNodeDef("three", dummyConf, TestActionNodeHandler.class, "j", "k"))
+        .addNode(new ForkNodeDef("f2", LiteWorkflowStoreService.LiteControlNodeHandler.class,
+                                 Arrays.asList(new String[]{"four", "five", "six"})))
+        .addNode(new ActionNodeDef("four", dummyConf, TestActionNodeHandler.class, "j2", "k"))
+        .addNode(new ActionNodeDef("five", dummyConf, TestActionNodeHandler.class, "j2", "k"))
+        .addNode(new ActionNodeDef("six", dummyConf, TestActionNodeHandler.class, "j2", "k"))
+        .addNode(new JoinNodeDef("j2", LiteWorkflowStoreService.LiteControlNodeHandler.class, "seven"))
+        .addNode(new ActionNodeDef("seven", dummyConf, TestActionNodeHandler.class, "j", "k"))
+        .addNode(new JoinNodeDef("j", LiteWorkflowStoreService.LiteControlNodeHandler.class, "end"))
+        .addNode(new KillNodeDef("k", "kill", LiteWorkflowStoreService.LiteControlNodeHandler.class))
+        .addNode(new EndNodeDef("end", LiteWorkflowStoreService.LiteControlNodeHandler.class));
 
         try {
             invokeForkJoin(parser, def);
@@ -402,17 +417,20 @@ public class TestLiteWorkflowAppParser e
     */
     public void testForkJoinFailure() throws WorkflowException{
         LiteWorkflowAppParser parser = new LiteWorkflowAppParser(null,
+                LiteWorkflowStoreService.LiteControlNodeHandler.class,
                 LiteWorkflowStoreService.LiteDecisionHandler.class,
                 LiteWorkflowStoreService.LiteActionHandler.class);
 
-        LiteWorkflowApp def = new LiteWorkflowApp("testWf", "<worklfow-app/>", new StartNodeDef("one"))
+        LiteWorkflowApp def = new LiteWorkflowApp("testWf", "<worklfow-app/>",
+        new StartNodeDef(LiteWorkflowStoreService.LiteControlNodeHandler.class, "one"))
         .addNode(new ActionNodeDef("one", dummyConf, TestActionNodeHandler.class, "f","end"))
-        .addNode(new ForkNodeDef("f", Arrays.asList(new String[]{"two", "three"})))
+        .addNode(new ForkNodeDef("f", LiteWorkflowStoreService.LiteControlNodeHandler.class,
+                                 Arrays.asList(new String[]{"two", "three"})))
         .addNode(new ActionNodeDef("two", dummyConf, TestActionNodeHandler.class, "j","k"))
         .addNode(new ActionNodeDef("three", dummyConf, TestActionNodeHandler.class, "end","k"))
-        .addNode(new JoinNodeDef("j", "end"))
-        .addNode(new KillNodeDef("k", "kill"))
-        .addNode(new EndNodeDef("end"));
+        .addNode(new JoinNodeDef("j", LiteWorkflowStoreService.LiteControlNodeHandler.class, "k"))
+        .addNode(new KillNodeDef("k", "kill", LiteWorkflowStoreService.LiteControlNodeHandler.class))
+        .addNode(new EndNodeDef("end", LiteWorkflowStoreService.LiteControlNodeHandler.class));
 
         try {
             invokeForkJoin(parser, def);
@@ -440,22 +458,26 @@ public class TestLiteWorkflowAppParser e
     */
     public void testNestedForkJoinFailure() throws WorkflowException {
         LiteWorkflowAppParser parser = new LiteWorkflowAppParser(null,
+                LiteWorkflowStoreService.LiteControlNodeHandler.class,
                 LiteWorkflowStoreService.LiteDecisionHandler.class,
                 LiteWorkflowStoreService.LiteActionHandler.class);
 
-        LiteWorkflowApp def = new LiteWorkflowApp("testWf", "<worklfow-app/>", new StartNodeDef("one"))
+        LiteWorkflowApp def = new LiteWorkflowApp("testWf", "<worklfow-app/>",
+            new StartNodeDef(LiteWorkflowStoreService.LiteControlNodeHandler.class, "one"))
             .addNode(new ActionNodeDef("one", dummyConf, TestActionNodeHandler.class, "f","end"))
-            .addNode(new ForkNodeDef("f", Arrays.asList(new String[]{"four", "three", "two"})))
+            .addNode(new ForkNodeDef("f", LiteWorkflowStoreService.LiteControlNodeHandler.class,
+                                     Arrays.asList(new String[]{"four", "three", "two"})))
             .addNode(new ActionNodeDef("two", dummyConf, TestActionNodeHandler.class, "j","k"))
             .addNode(new ActionNodeDef("three", dummyConf, TestActionNodeHandler.class, "j","k"))
             .addNode(new ActionNodeDef("four", dummyConf, TestActionNodeHandler.class, "f2","k"))
-            .addNode(new ForkNodeDef("f2", Arrays.asList(new String[]{"five", "six"})))
-            .addNode(new ActionNodeDef("five", dummyConf, TestActionNodeHandler.class, "j2","k"))
-            .addNode(new ActionNodeDef("six", dummyConf, TestActionNodeHandler.class, "j2","k"))
-            .addNode(new JoinNodeDef("j", "j2"))
-            .addNode(new JoinNodeDef("j2", "k"))
-            .addNode(new KillNodeDef("k", "kill"))
-            .addNode(new EndNodeDef("end"));
+            .addNode(new ForkNodeDef("f2", LiteWorkflowStoreService.LiteControlNodeHandler.class,
+                                     Arrays.asList(new String[]{"five", "six"})))
+            .addNode(new ActionNodeDef("five", dummyConf, TestActionNodeHandler.class, "j2", "k"))
+            .addNode(new ActionNodeDef("six", dummyConf, TestActionNodeHandler.class, "j2", "k"))
+            .addNode(new JoinNodeDef("j", LiteWorkflowStoreService.LiteControlNodeHandler.class, "j2"))
+            .addNode(new JoinNodeDef("j2", LiteWorkflowStoreService.LiteControlNodeHandler.class, "k"))
+            .addNode(new KillNodeDef("k", "kill", LiteWorkflowStoreService.LiteControlNodeHandler.class))
+            .addNode(new EndNodeDef("end", LiteWorkflowStoreService.LiteControlNodeHandler.class));
 
         try {
             invokeForkJoin(parser, def);
@@ -475,17 +497,20 @@ public class TestLiteWorkflowAppParser e
     */
     public void testTransitionFailure1() throws WorkflowException{
         LiteWorkflowAppParser parser = new LiteWorkflowAppParser(null,
+                LiteWorkflowStoreService.LiteControlNodeHandler.class,
                 LiteWorkflowStoreService.LiteDecisionHandler.class,
                 LiteWorkflowStoreService.LiteActionHandler.class);
 
-        LiteWorkflowApp def = new LiteWorkflowApp("name", "def", new StartNodeDef("one"))
-        .addNode(new ActionNodeDef("one", dummyConf, TestActionNodeHandler.class, "f","end"))
-        .addNode(new ForkNodeDef("f", Arrays.asList(new String[]{"two","three"})))
+        LiteWorkflowApp def = new LiteWorkflowApp("name", "def",
+        new StartNodeDef(LiteWorkflowStoreService.LiteControlNodeHandler.class, "one"))
+        .addNode(new ActionNodeDef("one", dummyConf, TestActionNodeHandler.class, "f", "end"))
+        .addNode(new ForkNodeDef("f", LiteWorkflowStoreService.LiteControlNodeHandler.class,
+                                 Arrays.asList(new String[]{"two", "three"})))
         .addNode(new ActionNodeDef("two", dummyConf, TestActionNodeHandler.class, "three", "j"))
         .addNode(new ActionNodeDef("three", dummyConf, TestActionNodeHandler.class, "j", "k"))
-        .addNode(new JoinNodeDef("j", "end"))
-        .addNode(new KillNodeDef("k", "kill"))
-        .addNode(new EndNodeDef("end"));
+        .addNode(new JoinNodeDef("j", LiteWorkflowStoreService.LiteControlNodeHandler.class, "k"))
+        .addNode(new KillNodeDef("k", "kill", LiteWorkflowStoreService.LiteControlNodeHandler.class))
+        .addNode(new EndNodeDef("end", LiteWorkflowStoreService.LiteControlNodeHandler.class));
 
         try {
             invokeForkJoin(parser, def);
@@ -509,17 +534,20 @@ public class TestLiteWorkflowAppParser e
    */
    public void testTransitionFailure2() throws WorkflowException{
        LiteWorkflowAppParser parser = new LiteWorkflowAppParser(null,
+               LiteWorkflowStoreService.LiteControlNodeHandler.class,
                LiteWorkflowStoreService.LiteDecisionHandler.class,
                LiteWorkflowStoreService.LiteActionHandler.class);
 
-       LiteWorkflowApp def = new LiteWorkflowApp("name", "def", new StartNodeDef("one"))
-       .addNode(new ActionNodeDef("one", dummyConf, TestActionNodeHandler.class, "f","end"))
-       .addNode(new ForkNodeDef("f", Arrays.asList(new String[]{"two","three"})))
+       LiteWorkflowApp def = new LiteWorkflowApp("name", "def",
+       new StartNodeDef(LiteWorkflowStoreService.LiteControlNodeHandler.class, "one"))
+       .addNode(new ActionNodeDef("one", dummyConf, TestActionNodeHandler.class, "f", "end"))
+       .addNode(new ForkNodeDef("f", LiteWorkflowStoreService.LiteControlNodeHandler.class,
+                                Arrays.asList(new String[]{"two","three"})))
        .addNode(new ActionNodeDef("two", dummyConf, TestActionNodeHandler.class, "j", "three"))
        .addNode(new ActionNodeDef("three", dummyConf, TestActionNodeHandler.class, "j", "k"))
-       .addNode(new JoinNodeDef("j", "end"))
-       .addNode(new KillNodeDef("k", "kill"))
-       .addNode(new EndNodeDef("end"));
+       .addNode(new JoinNodeDef("j", LiteWorkflowStoreService.LiteControlNodeHandler.class, "k"))
+       .addNode(new KillNodeDef("k", "kill", LiteWorkflowStoreService.LiteControlNodeHandler.class))
+       .addNode(new EndNodeDef("end", LiteWorkflowStoreService.LiteControlNodeHandler.class));
 
        try {
            invokeForkJoin(parser, def);
@@ -543,18 +571,21 @@ public class TestLiteWorkflowAppParser e
   */
    public void testTransitionFailure3() throws WorkflowException{
        LiteWorkflowAppParser parser = new LiteWorkflowAppParser(null,
+               LiteWorkflowStoreService.LiteControlNodeHandler.class,
                LiteWorkflowStoreService.LiteDecisionHandler.class,
                LiteWorkflowStoreService.LiteActionHandler.class);
 
-       LiteWorkflowApp def = new LiteWorkflowApp("name", "def", new StartNodeDef("one"))
-       .addNode(new ActionNodeDef("one", dummyConf, TestActionNodeHandler.class, "f","end"))
-       .addNode(new ForkNodeDef("f", Arrays.asList(new String[]{"two","three"})))
+       LiteWorkflowApp def = new LiteWorkflowApp("name", "def",
+       new StartNodeDef(LiteWorkflowStoreService.LiteControlNodeHandler.class, "one"))
+       .addNode(new ActionNodeDef("one", dummyConf, TestActionNodeHandler.class, "f", "end"))
+       .addNode(new ForkNodeDef("f", LiteWorkflowStoreService.LiteControlNodeHandler.class,
+                                Arrays.asList(new String[]{"two", "three"})))
        .addNode(new ActionNodeDef("two", dummyConf, TestActionNodeHandler.class, "j", "four"))
        .addNode(new ActionNodeDef("three", dummyConf, TestActionNodeHandler.class, "four", "k"))
        .addNode(new ActionNodeDef("four", dummyConf, TestActionNodeHandler.class, "j", "k"))
-       .addNode(new JoinNodeDef("j", "end"))
-       .addNode(new KillNodeDef("k", "kill"))
-       .addNode(new EndNodeDef("end"));
+       .addNode(new JoinNodeDef("j", LiteWorkflowStoreService.LiteControlNodeHandler.class, "k"))
+       .addNode(new KillNodeDef("k", "kill", LiteWorkflowStoreService.LiteControlNodeHandler.class))
+       .addNode(new EndNodeDef("end", LiteWorkflowStoreService.LiteControlNodeHandler.class));
 
        try {
            invokeForkJoin(parser, def);
@@ -580,22 +611,26 @@ public class TestLiteWorkflowAppParser e
     */
    public void testErrorTransitionForkJoin() throws WorkflowException {
        LiteWorkflowAppParser parser = new LiteWorkflowAppParser(null,
+               LiteWorkflowStoreService.LiteControlNodeHandler.class,
                LiteWorkflowStoreService.LiteDecisionHandler.class,
                LiteWorkflowStoreService.LiteActionHandler.class);
 
-       LiteWorkflowApp def = new LiteWorkflowApp("wf", "<worklfow-app/>", new StartNodeDef("one"))
+       LiteWorkflowApp def = new LiteWorkflowApp("wf", "<worklfow-app/>",
+       new StartNodeDef(LiteWorkflowStoreService.LiteControlNodeHandler.class, "one"))
        .addNode(new ActionNodeDef("one", dummyConf, TestActionNodeHandler.class, "f", "end"))
-       .addNode(new ForkNodeDef("f", Arrays.asList(new String[]{"two", "three"})))
+       .addNode(new ForkNodeDef("f", LiteWorkflowStoreService.LiteControlNodeHandler.class,
+                                Arrays.asList(new String[]{"two", "three"})))
        .addNode(new ActionNodeDef("two", dummyConf,  TestActionNodeHandler.class, "j", "f1"))
        .addNode(new ActionNodeDef("three", dummyConf, TestActionNodeHandler.class, "j", "f1"))
-       .addNode(new ForkNodeDef("f1", Arrays.asList(new String[]{"four", "five"})))
+       .addNode(new ForkNodeDef("f1", LiteWorkflowStoreService.LiteControlNodeHandler.class,
+                                Arrays.asList(new String[]{"four", "five"})))
        .addNode(new ActionNodeDef("four", dummyConf,  TestActionNodeHandler.class, "j1", "k"))
        .addNode(new ActionNodeDef("five", dummyConf, TestActionNodeHandler.class, "j1", "k"))
-       .addNode(new JoinNodeDef("j", "six"))
-       .addNode(new JoinNodeDef("j1", "six"))
+       .addNode(new JoinNodeDef("j", LiteWorkflowStoreService.LiteControlNodeHandler.class, "six"))
+       .addNode(new JoinNodeDef("j1", LiteWorkflowStoreService.LiteControlNodeHandler.class, "six"))
        .addNode(new ActionNodeDef("six", dummyConf, TestActionNodeHandler.class, "end", "end"))
-       .addNode(new KillNodeDef("k", "kill"))
-       .addNode(new EndNodeDef("end"));
+       .addNode(new KillNodeDef("k", "kill", LiteWorkflowStoreService.LiteControlNodeHandler.class))
+       .addNode(new EndNodeDef("end", LiteWorkflowStoreService.LiteControlNodeHandler.class));
 
        try {
            invokeForkJoin(parser, def);
@@ -614,18 +649,22 @@ public class TestLiteWorkflowAppParser e
     */
     public void testDecisionForkJoin() throws WorkflowException{
         LiteWorkflowAppParser parser = new LiteWorkflowAppParser(null,
+                LiteWorkflowStoreService.LiteControlNodeHandler.class,
                 LiteWorkflowStoreService.LiteDecisionHandler.class,
                 LiteWorkflowStoreService.LiteActionHandler.class);
-        LiteWorkflowApp def = new LiteWorkflowApp("name", "def", new StartNodeDef("one"))
+        LiteWorkflowApp def = new LiteWorkflowApp("name", "def",
+        new StartNodeDef(LiteWorkflowStoreService.LiteControlNodeHandler.class, "one"))
         .addNode(new ActionNodeDef("one", dummyConf, TestActionNodeHandler.class, "f","end"))
-        .addNode(new ForkNodeDef("f", Arrays.asList(new String[]{"two","three"})))
-        .addNode(new DecisionNodeDef("two", dummyConf, TestDecisionNodeHandler.class, Arrays.asList(new String[]{"four","five","four"})))
+        .addNode(new ForkNodeDef("f", LiteWorkflowStoreService.LiteControlNodeHandler.class,
+                                 Arrays.asList(new String[]{"two", "three"})))
+        .addNode(new DecisionNodeDef("two", dummyConf, TestDecisionNodeHandler.class,
+                                     Arrays.asList(new String[]{"four","five","four"})))
         .addNode(new ActionNodeDef("four", dummyConf, TestActionNodeHandler.class, "j", "k"))
         .addNode(new ActionNodeDef("five", dummyConf, TestActionNodeHandler.class, "j", "k"))
         .addNode(new ActionNodeDef("three", dummyConf, TestActionNodeHandler.class, "j", "k"))
-        .addNode(new KillNodeDef("k", "kill"))
-        .addNode(new JoinNodeDef("j", "end"))
-        .addNode(new EndNodeDef("end"));
+        .addNode(new JoinNodeDef("j", LiteWorkflowStoreService.LiteControlNodeHandler.class, "end"))
+        .addNode(new KillNodeDef("k", "kill", LiteWorkflowStoreService.LiteControlNodeHandler.class))
+        .addNode(new EndNodeDef("end", LiteWorkflowStoreService.LiteControlNodeHandler.class));
 
         try {
             invokeForkJoin(parser, def);
@@ -644,18 +683,23 @@ public class TestLiteWorkflowAppParser e
     */
     public void testDecisionsToJoinForkJoin() throws WorkflowException{
         LiteWorkflowAppParser parser = new LiteWorkflowAppParser(null,
+                LiteWorkflowStoreService.LiteControlNodeHandler.class,
                 LiteWorkflowStoreService.LiteDecisionHandler.class,
                 LiteWorkflowStoreService.LiteActionHandler.class);
-        LiteWorkflowApp def = new LiteWorkflowApp("name", "def", new StartNodeDef("one"))
+        LiteWorkflowApp def = new LiteWorkflowApp("name", "def",
+        new StartNodeDef(LiteWorkflowStoreService.LiteControlNodeHandler.class, "one"))
         .addNode(new ActionNodeDef("one", dummyConf, TestActionNodeHandler.class, "f","end"))
-        .addNode(new ForkNodeDef("f", Arrays.asList(new String[]{"two","three"})))
-        .addNode(new DecisionNodeDef("two", dummyConf, TestDecisionNodeHandler.class, Arrays.asList(new String[]{"four","j","four"})))
-        .addNode(new DecisionNodeDef("three", dummyConf, TestDecisionNodeHandler.class, Arrays.asList(new String[]{"j","five","j"})))
+        .addNode(new ForkNodeDef("f", LiteWorkflowStoreService.LiteControlNodeHandler.class,
+                                 Arrays.asList(new String[]{"two","three"})))
+        .addNode(new DecisionNodeDef("two", dummyConf, TestDecisionNodeHandler.class,
+                                     Arrays.asList(new String[]{"four","j","four"})))
+        .addNode(new DecisionNodeDef("three", dummyConf, TestDecisionNodeHandler.class,
+                                     Arrays.asList(new String[]{"j","five","j"})))
         .addNode(new ActionNodeDef("four", dummyConf, TestActionNodeHandler.class, "j", "k"))
         .addNode(new ActionNodeDef("five", dummyConf, TestActionNodeHandler.class, "j", "k"))
-        .addNode(new JoinNodeDef("j", "end"))
-        .addNode(new KillNodeDef("k", "kill"))
-        .addNode(new EndNodeDef("end"));
+        .addNode(new JoinNodeDef("j", LiteWorkflowStoreService.LiteControlNodeHandler.class, "end"))
+        .addNode(new KillNodeDef("k", "kill", LiteWorkflowStoreService.LiteControlNodeHandler.class))
+        .addNode(new EndNodeDef("end", LiteWorkflowStoreService.LiteControlNodeHandler.class));
 
         try {
             invokeForkJoin(parser, def);
@@ -674,18 +718,23 @@ public class TestLiteWorkflowAppParser e
     */
     public void testDecisionsToKillForkJoin() throws WorkflowException{
         LiteWorkflowAppParser parser = new LiteWorkflowAppParser(null,
+                LiteWorkflowStoreService.LiteControlNodeHandler.class,
                 LiteWorkflowStoreService.LiteDecisionHandler.class,
                 LiteWorkflowStoreService.LiteActionHandler.class);
-        LiteWorkflowApp def = new LiteWorkflowApp("name", "def", new StartNodeDef("one"))
+        LiteWorkflowApp def = new LiteWorkflowApp("name", "def",
+        new StartNodeDef(LiteWorkflowStoreService.LiteControlNodeHandler.class, "one"))
         .addNode(new ActionNodeDef("one", dummyConf, TestActionNodeHandler.class, "f","end"))
-        .addNode(new ForkNodeDef("f", Arrays.asList(new String[]{"two","three"})))
-        .addNode(new DecisionNodeDef("two", dummyConf, TestDecisionNodeHandler.class, Arrays.asList(new String[]{"four","k","four"})))
-        .addNode(new DecisionNodeDef("three", dummyConf, TestDecisionNodeHandler.class, Arrays.asList(new String[]{"k","five","k"})))
+        .addNode(new ForkNodeDef("f", LiteWorkflowStoreService.LiteControlNodeHandler.class,
+                                 Arrays.asList(new String[]{"two","three"})))
+        .addNode(new DecisionNodeDef("two", dummyConf, TestDecisionNodeHandler.class,
+                                     Arrays.asList(new String[]{"four","k","four"})))
+        .addNode(new DecisionNodeDef("three", dummyConf, TestDecisionNodeHandler.class,
+                                     Arrays.asList(new String[]{"k","five","k"})))
         .addNode(new ActionNodeDef("four", dummyConf, TestActionNodeHandler.class, "j", "k"))
         .addNode(new ActionNodeDef("five", dummyConf, TestActionNodeHandler.class, "j", "k"))
-        .addNode(new JoinNodeDef("j", "end"))
-        .addNode(new KillNodeDef("k", "kill"))
-        .addNode(new EndNodeDef("end"));
+        .addNode(new JoinNodeDef("j", LiteWorkflowStoreService.LiteControlNodeHandler.class, "end"))
+        .addNode(new KillNodeDef("k", "kill", LiteWorkflowStoreService.LiteControlNodeHandler.class))
+        .addNode(new EndNodeDef("end", LiteWorkflowStoreService.LiteControlNodeHandler.class));
 
         try {
             invokeForkJoin(parser, def);
@@ -703,17 +752,21 @@ public class TestLiteWorkflowAppParser e
      */
     public void testDecisionForkJoinFailure() throws WorkflowException{
         LiteWorkflowAppParser parser = new LiteWorkflowAppParser(null,
+                LiteWorkflowStoreService.LiteControlNodeHandler.class,
                 LiteWorkflowStoreService.LiteDecisionHandler.class,
                 LiteWorkflowStoreService.LiteActionHandler.class);
-        LiteWorkflowApp def = new LiteWorkflowApp("name", "def", new StartNodeDef("one"))
+        LiteWorkflowApp def = new LiteWorkflowApp("name", "def",
+        new StartNodeDef(LiteWorkflowStoreService.LiteControlNodeHandler.class, "one"))
         .addNode(new ActionNodeDef("one", dummyConf, TestActionNodeHandler.class, "f","end"))
-        .addNode(new ForkNodeDef("f", Arrays.asList(new String[]{"two","three"})))
-        .addNode(new DecisionNodeDef("two", dummyConf, TestDecisionNodeHandler.class, Arrays.asList(new String[]{"four","three"})))
+        .addNode(new ForkNodeDef("f", LiteWorkflowStoreService.LiteControlNodeHandler.class,
+                                 Arrays.asList(new String[]{"two","three"})))
+        .addNode(new DecisionNodeDef("two", dummyConf, TestDecisionNodeHandler.class,
+                                     Arrays.asList(new String[]{"four","three"})))
         .addNode(new ActionNodeDef("three", dummyConf, TestActionNodeHandler.class, "j", "k"))
         .addNode(new ActionNodeDef("four", dummyConf, TestActionNodeHandler.class, "j", "k"))
-        .addNode(new JoinNodeDef("j", "end"))
-        .addNode(new KillNodeDef("k", "kill"))
-        .addNode(new EndNodeDef("end"));
+        .addNode(new JoinNodeDef("j", LiteWorkflowStoreService.LiteControlNodeHandler.class, "k"))
+        .addNode(new KillNodeDef("k", "kill", LiteWorkflowStoreService.LiteControlNodeHandler.class))
+        .addNode(new EndNodeDef("end", LiteWorkflowStoreService.LiteControlNodeHandler.class));
 
         try {
             invokeForkJoin(parser, def);
@@ -735,17 +788,21 @@ public class TestLiteWorkflowAppParser e
      */
     public void testDecisionToEndForkJoinFailure() throws WorkflowException{
         LiteWorkflowAppParser parser = new LiteWorkflowAppParser(null,
+                LiteWorkflowStoreService.LiteControlNodeHandler.class,
                 LiteWorkflowStoreService.LiteDecisionHandler.class,
                 LiteWorkflowStoreService.LiteActionHandler.class);
-        LiteWorkflowApp def = new LiteWorkflowApp("name", "def", new StartNodeDef("one"))
+        LiteWorkflowApp def = new LiteWorkflowApp("name", "def",
+            new StartNodeDef(LiteWorkflowStoreService.LiteControlNodeHandler.class, "one"))
         .addNode(new ActionNodeDef("one", dummyConf, TestActionNodeHandler.class, "f","end"))
-        .addNode(new ForkNodeDef("f", Arrays.asList(new String[]{"two","three"})))
-        .addNode(new DecisionNodeDef("two", dummyConf, TestDecisionNodeHandler.class, Arrays.asList(new String[]{"four","end"})))
+        .addNode(new ForkNodeDef("f", LiteWorkflowStoreService.LiteControlNodeHandler.class,
+                                 Arrays.asList(new String[]{"two", "three"})))
+        .addNode(new DecisionNodeDef("two", dummyConf, TestDecisionNodeHandler.class,
+                                     Arrays.asList(new String[]{"four","end"})))
         .addNode(new ActionNodeDef("three", dummyConf, TestActionNodeHandler.class, "j", "k"))
         .addNode(new ActionNodeDef("four", dummyConf, TestActionNodeHandler.class, "j", "k"))
-        .addNode(new JoinNodeDef("j", "end"))
-        .addNode(new KillNodeDef("k", "kill"))
-        .addNode(new EndNodeDef("end"));
+        .addNode(new JoinNodeDef("j", LiteWorkflowStoreService.LiteControlNodeHandler.class, "end"))
+        .addNode(new KillNodeDef("k", "kill", LiteWorkflowStoreService.LiteControlNodeHandler.class))
+        .addNode(new EndNodeDef("end", LiteWorkflowStoreService.LiteControlNodeHandler.class));
 
         try {
             invokeForkJoin(parser, def);
@@ -771,20 +828,25 @@ public class TestLiteWorkflowAppParser e
      */
     public void testDecisionMultipleForks() throws WorkflowException{
         LiteWorkflowAppParser parser = new LiteWorkflowAppParser(null,
+                LiteWorkflowStoreService.LiteControlNodeHandler.class,
                 LiteWorkflowStoreService.LiteDecisionHandler.class,
                 LiteWorkflowStoreService.LiteActionHandler.class);
-        LiteWorkflowApp def = new LiteWorkflowApp("name", "def", new StartNodeDef("one"))
-        .addNode(new DecisionNodeDef("one", dummyConf, TestDecisionNodeHandler.class, Arrays.asList(new String[]{"f1","f2"})))
-        .addNode(new ForkNodeDef("f1", Arrays.asList(new String[]{"two","three"})))
-        .addNode(new ForkNodeDef("f2", Arrays.asList(new String[]{"four","five"})))
+        LiteWorkflowApp def = new LiteWorkflowApp("name", "def",
+        new StartNodeDef(LiteWorkflowStoreService.LiteControlNodeHandler.class, "one"))
+        .addNode(new DecisionNodeDef("one", dummyConf, TestDecisionNodeHandler.class,
+                                     Arrays.asList(new String[]{"f1","f2"})))
+        .addNode(new ForkNodeDef("f1", LiteWorkflowStoreService.LiteControlNodeHandler.class,
+                                 Arrays.asList(new String[]{"two", "three"})))
+        .addNode(new ForkNodeDef("f2", LiteWorkflowStoreService.LiteControlNodeHandler.class,
+                                 Arrays.asList(new String[]{"four","five"})))
         .addNode(new ActionNodeDef("two", dummyConf, TestActionNodeHandler.class, "j1", "k"))
         .addNode(new ActionNodeDef("three", dummyConf, TestActionNodeHandler.class, "j1", "k"))
         .addNode(new ActionNodeDef("four", dummyConf, TestActionNodeHandler.class, "j2", "k"))
         .addNode(new ActionNodeDef("five", dummyConf, TestActionNodeHandler.class, "j2", "k"))
-        .addNode(new JoinNodeDef("j1", "end"))
-        .addNode(new JoinNodeDef("j2", "end"))
-        .addNode(new KillNodeDef("k", "kill"))
-        .addNode(new EndNodeDef("end"));
+        .addNode(new JoinNodeDef("j1", LiteWorkflowStoreService.LiteControlNodeHandler.class, "end"))
+        .addNode(new JoinNodeDef("j2", LiteWorkflowStoreService.LiteControlNodeHandler.class, "end"))
+        .addNode(new KillNodeDef("k", "kill", LiteWorkflowStoreService.LiteControlNodeHandler.class))
+        .addNode(new EndNodeDef("end", LiteWorkflowStoreService.LiteControlNodeHandler.class));
 
         try {
             invokeForkJoin(parser, def);

Modified: incubator/oozie/trunk/core/src/test/java/org/apache/oozie/workflow/lite/TestLiteWorkflowLib.java
URL: http://svn.apache.org/viewvc/incubator/oozie/trunk/core/src/test/java/org/apache/oozie/workflow/lite/TestLiteWorkflowLib.java?rev=1368795&r1=1368794&r2=1368795&view=diff
==============================================================================
--- incubator/oozie/trunk/core/src/test/java/org/apache/oozie/workflow/lite/TestLiteWorkflowLib.java (original)
+++ incubator/oozie/trunk/core/src/test/java/org/apache/oozie/workflow/lite/TestLiteWorkflowLib.java Fri Aug  3 04:59:53 2012
@@ -113,6 +113,26 @@ public class TestLiteWorkflowLib extends
         }
     }
 
+    public static class TestControlNodeHandler extends ControlNodeHandler {
+
+        @Override
+        public boolean enter(Context context) throws WorkflowException {
+            boolean done = true;
+            super.enter(context);
+            Class<? extends NodeDef> nodeClass = context.getNodeDef().getClass();
+            if (nodeClass.equals(JoinNodeDef.class)) {
+                String parentExecutionPath = context.getExecutionPath();
+                String forkCount = context.getVar(FORK_COUNT_PREFIX + parentExecutionPath);
+                done = forkCount == null;
+            }
+            return done;
+        }
+
+        @Override
+        public void touch(Context context) throws WorkflowException {
+        }
+    }
+
     public static class TestRootContextHandler extends SynchNodeHandler {
 
         @Override
@@ -175,19 +195,27 @@ public class TestLiteWorkflowLib extends
     }
 
     public void testEmptyWorkflow() throws WorkflowException {
-        LiteWorkflowApp def = new LiteWorkflowApp("wf", "<worklfow-app/>", new StartNodeDef("end"))
-                .addNode(new EndNodeDef("end"));
+        LiteWorkflowApp def = new LiteWorkflowApp("wf", "<worklfow-app/>",
+                                                  new StartNodeDef(TestControlNodeHandler.class, "end"))
+                .addNode(new EndNodeDef("end", TestControlNodeHandler.class));
 
-        LiteWorkflowInstance job = new LiteWorkflowInstance(def, new XConfiguration(), "1");
+        final LiteWorkflowInstance job = new LiteWorkflowInstance(def, new XConfiguration(), "1");
         assertEquals(WorkflowInstance.Status.PREP, job.getStatus());
         job.start();
+        waitFor(5 * 1000, new Predicate() {
+            @Override
+            public boolean evaluate() throws Exception {
+                return job.getStatus() == WorkflowInstance.Status.SUCCEEDED;
+            }
+        });
         assertEquals(WorkflowInstance.Status.SUCCEEDED, job.getStatus());
     }
 
     public void testKillWorkflow() throws WorkflowException {
-        LiteWorkflowApp def = new LiteWorkflowApp("wf", "<worklfow-app/>", new StartNodeDef("kill"))
-                .addNode(new KillNodeDef("kill", "killed"))
-                .addNode(new EndNodeDef("end"));
+        LiteWorkflowApp def = new LiteWorkflowApp("wf", "<worklfow-app/>",
+            new StartNodeDef(TestControlNodeHandler.class, "kill"))
+                .addNode(new KillNodeDef("kill", "killed", TestControlNodeHandler.class))
+                .addNode(new EndNodeDef("end", TestControlNodeHandler.class));
 
         LiteWorkflowInstance job = new LiteWorkflowInstance(def, new XConfiguration(), "1");
         assertEquals(WorkflowInstance.Status.PREP, job.getStatus());
@@ -196,9 +224,10 @@ public class TestLiteWorkflowLib extends
     }
 
     public void testWorkflowStates() throws WorkflowException {
-        LiteWorkflowApp def = new LiteWorkflowApp("wf", "<worklfow-app/>", new StartNodeDef("one"))
+        LiteWorkflowApp def = new LiteWorkflowApp("wf", "<worklfow-app/>",
+                                                  new StartNodeDef(TestControlNodeHandler.class, "one"))
                 .addNode(new NodeDef("one", null, AsynchNodeHandler.class, Arrays.asList(new String[]{"end"})))
-                .addNode(new EndNodeDef("end"));
+                .addNode(new EndNodeDef("end", TestControlNodeHandler.class));
 
         LiteWorkflowInstance job = new LiteWorkflowInstance(def, new XConfiguration(), "1");
         assertEquals(WorkflowInstance.Status.PREP, job.getStatus());
@@ -322,9 +351,10 @@ public class TestLiteWorkflowLib extends
     }
 
     public void testSynchSimple() throws WorkflowException {
-        LiteWorkflowApp def = new LiteWorkflowApp("wf", "<worklfow-app/>", new StartNodeDef("one"))
+        LiteWorkflowApp def = new LiteWorkflowApp("wf", "<worklfow-app/>",
+                                                  new StartNodeDef(TestControlNodeHandler.class, "one"))
                 .addNode(new NodeDef("one", null, SynchNodeHandler.class, Arrays.asList(new String[]{"end"})))
-                .addNode(new EndNodeDef("end"));
+                .addNode(new EndNodeDef("end", TestControlNodeHandler.class));
 
         LiteWorkflowInstance job = new LiteWorkflowInstance(def, new XConfiguration(), "1");
         job.start();
@@ -337,9 +367,10 @@ public class TestLiteWorkflowLib extends
     }
 
     public void testNodeContext() throws WorkflowException {
-        LiteWorkflowApp def = new LiteWorkflowApp("wf", "<worklfow-app/>", new StartNodeDef("one"))
+        LiteWorkflowApp def = new LiteWorkflowApp("wf", "<worklfow-app/>",
+                                                  new StartNodeDef(TestControlNodeHandler.class, "one"))
                 .addNode(new NodeDef("one", null, TestRootContextHandler.class, Arrays.asList(new String[]{"end"})))
-                .addNode(new EndNodeDef("end"));
+                .addNode(new EndNodeDef("end", TestControlNodeHandler.class));
 
         LiteWorkflowInstance job = new LiteWorkflowInstance(def, new XConfiguration(), "1");
         job.setVar("a", "A");
@@ -356,10 +387,11 @@ public class TestLiteWorkflowLib extends
     }
 
     public void testSynchDouble() throws WorkflowException {
-        LiteWorkflowApp def = new LiteWorkflowApp("wf", "<worklfow-app/>", new StartNodeDef("one"))
+        LiteWorkflowApp def = new LiteWorkflowApp("wf", "<worklfow-app/>",
+                                                  new StartNodeDef(TestControlNodeHandler.class, "one"))
                 .addNode(new NodeDef("one", null, SynchNodeHandler.class, Arrays.asList(new String[]{"two"})))
                 .addNode(new NodeDef("two", null, SynchNodeHandler.class, Arrays.asList(new String[]{"end"})))
-                .addNode(new EndNodeDef("end"));
+                .addNode(new EndNodeDef("end", TestControlNodeHandler.class));
 
         LiteWorkflowInstance job = new LiteWorkflowInstance(def, new XConfiguration(), "1");
         job.start();
@@ -372,9 +404,10 @@ public class TestLiteWorkflowLib extends
     }
 
     public void testAsynchSimple() throws WorkflowException {
-        LiteWorkflowApp def = new LiteWorkflowApp("wf", "<worklfow-app/>", new StartNodeDef("one"))
+        LiteWorkflowApp def = new LiteWorkflowApp("wf", "<worklfow-app/>",
+                                                  new StartNodeDef(TestControlNodeHandler.class, "one"))
                 .addNode(new NodeDef("one", null, AsynchNodeHandler.class, Arrays.asList(new String[]{"end"})))
-                .addNode(new EndNodeDef("end"));
+                .addNode(new EndNodeDef("end", TestControlNodeHandler.class));
 
         LiteWorkflowInstance job = new LiteWorkflowInstance(def, new XConfiguration(), "1");
         job.start();
@@ -391,9 +424,10 @@ public class TestLiteWorkflowLib extends
     }
 
     public void testInvalidExecutionPath() throws WorkflowException {
-        LiteWorkflowApp def = new LiteWorkflowApp("wf", "<worklfow-app/>", new StartNodeDef("one"))
+        LiteWorkflowApp def = new LiteWorkflowApp("wf", "<worklfow-app/>",
+                                                  new StartNodeDef(TestControlNodeHandler.class, "one"))
                 .addNode(new NodeDef("one", null, AsynchNodeHandler.class, Arrays.asList(new String[]{"end"})))
-                .addNode(new EndNodeDef("end"));
+                .addNode(new EndNodeDef("end", TestControlNodeHandler.class));
 
         LiteWorkflowInstance job = new LiteWorkflowInstance(def, new XConfiguration(), "1");
         job.start();
@@ -406,14 +440,16 @@ public class TestLiteWorkflowLib extends
 
     public void testSimpleFork() throws WorkflowException {
 
-        LiteWorkflowApp def = new LiteWorkflowApp("wf", "<worklfow-app/>", new StartNodeDef("one"))
+        LiteWorkflowApp def = new LiteWorkflowApp("wf", "<worklfow-app/>",
+                                                  new StartNodeDef(TestControlNodeHandler.class, "one"))
                 .addNode(new NodeDef("one", null, SynchNodeHandler.class, Arrays.asList(new String[]{"f"})))
-                .addNode(new ForkNodeDef("f", Arrays.asList(new String[]{"two", "three"})))
+                .addNode(new ForkNodeDef("f", TestControlNodeHandler.class,
+                                         Arrays.asList(new String[]{"two", "three"})))
                 .addNode(new NodeDef("two", null, SynchNodeHandler.class, Arrays.asList(new String[]{"j"})))
                 .addNode(new NodeDef("three", null, SynchNodeHandler.class, Arrays.asList(new String[]{"j"})))
-                .addNode(new JoinNodeDef("j", "four"))
+                .addNode(new JoinNodeDef("j", TestControlNodeHandler.class, "four"))
                 .addNode(new NodeDef("four", null, SynchNodeHandler.class, Arrays.asList(new String[]{"end"})))
-                .addNode(new EndNodeDef("end"));
+                .addNode(new EndNodeDef("end", TestControlNodeHandler.class));
 
         LiteWorkflowInstance job = new LiteWorkflowInstance(def, new XConfiguration(), "1");
         job.start();
@@ -432,12 +468,13 @@ public class TestLiteWorkflowLib extends
 
     public void testForkedContext() throws WorkflowException {
 
-        LiteWorkflowApp def = new LiteWorkflowApp("wf", "<worklfow-app/>", new StartNodeDef("f"))
-                .addNode(new ForkNodeDef("f", Arrays.asList(new String[]{"a", "b"})))
+        LiteWorkflowApp def = new LiteWorkflowApp("wf", "<worklfow-app/>",
+            new StartNodeDef(TestControlNodeHandler.class, "f"))
+                .addNode(new ForkNodeDef("f", TestControlNodeHandler.class,  Arrays.asList(new String[]{"a", "b"})))
                 .addNode(new NodeDef("a", null, TestForkedContextHandler.class, Arrays.asList(new String[]{"j"})))
                 .addNode(new NodeDef("b", null, SynchNodeHandler.class, Arrays.asList(new String[]{"j"})))
-                .addNode(new JoinNodeDef("j", "end"))
-                .addNode(new EndNodeDef("end"));
+                .addNode(new JoinNodeDef("j", TestControlNodeHandler.class, "end"))
+                .addNode(new EndNodeDef("end", TestControlNodeHandler.class));
 
         LiteWorkflowInstance job = new LiteWorkflowInstance(def, new XConfiguration(), "1");
         job.start();
@@ -448,19 +485,22 @@ public class TestLiteWorkflowLib extends
 
     public void testNestedFork() throws WorkflowException {
 
-        LiteWorkflowApp def = new LiteWorkflowApp("testWf", "<worklfow-app/>", new StartNodeDef("one"))
+        LiteWorkflowApp def = new LiteWorkflowApp("testWf", "<worklfow-app/>",
+            new StartNodeDef(TestControlNodeHandler.class, "one"))
                 .addNode(new NodeDef("one", null, SynchNodeHandler.class, Arrays.asList(new String[]{"f"})))
-                .addNode(new ForkNodeDef("f", Arrays.asList(new String[]{"two", "three"})))
+                .addNode(new ForkNodeDef("f", TestControlNodeHandler.class,
+                                         Arrays.asList(new String[]{"two", "three"})))
                 .addNode(new NodeDef("two", null, SynchNodeHandler.class, Arrays.asList(new String[]{"f2"})))
                 .addNode(new NodeDef("three", null, SynchNodeHandler.class, Arrays.asList(new String[]{"j"})))
-                .addNode(new ForkNodeDef("f2", Arrays.asList(new String[]{"four", "five", "six"})))
+                .addNode(new ForkNodeDef("f2", TestControlNodeHandler.class,
+                                         Arrays.asList(new String[]{"four", "five", "six"})))
                 .addNode(new NodeDef("four", null, SynchNodeHandler.class, Arrays.asList(new String[]{"j2"})))
                 .addNode(new NodeDef("five", null, SynchNodeHandler.class, Arrays.asList(new String[]{"j2"})))
                 .addNode(new NodeDef("six", null, SynchNodeHandler.class, Arrays.asList(new String[]{"j2"})))
-                .addNode(new JoinNodeDef("j2", "seven"))
+                .addNode(new JoinNodeDef("j2", TestControlNodeHandler.class, "seven"))
                 .addNode(new NodeDef("seven", null, SynchNodeHandler.class, Arrays.asList(new String[]{"j"})))
-                .addNode(new JoinNodeDef("j", "end"))
-                .addNode(new EndNodeDef("end"));
+                .addNode(new JoinNodeDef("j", TestControlNodeHandler.class, "end"))
+                .addNode(new EndNodeDef("end", TestControlNodeHandler.class));
 
         LiteWorkflowInstance job = new LiteWorkflowInstance(def, new XConfiguration(), "abcde");
         job.start();
@@ -483,12 +523,13 @@ public class TestLiteWorkflowLib extends
 
     public void testKillWithRunningNodes() throws WorkflowException {
 
-        LiteWorkflowApp def = new LiteWorkflowApp("wf", "<worklfow-app/>", new StartNodeDef("f"))
-                .addNode(new ForkNodeDef("f", Arrays.asList(new String[]{"a", "b"})))
+        LiteWorkflowApp def = new LiteWorkflowApp("wf", "<worklfow-app/>",
+                                                  new StartNodeDef(TestControlNodeHandler.class, "f"))
+                .addNode(new ForkNodeDef("f", TestControlNodeHandler.class, Arrays.asList(new String[]{"a", "b"})))
                 .addNode(new NodeDef("a", null, SynchNodeHandler.class, Arrays.asList(new String[]{"j"})))
                 .addNode(new NodeDef("b", null, AsynchNodeHandler.class, Arrays.asList(new String[]{"j"})))
-                .addNode(new JoinNodeDef("j", "end"))
-                .addNode(new EndNodeDef("end"));
+                .addNode(new JoinNodeDef("j", TestControlNodeHandler.class, "end"))
+                .addNode(new EndNodeDef("end", TestControlNodeHandler.class));
 
         LiteWorkflowInstance job = new LiteWorkflowInstance(def, new XConfiguration(), "1");
         job.start();
@@ -502,11 +543,13 @@ public class TestLiteWorkflowLib extends
 
     public void testFailWithRunningNodes() throws WorkflowException {
 
-        LiteWorkflowApp def = new LiteWorkflowApp("wf", "<worklfow-app/>", new StartNodeDef("f"))
-                .addNode(new ForkNodeDef("f", Arrays.asList(new String[]{"a", "b"})))
+        LiteWorkflowApp def = new LiteWorkflowApp("wf", "<worklfow-app/>",
+            new StartNodeDef(TestControlNodeHandler.class, "f"))
+                .addNode(new ForkNodeDef("f", TestControlNodeHandler.class, Arrays.asList(new String[]{"a", "b"})))
                 .addNode(new NodeDef("a", null, SynchNodeHandler.class, Arrays.asList(new String[]{"j"})))
                 .addNode(new NodeDef("b", null, AsynchNodeHandler.class, Arrays.asList(new String[]{"j"})))
-                .addNode(new JoinNodeDef("j", "end")).addNode(new EndNodeDef("end"));
+                .addNode(new JoinNodeDef("j", TestControlNodeHandler.class, "end"))
+            .addNode(new EndNodeDef("end", TestControlNodeHandler.class));
 
 
         LiteWorkflowInstance job = new LiteWorkflowInstance(def, new XConfiguration(), "1");
@@ -522,12 +565,13 @@ public class TestLiteWorkflowLib extends
 
     public void testDoneWithRunningNodes() throws WorkflowException {
 
-        LiteWorkflowApp def = new LiteWorkflowApp("wf", "<worklfow-app/>", new StartNodeDef("f"))
-                .addNode(new ForkNodeDef("f", Arrays.asList(new String[]{"a", "b"})))
+        LiteWorkflowApp def = new LiteWorkflowApp("wf", "<worklfow-app/>",
+            new StartNodeDef(TestControlNodeHandler.class, "f"))
+                .addNode(new ForkNodeDef("f", TestControlNodeHandler.class, Arrays.asList(new String[]{"a", "b"})))
                 .addNode(new NodeDef("a", null, AsynchNodeHandler.class, Arrays.asList(new String[]{"j"})))
                 .addNode(new NodeDef("b", null, AsynchNodeHandler.class, Arrays.asList(new String[]{"end"})))
-                .addNode(new JoinNodeDef("j", "end"))
-                .addNode(new EndNodeDef("end"));
+                .addNode(new JoinNodeDef("j", TestControlNodeHandler.class, "end"))
+                .addNode(new EndNodeDef("end", TestControlNodeHandler.class));
 
         LiteWorkflowInstance job = new LiteWorkflowInstance(def, new XConfiguration(), "1");
         job.start();
@@ -541,13 +585,14 @@ public class TestLiteWorkflowLib extends
 
     public void testWFKillWithRunningNodes() throws WorkflowException {
 
-        LiteWorkflowApp def = new LiteWorkflowApp("wf", "<worklfow-app/>", new StartNodeDef("f"))
-                .addNode(new ForkNodeDef("f", Arrays.asList(new String[]{"a", "b"})))
+        LiteWorkflowApp def = new LiteWorkflowApp("wf", "<worklfow-app/>",
+            new StartNodeDef(TestControlNodeHandler.class, "f"))
+                .addNode(new ForkNodeDef("f", TestControlNodeHandler.class, Arrays.asList(new String[]{"a", "b"})))
                 .addNode(new NodeDef("a", null, AsynchNodeHandler.class, Arrays.asList(new String[]{"j"})))
                 .addNode(new NodeDef("b", null, AsynchNodeHandler.class, Arrays.asList(new String[]{"kill"})))
-                .addNode(new JoinNodeDef("j", "end"))
-                .addNode(new KillNodeDef("kill", "killed"))
-                .addNode(new EndNodeDef("end"));
+                .addNode(new JoinNodeDef("j", TestControlNodeHandler.class, "end"))
+                .addNode(new KillNodeDef("kill", "killed", TestControlNodeHandler.class))
+                .addNode(new EndNodeDef("end", TestControlNodeHandler.class));
 
         LiteWorkflowInstance job = new LiteWorkflowInstance(def, new XConfiguration(), "1");
         job.start();
@@ -561,12 +606,13 @@ public class TestLiteWorkflowLib extends
 
     public void testWfFailWithRunningNodes() throws WorkflowException {
 
-        LiteWorkflowApp def = new LiteWorkflowApp("wf", "<worklfow-app/>", new StartNodeDef("f"))
-                .addNode(new ForkNodeDef("f", Arrays.asList(new String[]{"a", "b"})))
+        LiteWorkflowApp def = new LiteWorkflowApp("wf", "<worklfow-app/>",
+            new StartNodeDef(TestControlNodeHandler.class, "f"))
+                .addNode(new ForkNodeDef("f", TestControlNodeHandler.class, Arrays.asList(new String[]{"a", "b"})))
                 .addNode(new NodeDef("a", null, AsynchNodeHandler.class, Arrays.asList(new String[]{"j"})))
                 .addNode(new NodeDef("b", null, AsynchNodeHandler.class, Arrays.asList(new String[]{"x"})))
-                .addNode(new JoinNodeDef("j", "end"))
-                .addNode(new EndNodeDef("end"));
+                .addNode(new JoinNodeDef("j", TestControlNodeHandler.class, "end"))
+                .addNode(new EndNodeDef("end", TestControlNodeHandler.class));
 
         LiteWorkflowInstance job = new LiteWorkflowInstance(def, new XConfiguration(), "1");
         try {
@@ -588,12 +634,13 @@ public class TestLiteWorkflowLib extends
         decTrans.add("one");
         decTrans.add("two");
         decTrans.add("three");
-        LiteWorkflowApp def = new LiteWorkflowApp("testWf", "<worklfow-app/>", new StartNodeDef("d"))
+        LiteWorkflowApp def = new LiteWorkflowApp("testWf", "<worklfow-app/>",
+            new StartNodeDef(TestControlNodeHandler.class, "d"))
                 .addNode(new DecisionNodeDef("d", "", TestDecisionNodeHandler.class, decTrans))
                 .addNode(new NodeDef("one", null, SynchNodeHandler.class, Arrays.asList(new String[]{"end"})))
                 .addNode(new NodeDef("two", null, SynchNodeHandler.class, Arrays.asList(new String[]{"end"})))
                 .addNode(new NodeDef("three", null, SynchNodeHandler.class, Arrays.asList(new String[]{"end"})))
-                .addNode(new EndNodeDef("end"));
+                .addNode(new EndNodeDef("end", TestControlNodeHandler.class));
 
         LiteWorkflowInstance job = new LiteWorkflowInstance(def, new XConfiguration(), "abcde");
         job.start();
@@ -649,11 +696,12 @@ public class TestLiteWorkflowLib extends
 
 
     public void testActionOKError() throws WorkflowException {
-        LiteWorkflowApp def = new LiteWorkflowApp("wf", "<worklfow-app/>", new StartNodeDef("a"))
+        LiteWorkflowApp def = new LiteWorkflowApp("wf", "<worklfow-app/>",
+            new StartNodeDef(TestControlNodeHandler.class, "a"))
                 .addNode(new ActionNodeDef("a", "", TestActionNodeHandler.class, "b", "c"))
                 .addNode(new NodeDef("b", null, SynchNodeHandler.class, Arrays.asList(new String[]{"end"})))
                 .addNode(new NodeDef("c", null, SynchNodeHandler.class, Arrays.asList(new String[]{"end"})))
-                .addNode(new EndNodeDef("end"));
+                .addNode(new EndNodeDef("end", TestControlNodeHandler.class));
 
         LiteWorkflowInstance job = new LiteWorkflowInstance(def, new XConfiguration(), "1");
 
@@ -679,9 +727,10 @@ public class TestLiteWorkflowLib extends
     }
 
     public void testJobPersistance() throws WorkflowException {
-        LiteWorkflowApp def = new LiteWorkflowApp("wf", "<worklfow-app/>", new StartNodeDef("one"))
+        LiteWorkflowApp def = new LiteWorkflowApp("wf", "<worklfow-app/>",
+            new StartNodeDef(TestControlNodeHandler.class, "one"))
                 .addNode(new NodeDef("one", null, AsynchNodeHandler.class, Arrays.asList(new String[]{"end"})))
-                .addNode(new EndNodeDef("end"));
+                .addNode(new EndNodeDef("end", TestControlNodeHandler.class));
 
         LiteWorkflowInstance job = new LiteWorkflowInstance(def, new XConfiguration(), "1");
         job.setVar("a", "A");
@@ -709,11 +758,12 @@ public class TestLiteWorkflowLib extends
 
 
     public void testImmediateError() throws WorkflowException {
-        LiteWorkflowApp workflowDef = new LiteWorkflowApp("testWf", "<worklfow-app/>", new StartNodeDef("one"))
+        LiteWorkflowApp workflowDef = new LiteWorkflowApp("testWf", "<worklfow-app/>",
+            new StartNodeDef(TestControlNodeHandler.class, "one"))
                 .addNode(new NodeDef("one", null, SynchNodeHandler.class, Arrays.asList(new String[]{"two"})))
                 .addNode(new NodeDef("two", null, SynchNodeHandler.class, Arrays.asList(new String[]{"four"})))
                 .addNode(new NodeDef("three", null, SynchNodeHandler.class, Arrays.asList(new String[]{"end"})))
-                .addNode(new EndNodeDef("end"));
+                .addNode(new EndNodeDef("end", TestControlNodeHandler.class));
 
         LiteWorkflowInstance workflowJob = new LiteWorkflowInstance(workflowDef, new XConfiguration(), "abcde");
         try {
@@ -732,9 +782,9 @@ public class TestLiteWorkflowLib extends
 
     public void testSelfTransition() throws WorkflowException {
         try {
-            new LiteWorkflowApp("wf", "<worklfow-app/>", new StartNodeDef("one"))
+            new LiteWorkflowApp("wf", "<worklfow-app/>", new StartNodeDef(TestControlNodeHandler.class, "one"))
                     .addNode(new NodeDef("one", null, SynchNodeHandler.class, Arrays.asList(new String[]{"one"})))
-                    .addNode(new EndNodeDef("end"));
+                    .addNode(new EndNodeDef("end", TestControlNodeHandler.class));
             fail();
         }
         catch (WorkflowException ex) {
@@ -743,10 +793,11 @@ public class TestLiteWorkflowLib extends
     }
 
     public void testLoopSimple() throws WorkflowException {
-        LiteWorkflowApp def = new LiteWorkflowApp("wf", "<worklfow-app/>", new StartNodeDef("one"))
+        LiteWorkflowApp def = new LiteWorkflowApp("wf", "<worklfow-app/>",
+            new StartNodeDef(TestControlNodeHandler.class, "one"))
                 .addNode(new NodeDef("one", null, SynchNodeHandler.class, Arrays.asList(new String[]{"two"})))
                 .addNode(new NodeDef("two", null, SynchNodeHandler.class, Arrays.asList(new String[]{"one"})))
-                .addNode(new EndNodeDef("end"));
+                .addNode(new EndNodeDef("end", TestControlNodeHandler.class));
 
         LiteWorkflowInstance job = new LiteWorkflowInstance(def, new XConfiguration(), "1");
         try {
@@ -761,14 +812,16 @@ public class TestLiteWorkflowLib extends
 
     public void testLoopFork() throws WorkflowException {
 
-        LiteWorkflowApp def = new LiteWorkflowApp("wf", "<worklfow-app/>", new StartNodeDef("one"))
+        LiteWorkflowApp def = new LiteWorkflowApp("wf", "<worklfow-app/>",
+            new StartNodeDef(TestControlNodeHandler.class, "one"))
                 .addNode(new NodeDef("one", null, SynchNodeHandler.class, Arrays.asList(new String[]{"f"})))
-                .addNode(new ForkNodeDef("f", Arrays.asList(new String[]{"two", "three"})))
+                .addNode(new ForkNodeDef("f", TestControlNodeHandler.class,
+                                         Arrays.asList(new String[]{"two", "three"})))
                 .addNode(new NodeDef("two", null, SynchNodeHandler.class, Arrays.asList(new String[]{"j"})))
                 .addNode(new NodeDef("three", null, SynchNodeHandler.class, Arrays.asList(new String[]{"j"})))
-                .addNode(new JoinNodeDef("j", "four"))
+                .addNode(new JoinNodeDef("j", TestControlNodeHandler.class, "four"))
                 .addNode(new NodeDef("four", null, SynchNodeHandler.class, Arrays.asList(new String[]{"f"})))
-                .addNode(new EndNodeDef("end"));
+                .addNode(new EndNodeDef("end", TestControlNodeHandler.class));
 
         LiteWorkflowInstance job = new LiteWorkflowInstance(def, new XConfiguration(), "1");
         try {

Modified: incubator/oozie/trunk/release-log.txt
URL: http://svn.apache.org/viewvc/incubator/oozie/trunk/release-log.txt?rev=1368795&r1=1368794&r2=1368795&view=diff
==============================================================================
--- incubator/oozie/trunk/release-log.txt (original)
+++ incubator/oozie/trunk/release-log.txt Fri Aug  3 04:59:53 2012
@@ -1,5 +1,6 @@
 -- Oozie 3.3.0 release (trunk - unreleased)
 
+OOZIE-243 Workflow nodes START/END/KILL/FORK/JOIN should create rows in the action DB table (tucu)
 OOZIE-913 Add Name Node, job-xml, and configuration Elements to FS action (rkanter via tucu)
 OOZIE-937 Mention how to use the sharelib in the Quick Start page of the docs (rkanter via tucu)
 OOZIE-886 Display request header info when trace is enabled (jay7306 via tucu)