Added complete lifecycle methods for the Application EntryPoint interfaces

git-svn-id: https://hyracks.googlecode.com/svn/branches/fullstack_hyracks_ioc@2992 123451ca-8445-de46-9d55-352943316053
diff --git a/hyracks/hyracks-api/src/main/java/edu/uci/ics/hyracks/api/application/ICCApplicationContext.java b/hyracks/hyracks-api/src/main/java/edu/uci/ics/hyracks/api/application/ICCApplicationContext.java
index fd60ee6..c4b7802 100644
--- a/hyracks/hyracks-api/src/main/java/edu/uci/ics/hyracks/api/application/ICCApplicationContext.java
+++ b/hyracks/hyracks-api/src/main/java/edu/uci/ics/hyracks/api/application/ICCApplicationContext.java
@@ -28,7 +28,7 @@
     /**
      * Sets the state that must be distributed by the infrastructure to all the
      * NC application contexts. Any state set by calling this method in
-     * the {@link ICCApplicationEntryPoint#appMain(ICCApplicationContext, String[])} call
+     * the {@link ICCApplicationEntryPoint#start(ICCApplicationContext, String[])} call
      * is made available to all the {@link INCApplicationContext} objects at each Node Controller.
      * The state is then available to be inspected by the application at the NC during or
      * after the {@link INCBootstrap#start()} call.
diff --git a/hyracks/hyracks-api/src/main/java/edu/uci/ics/hyracks/api/application/ICCApplicationEntryPoint.java b/hyracks/hyracks-api/src/main/java/edu/uci/ics/hyracks/api/application/ICCApplicationEntryPoint.java
index cc1d93e..c22cc51 100644
--- a/hyracks/hyracks-api/src/main/java/edu/uci/ics/hyracks/api/application/ICCApplicationEntryPoint.java
+++ b/hyracks/hyracks-api/src/main/java/edu/uci/ics/hyracks/api/application/ICCApplicationEntryPoint.java
@@ -1,5 +1,7 @@
 package edu.uci.ics.hyracks.api.application;
 
 public interface ICCApplicationEntryPoint {
-    public void appMain(ICCApplicationContext ccAppCtx, String[] args) throws Exception;
+    public void start(ICCApplicationContext ccAppCtx, String[] args) throws Exception;
+
+    public void stop() throws Exception;
 }
\ No newline at end of file
diff --git a/hyracks/hyracks-api/src/main/java/edu/uci/ics/hyracks/api/application/INCApplicationEntryPoint.java b/hyracks/hyracks-api/src/main/java/edu/uci/ics/hyracks/api/application/INCApplicationEntryPoint.java
index afa824d..9a25b3c 100644
--- a/hyracks/hyracks-api/src/main/java/edu/uci/ics/hyracks/api/application/INCApplicationEntryPoint.java
+++ b/hyracks/hyracks-api/src/main/java/edu/uci/ics/hyracks/api/application/INCApplicationEntryPoint.java
@@ -1,5 +1,9 @@
 package edu.uci.ics.hyracks.api.application;
 
 public interface INCApplicationEntryPoint {
-    public void appMain(INCApplicationContext ncAppCtx, String[] args) throws Exception;
+    public void start(INCApplicationContext ncAppCtx, String[] args) throws Exception;
+
+    public void notifyStartupComplete() throws Exception;
+
+    public void stop() throws Exception;
 }
\ No newline at end of file
diff --git a/hyracks/hyracks-control/hyracks-control-cc/src/main/java/edu/uci/ics/hyracks/control/cc/ClusterControllerService.java b/hyracks/hyracks-control/hyracks-control-cc/src/main/java/edu/uci/ics/hyracks/control/cc/ClusterControllerService.java
index 677cd18..137cf05 100644
--- a/hyracks/hyracks-control/hyracks-control-cc/src/main/java/edu/uci/ics/hyracks/control/cc/ClusterControllerService.java
+++ b/hyracks/hyracks-control/hyracks-control-cc/src/main/java/edu/uci/ics/hyracks/control/cc/ClusterControllerService.java
@@ -197,7 +197,7 @@
             ICCApplicationEntryPoint aep = (ICCApplicationEntryPoint) c.newInstance();
             String[] args = ccConfig.appArgs == null ? null : ccConfig.appArgs.toArray(new String[ccConfig.appArgs
                     .size()]);
-            aep.appMain(appCtx, args);
+            aep.start(appCtx, args);
         }
     }
 
diff --git a/hyracks/hyracks-control/hyracks-control-nc/src/main/java/edu/uci/ics/hyracks/control/nc/NodeControllerService.java b/hyracks/hyracks-control/hyracks-control-nc/src/main/java/edu/uci/ics/hyracks/control/nc/NodeControllerService.java
index fb1e57c..6af23c2 100644
--- a/hyracks/hyracks-control/hyracks-control-nc/src/main/java/edu/uci/ics/hyracks/control/nc/NodeControllerService.java
+++ b/hyracks/hyracks-control/hyracks-control-nc/src/main/java/edu/uci/ics/hyracks/control/nc/NodeControllerService.java
@@ -115,6 +115,8 @@
 
     private NCApplicationContext appCtx;
 
+    private INCApplicationEntryPoint ncAppEntryPoint;
+
     private final MemoryMXBean memoryMXBean;
 
     private final List<GarbageCollectorMXBean> gcMXBeans;
@@ -245,6 +247,9 @@
         }
 
         LOGGER.log(Level.INFO, "Started NodeControllerService");
+        if (ncAppEntryPoint != null) {
+            ncAppEntryPoint.notifyStartupComplete();
+        }
     }
 
     private void startApplication() throws Exception {
@@ -252,10 +257,10 @@
         String className = ncConfig.appNCMainClass;
         if (className != null) {
             Class<?> c = Class.forName(className);
-            INCApplicationEntryPoint aep = (INCApplicationEntryPoint) c.newInstance();
+            ncAppEntryPoint = (INCApplicationEntryPoint) c.newInstance();
             String[] args = ncConfig.appArgs == null ? new String[0] : ncConfig.appArgs
                     .toArray(new String[ncConfig.appArgs.size()]);
-            aep.appMain(appCtx, args);
+            ncAppEntryPoint.start(appCtx, args);
         }
     }
 
diff --git a/hyracks/hyracks-examples/btree-example/btreehelper/src/main/java/edu/uci/ics/hyracks/examples/btree/helper/NCApplicationEntryPoint.java b/hyracks/hyracks-examples/btree-example/btreehelper/src/main/java/edu/uci/ics/hyracks/examples/btree/helper/NCApplicationEntryPoint.java
index 2a1b3af..a1dacd8 100644
--- a/hyracks/hyracks-examples/btree-example/btreehelper/src/main/java/edu/uci/ics/hyracks/examples/btree/helper/NCApplicationEntryPoint.java
+++ b/hyracks/hyracks-examples/btree-example/btreehelper/src/main/java/edu/uci/ics/hyracks/examples/btree/helper/NCApplicationEntryPoint.java
@@ -5,8 +5,18 @@
 
 public class NCApplicationEntryPoint implements INCApplicationEntryPoint {
     @Override
-    public void appMain(INCApplicationContext ncAppCtx, String[] args) throws Exception {
+    public void start(INCApplicationContext ncAppCtx, String[] args) throws Exception {
         RuntimeContext rCtx = new RuntimeContext(ncAppCtx);
         ncAppCtx.setApplicationObject(rCtx);
     }
+
+    @Override
+    public void notifyStartupComplete() throws Exception {
+
+    }
+
+    @Override
+    public void stop() throws Exception {
+
+    }
 }
\ No newline at end of file
diff --git a/pregelix/pregelix-runtime/src/main/java/edu/uci/ics/pregelix/runtime/bootstrap/NCApplicationEntryPoint.java b/pregelix/pregelix-runtime/src/main/java/edu/uci/ics/pregelix/runtime/bootstrap/NCApplicationEntryPoint.java
index 31162f1..fbebc66 100644
--- a/pregelix/pregelix-runtime/src/main/java/edu/uci/ics/pregelix/runtime/bootstrap/NCApplicationEntryPoint.java
+++ b/pregelix/pregelix-runtime/src/main/java/edu/uci/ics/pregelix/runtime/bootstrap/NCApplicationEntryPoint.java
@@ -6,8 +6,18 @@
 
 public class NCApplicationEntryPoint implements INCApplicationEntryPoint {
     @Override
-    public void appMain(INCApplicationContext ncAppCtx, String[] args) throws Exception {
+    public void start(INCApplicationContext ncAppCtx, String[] args) throws Exception {
         RuntimeContext rCtx = new RuntimeContext(ncAppCtx);
         ncAppCtx.setApplicationObject(rCtx);
     }
+
+    @Override
+    public void notifyStartupComplete() throws Exception {
+
+    }
+
+    @Override
+    public void stop() throws Exception {
+
+    }
 }
\ No newline at end of file