You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by sh...@apache.org on 2015/05/10 22:41:10 UTC

[2/5] airavata git commit: Refactored GFacHandler and GFacProvider inheritance, merged Recoverable interface with its correspond normal interface.

Refactored GFacHandler and GFacProvider inheritance, merged Recoverable interface with its correspond normal interface.


Project: http://git-wip-us.apache.org/repos/asf/airavata/repo
Commit: http://git-wip-us.apache.org/repos/asf/airavata/commit/a3487e77
Tree: http://git-wip-us.apache.org/repos/asf/airavata/tree/a3487e77
Diff: http://git-wip-us.apache.org/repos/asf/airavata/diff/a3487e77

Branch: refs/heads/master
Commit: a3487e770a29be9060ee72298fa91f9b0a71e4be
Parents: 4819dbb
Author: shamrath <sh...@gmail.com>
Authored: Sun May 10 15:07:37 2015 -0400
Committer: shamrath <sh...@gmail.com>
Committed: Sun May 10 15:07:37 2015 -0400

----------------------------------------------------------------------
 .../gaussian/handler/GaussianHandler.java       |  4 +-
 .../gfac/bes/handlers/SMSByteIOInHandler.java   |  9 +-
 .../gfac/bes/handlers/SMSByteIOOutHandler.java  |  5 ++
 .../gfac/bes/provider/impl/BESProvider.java     |  9 +-
 .../airavata/gfac/core/cpi/BetterGfacImpl.java  | 88 +++++++-------------
 .../gfac/core/handler/AbstractHandler.java      | 25 +++++-
 .../handler/AbstractRecoverableHandler.java     | 88 --------------------
 .../core/handler/AppDescriptorCheckHandler.java |  2 +-
 .../airavata/gfac/core/handler/GFacHandler.java |  8 ++
 .../core/handler/GFacRecoverableHandler.java    | 45 ----------
 .../provider/AbstractRecoverableProvider.java   | 75 -----------------
 .../gfac/core/provider/GFacProvider.java        |  7 ++
 .../core/provider/GFacRecoverableProvider.java  | 44 ----------
 .../gfac/core/states/GfacPluginState.java       |  7 +-
 .../airavata/gfac/core/utils/GFacUtils.java     | 20 +++--
 .../apache/airavata/job/TestGlobalHandler.java  |  6 ++
 .../org/apache/airavata/job/TestInHandler.java  |  6 ++
 .../org/apache/airavata/job/TestOutHandler.java |  6 ++
 .../org/apache/airavata/job/TestProvider.java   |  5 ++
 .../airavata/job/TestThreadedHandler.java       |  6 ++
 .../handler/GSISSHDirectorySetupHandler.java    |  4 +-
 .../gfac/gsissh/handler/GSISSHInputHandler.java |  4 +-
 .../gsissh/handler/GSISSHOutputHandler.java     |  4 +-
 .../gsissh/handler/NewGSISSHOutputHandler.java  |  7 +-
 .../gsissh/provider/impl/GSISSHProvider.java    |  5 +-
 .../handler/LocalDirectorySetupHandler.java     |  6 ++
 .../gfac/local/handler/LocalInputHandler.java   |  5 +-
 .../gfac/local/provider/impl/LocalProvider.java |  5 ++
 .../handlers/GridPullMonitorHandler.java        |  6 ++
 .../handlers/GridPushMonitorHandler.java        |  5 ++
 .../ssh/handler/AdvancedSCPInputHandler.java    |  4 +-
 .../ssh/handler/AdvancedSCPOutputHandler.java   |  5 ++
 .../gfac/ssh/handler/NewSSHOutputHandler.java   |  7 +-
 .../ssh/handler/SSHDirectorySetupHandler.java   |  8 +-
 .../gfac/ssh/handler/SSHInputHandler.java       |  5 ++
 .../gfac/ssh/handler/SSHOutputHandler.java      |  5 ++
 .../gfac/ssh/provider/impl/SSHProvider.java     |  5 +-
 37 files changed, 208 insertions(+), 347 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/airavata/blob/a3487e77/modules/gfac/gfac-application-specific-handlers/src/main/java/org/apache/airavata/application/gaussian/handler/GaussianHandler.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-application-specific-handlers/src/main/java/org/apache/airavata/application/gaussian/handler/GaussianHandler.java b/modules/gfac/gfac-application-specific-handlers/src/main/java/org/apache/airavata/application/gaussian/handler/GaussianHandler.java
index 048ade6..0d21665 100644
--- a/modules/gfac/gfac-application-specific-handlers/src/main/java/org/apache/airavata/application/gaussian/handler/GaussianHandler.java
+++ b/modules/gfac/gfac-application-specific-handlers/src/main/java/org/apache/airavata/application/gaussian/handler/GaussianHandler.java
@@ -22,7 +22,7 @@
 package org.apache.airavata.application.gaussian.handler;
 
 import org.apache.airavata.gfac.core.context.JobExecutionContext;
-import org.apache.airavata.gfac.core.handler.AbstractRecoverableHandler;
+import org.apache.airavata.gfac.core.handler.AbstractHandler;
 import org.apache.airavata.gfac.core.handler.GFacHandlerException;
 import org.apache.airavata.model.appcatalog.appinterface.InputDataObjectType;
 import org.apache.airavata.model.workspace.experiment.ComputationalResourceScheduling;
@@ -39,7 +39,7 @@ import java.util.HashMap;
 import java.util.Map;
 import java.util.Properties;
 
-public class GaussianHandler extends AbstractRecoverableHandler {
+public class GaussianHandler extends AbstractHandler {
 
     private static final Logger logger = LoggerFactory.getLogger(GaussianHandler.class);
     public static final String LINK_SECTION = "%";

http://git-wip-us.apache.org/repos/asf/airavata/blob/a3487e77/modules/gfac/gfac-bes/src/main/java/org/apache/airavata/gfac/bes/handlers/SMSByteIOInHandler.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-bes/src/main/java/org/apache/airavata/gfac/bes/handlers/SMSByteIOInHandler.java b/modules/gfac/gfac-bes/src/main/java/org/apache/airavata/gfac/bes/handlers/SMSByteIOInHandler.java
index 6bc6183..add8cb1 100644
--- a/modules/gfac/gfac-bes/src/main/java/org/apache/airavata/gfac/bes/handlers/SMSByteIOInHandler.java
+++ b/modules/gfac/gfac-bes/src/main/java/org/apache/airavata/gfac/bes/handlers/SMSByteIOInHandler.java
@@ -45,6 +45,11 @@ public class SMSByteIOInHandler extends AbstractSMSHandler implements GFacHandle
 		}
 
  	}
-	
-	
+
+    @Override
+    public void recover(JobExecutionContext jobExecutionContext) throws GFacHandlerException {
+        // TODO: Auto generated method body.
+    }
+
+
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata/blob/a3487e77/modules/gfac/gfac-bes/src/main/java/org/apache/airavata/gfac/bes/handlers/SMSByteIOOutHandler.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-bes/src/main/java/org/apache/airavata/gfac/bes/handlers/SMSByteIOOutHandler.java b/modules/gfac/gfac-bes/src/main/java/org/apache/airavata/gfac/bes/handlers/SMSByteIOOutHandler.java
index 354abf6..1baa2d9 100644
--- a/modules/gfac/gfac-bes/src/main/java/org/apache/airavata/gfac/bes/handlers/SMSByteIOOutHandler.java
+++ b/modules/gfac/gfac-bes/src/main/java/org/apache/airavata/gfac/bes/handlers/SMSByteIOOutHandler.java
@@ -84,5 +84,10 @@ public class SMSByteIOOutHandler extends AbstractSMSHandler implements GFacHandl
 			}		
 
 	 	}
+
+    @Override
+    public void recover(JobExecutionContext jobExecutionContext) throws GFacHandlerException {
+        // TODO: Auto generated method body.
+    }
 }
 

http://git-wip-us.apache.org/repos/asf/airavata/blob/a3487e77/modules/gfac/gfac-bes/src/main/java/org/apache/airavata/gfac/bes/provider/impl/BESProvider.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-bes/src/main/java/org/apache/airavata/gfac/bes/provider/impl/BESProvider.java b/modules/gfac/gfac-bes/src/main/java/org/apache/airavata/gfac/bes/provider/impl/BESProvider.java
index b301f2b..d505671 100644
--- a/modules/gfac/gfac-bes/src/main/java/org/apache/airavata/gfac/bes/provider/impl/BESProvider.java
+++ b/modules/gfac/gfac-bes/src/main/java/org/apache/airavata/gfac/bes/provider/impl/BESProvider.java
@@ -412,8 +412,13 @@ public class BESProvider extends AbstractProvider implements GFacProvider,
 			throws GFacProviderException, GFacException {
 		// TODO Auto-generated method stub
 	}
-	
-	protected void waitUntilDone(FactoryClient factory, EndpointReferenceType activityEpr, JobDetails jobDetails) throws Exception {
+
+    @Override
+    public void recover(JobExecutionContext jobExecutionContext) throws GFacProviderException, GFacException {
+        // TODO: Auto generated method body.
+    }
+
+    protected void waitUntilDone(FactoryClient factory, EndpointReferenceType activityEpr, JobDetails jobDetails) throws Exception {
 		
 		try {
 			while ((factory.getActivityStatus(activityEpr) != ActivityStateEnumeration.FINISHED)

http://git-wip-us.apache.org/repos/asf/airavata/blob/a3487e77/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/cpi/BetterGfacImpl.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/cpi/BetterGfacImpl.java b/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/cpi/BetterGfacImpl.java
index 98ba942..d5e623e 100644
--- a/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/cpi/BetterGfacImpl.java
+++ b/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/cpi/BetterGfacImpl.java
@@ -43,7 +43,6 @@ import org.apache.airavata.gfac.core.notification.events.ExecutionFailEvent;
 import org.apache.airavata.gfac.core.notification.listeners.LoggingListener;
 import org.apache.airavata.gfac.core.provider.GFacProvider;
 import org.apache.airavata.gfac.core.provider.GFacProviderException;
-import org.apache.airavata.gfac.core.provider.GFacRecoverableProvider;
 import org.apache.airavata.gfac.core.states.GfacExperimentState;
 import org.apache.airavata.gfac.core.states.GfacPluginState;
 import org.apache.airavata.gfac.core.utils.GFacUtils;
@@ -829,20 +828,16 @@ public class BetterGfacImpl implements GFac,Watcher {
         GFacProvider provider = jobExecutionContext.getProvider();
         if (provider != null) {
             monitorPublisher.publish(new GfacExperimentStateChangeRequest(new MonitorID(jobExecutionContext), GfacExperimentState.PROVIDERINVOKING));
-            String plState = GFacUtils.getPluginState(zk, jobExecutionContext, provider.getClass().getName());
-            if (plState!=null && Integer.valueOf(plState) >= GfacPluginState.INVOKED.getValue()) {    // this will make sure if a plugin crashes it will not launch from the scratch, but plugins have to save their invoked state
-                if (provider instanceof GFacRecoverableProvider) {
-                    GFacUtils.createPluginZnode(zk, jobExecutionContext, provider.getClass().getName());
-                    ((GFacRecoverableProvider) provider).recover(jobExecutionContext);
-                    GFacUtils.updatePluginState(zk, jobExecutionContext, provider.getClass().getName(), GfacPluginState.COMPLETED);
-                }
-            } else {
-                GFacUtils.createPluginZnode(zk, jobExecutionContext, provider.getClass().getName());
+            GfacPluginState plState = GFacUtils.getPluginState(zk, jobExecutionContext, provider.getClass().getName());
+            GFacUtils.createPluginZnode(zk, jobExecutionContext, provider.getClass().getName());
+            if (plState != null && plState == GfacPluginState.INVOKING) {    // this will make sure if a plugin crashes it will not launch from the scratch, but plugins have to save their invoked state
                 initProvider(provider, jobExecutionContext);
                 executeProvider(provider, jobExecutionContext);
                 disposeProvider(provider, jobExecutionContext);
-                GFacUtils.updatePluginState(zk, jobExecutionContext, provider.getClass().getName(), GfacPluginState.COMPLETED);
+            } else {
+                provider.recover(jobExecutionContext);
             }
+            GFacUtils.updatePluginState(zk, jobExecutionContext, provider.getClass().getName(), GfacPluginState.COMPLETED);
             monitorPublisher.publish(new GfacExperimentStateChangeRequest(new MonitorID(jobExecutionContext), GfacExperimentState.PROVIDERINVOKED));
         }
 
@@ -868,24 +863,21 @@ public class BetterGfacImpl implements GFac,Watcher {
         }
     }
 
+    // TODO - Did refactoring, but need to recheck the logic again.
     private void reInvokeProviderCancel(JobExecutionContext jobExecutionContext) throws GFacException, GFacProviderException, ApplicationSettingsException, InterruptedException, KeeperException {
         GFacProvider provider = jobExecutionContext.getProvider();
         if (provider != null) {
             monitorPublisher.publish(new GfacExperimentStateChangeRequest(new MonitorID(jobExecutionContext), GfacExperimentState.PROVIDERINVOKING));
-            String plState = GFacUtils.getPluginState(zk, jobExecutionContext, provider.getClass().getName());
-            if (Integer.valueOf(plState) >= GfacPluginState.INVOKED.getValue()) {    // this will make sure if a plugin crashes it will not launch from the scratch, but plugins have to save their invoked state
-                if (provider instanceof GFacRecoverableProvider) {
-                    GFacUtils.createPluginZnode(zk, jobExecutionContext, provider.getClass().getName());
-                    ((GFacRecoverableProvider) provider).recover(jobExecutionContext);
-                    GFacUtils.updatePluginState(zk, jobExecutionContext, provider.getClass().getName(), GfacPluginState.COMPLETED);
-                }
-            } else {
-                GFacUtils.createPluginZnode(zk, jobExecutionContext, provider.getClass().getName());
+            GfacPluginState plState = GFacUtils.getPluginState(zk, jobExecutionContext, provider.getClass().getName());
+            GFacUtils.createPluginZnode(zk, jobExecutionContext, provider.getClass().getName());
+            if (plState == GfacPluginState.UNKNOWN || plState == GfacPluginState.INVOKING) {    // this will make sure if a plugin crashes it will not launch from the scratch, but plugins have to save their invoked state
                 initProvider(provider, jobExecutionContext);
                 cancelProvider(provider, jobExecutionContext);
                 disposeProvider(provider, jobExecutionContext);
-                GFacUtils.updatePluginState(zk, jobExecutionContext, provider.getClass().getName(), GfacPluginState.COMPLETED);
+            } else {
+                provider.recover(jobExecutionContext);
             }
+            GFacUtils.updatePluginState(zk, jobExecutionContext, provider.getClass().getName(), GfacPluginState.COMPLETED);
             monitorPublisher.publish(new GfacExperimentStateChangeRequest(new MonitorID(jobExecutionContext), GfacExperimentState.PROVIDERINVOKED));
         }
 
@@ -1106,6 +1098,7 @@ public class BetterGfacImpl implements GFac,Watcher {
      * @param jobExecutionContext
      * @throws GFacException
      */
+    // TODO - Did refactoring, but need to recheck the logic again.
     private void reInvokeInFlowHandlers(JobExecutionContext jobExecutionContext) throws GFacException {
         List<GFacHandlerConfig> handlers = jobExecutionContext.getGFacConfiguration().getInHandlers();
         try {
@@ -1117,31 +1110,18 @@ public class BetterGfacImpl implements GFac,Watcher {
                 try {
                     handlerClass = Class.forName(handlerClassName.getClassName().trim()).asSubclass(GFacHandler.class);
                     handler = handlerClass.newInstance();
-                    String plState = GFacUtils.getPluginState(zk, jobExecutionContext, handlerClassName.getClassName());
-                    int state = 0;
-                    try {
-                        state = Integer.valueOf(plState);
-                    } catch (NumberFormatException e) {
-
-                    }
-                    if (state >= GfacPluginState.INVOKED.getValue()) {
-                        if (handler instanceof GFacRecoverableHandler) {
-                            // if these already ran we re-run only recoverable handlers
-                            log.info(handlerClassName.getClassName() + " is a recoverable handler so we recover the handler");
-                            GFacUtils.createPluginZnode(zk, jobExecutionContext, handlerClassName.getClassName(), GfacPluginState.INVOKING);
-                            handler.initProperties(handlerClassName.getProperties());
-                            ((GFacRecoverableHandler) handler).recover(jobExecutionContext);
-                            GFacUtils.updatePluginState(zk, jobExecutionContext, handlerClassName.getClassName(), GfacPluginState.COMPLETED);
-                        } else {
-                            log.info(handlerClassName.getClassName() + " is not a recoverable handler so we do not run because it already ran in last-run");
-                        }
-                    } else {
+                    GfacPluginState plState = GFacUtils.getPluginState(zk, jobExecutionContext, handlerClassName.getClassName());
+                    GFacUtils.createPluginZnode(zk, jobExecutionContext, handlerClassName.getClassName(), GfacPluginState.INVOKING);
+                    handler.initProperties(handlerClassName.getProperties());
+                    if (plState == GfacPluginState.UNKNOWN || plState == GfacPluginState.INVOKING) {
                         log.info(handlerClassName.getClassName() + " never ran so we run this is normal mode");
-                        GFacUtils.createPluginZnode(zk, jobExecutionContext, handlerClassName.getClassName(), GfacPluginState.INVOKING);
-                        handler.initProperties(handlerClassName.getProperties());
                         handler.invoke(jobExecutionContext);
-                        GFacUtils.updatePluginState(zk, jobExecutionContext, handlerClassName.getClassName(), GfacPluginState.COMPLETED);
+                    } else {
+                        // if these already ran we re-run only recoverable handlers
+                        log.info(handlerClassName.getClassName() + " is a recoverable handler so we recover the handler");
+                        handler.recover(jobExecutionContext);
                     }
+                    GFacUtils.updatePluginState(zk, jobExecutionContext, handlerClassName.getClassName(), GfacPluginState.COMPLETED);
                 } catch (GFacHandlerException e) {
                     throw new GFacException("Error Executing a InFlow Handler", e.getCause());
                 } catch (ClassNotFoundException e) {
@@ -1166,6 +1146,7 @@ public class BetterGfacImpl implements GFac,Watcher {
         }
     }
 
+    // TODO - Did refactoring, but need to recheck the logic again.
     public void reInvokeOutFlowHandlers(JobExecutionContext jobExecutionContext) throws GFacException {
         String experimentPath = null;
         try {
@@ -1211,24 +1192,17 @@ public class BetterGfacImpl implements GFac,Watcher {
             try {
                 handlerClass = Class.forName(handlerClassName.getClassName().trim()).asSubclass(GFacHandler.class);
                 handler = handlerClass.newInstance();
-                String plState = GFacUtils.getPluginState(zk, jobExecutionContext, handlerClassName.getClassName());
-                if (Integer.valueOf(plState) >= GfacPluginState.INVOKED.getValue()) {
-                    if (handler instanceof GFacRecoverableHandler) {
-                        // if these already ran we re-run only recoverable handlers
-                        log.info(handlerClassName.getClassName() + " is a recoverable handler so we recover the handler");
-                        GFacUtils.createPluginZnode(zk, jobExecutionContext, handlerClassName.getClassName(), GfacPluginState.INVOKING);
-                        ((GFacRecoverableHandler) handler).recover(jobExecutionContext);
-                        GFacUtils.updatePluginState(zk, jobExecutionContext, handlerClassName.getClassName(), GfacPluginState.COMPLETED);
-                    } else {
-                        log.info(handlerClassName.getClassName() + " is not a recoverable handler so we do not run because it already ran in last-run");
-                    }
-                } else {
+                GfacPluginState plState = GFacUtils.getPluginState(zk, jobExecutionContext, handlerClassName.getClassName());
+                GFacUtils.createPluginZnode(zk, jobExecutionContext, handlerClassName.getClassName(), GfacPluginState.INVOKING);
+                if (plState == GfacPluginState.UNKNOWN || plState == GfacPluginState.INVOKING) {
                     log.info(handlerClassName.getClassName() + " never ran so we run this in normal mode");
-                    GFacUtils.createPluginZnode(zk, jobExecutionContext, handlerClassName.getClassName(), GfacPluginState.INVOKING);
                     handler.initProperties(handlerClassName.getProperties());
                     handler.invoke(jobExecutionContext);
-                    GFacUtils.updatePluginState(zk, jobExecutionContext, handlerClassName.getClassName(), GfacPluginState.COMPLETED);
+                } else {
+                    // if these already ran we re-run only recoverable handlers
+                    handler.recover(jobExecutionContext);
                 }
+                GFacUtils.updatePluginState(zk, jobExecutionContext, handlerClassName.getClassName(), GfacPluginState.COMPLETED);
             } catch (ClassNotFoundException e) {
                 try {
                     StringWriter errors = new StringWriter();

http://git-wip-us.apache.org/repos/asf/airavata/blob/a3487e77/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/handler/AbstractHandler.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/handler/AbstractHandler.java b/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/handler/AbstractHandler.java
index b6cc359..1bdfa97 100644
--- a/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/handler/AbstractHandler.java
+++ b/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/handler/AbstractHandler.java
@@ -23,12 +23,22 @@ package org.apache.airavata.gfac.core.handler;
 import org.apache.airavata.common.utils.MonitorPublisher;
 import org.apache.airavata.gfac.core.context.JobExecutionContext;
 import org.apache.airavata.gfac.core.cpi.BetterGfacImpl;
+import org.apache.airavata.gfac.core.states.GfacPluginState;
+import org.apache.airavata.gfac.core.utils.GFacUtils;
+import org.apache.airavata.model.appcatalog.appinterface.OutputDataObjectType;
+import org.apache.airavata.model.messaging.event.TaskIdentifier;
+import org.apache.airavata.model.messaging.event.TaskOutputChangeEvent;
 import org.apache.airavata.persistance.registry.jpa.impl.RegistryFactory;
 import org.apache.airavata.registry.cpi.Registry;
 import org.apache.airavata.registry.cpi.RegistryException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.List;
 
 public abstract class AbstractHandler implements GFacHandler {
-	protected Registry registry = null;
+    private static final Logger logger = LoggerFactory.getLogger(AbstractHandler.class);
+    protected Registry registry = null;
 
     protected MonitorPublisher publisher = null;
 
@@ -37,6 +47,11 @@ public abstract class AbstractHandler implements GFacHandler {
     }
 
     public void invoke(JobExecutionContext jobExecutionContext) throws GFacHandlerException {
+        try {
+            GFacUtils.updatePluginState(jobExecutionContext.getZk(), jobExecutionContext, this.getClass().getName(), GfacPluginState.INVOKED);
+        } catch (Exception e) {
+            logger.error("Error saving Recoverable provider state", e);
+        }
 		registry = jobExecutionContext.getRegistry();
         if(registry == null){
             try {
@@ -61,4 +76,12 @@ public abstract class AbstractHandler implements GFacHandler {
     public void setRegistry(Registry registry) {
         this.registry = registry;
     }
+
+    protected void fireTaskOutputChangeEvent(JobExecutionContext jobExecutionContext, List<OutputDataObjectType> outputArray) {
+        TaskIdentifier taskIdentity = new TaskIdentifier(jobExecutionContext.getTaskData().getTaskID(),
+                jobExecutionContext.getWorkflowNodeDetails().getNodeInstanceId(),
+                jobExecutionContext.getExperimentID(),
+                jobExecutionContext.getGatewayID());
+        publisher.publish(new TaskOutputChangeEvent(outputArray, taskIdentity));
+    }
 }

http://git-wip-us.apache.org/repos/asf/airavata/blob/a3487e77/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/handler/AbstractRecoverableHandler.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/handler/AbstractRecoverableHandler.java b/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/handler/AbstractRecoverableHandler.java
deleted file mode 100644
index 566a6ba..0000000
--- a/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/handler/AbstractRecoverableHandler.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
-*/
-package org.apache.airavata.gfac.core.handler;
-
-import org.apache.airavata.common.utils.MonitorPublisher;
-import org.apache.airavata.gfac.core.context.JobExecutionContext;
-import org.apache.airavata.gfac.core.cpi.BetterGfacImpl;
-import org.apache.airavata.gfac.core.states.GfacPluginState;
-import org.apache.airavata.gfac.core.utils.GFacUtils;
-import org.apache.airavata.model.appcatalog.appinterface.OutputDataObjectType;
-import org.apache.airavata.model.messaging.event.TaskIdentifier;
-import org.apache.airavata.model.messaging.event.TaskOutputChangeEvent;
-import org.apache.airavata.persistance.registry.jpa.impl.RegistryFactory;
-import org.apache.airavata.registry.cpi.Registry;
-import org.apache.airavata.registry.cpi.RegistryException;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.util.List;
-
-public abstract class AbstractRecoverableHandler implements GFacRecoverableHandler {
-    private static final Logger logger = LoggerFactory.getLogger(AppDescriptorCheckHandler.class);
-    protected Registry registry = null;
-
-    protected MonitorPublisher publisher = null;
-
-    protected AbstractRecoverableHandler() {
-        publisher = BetterGfacImpl.getMonitorPublisher();   // This will not be null because this will be initialize in GFacIml
-    }
-
-    public void invoke(JobExecutionContext jobExecutionContext) throws GFacHandlerException {
-        try {
-            GFacUtils.updatePluginState(jobExecutionContext.getZk(), jobExecutionContext, this.getClass().getName(), GfacPluginState.INVOKED);
-        } catch (Exception e) {
-            logger.error("Error saving Recoverable provider state", e);
-        }
-        registry = jobExecutionContext.getRegistry();
-        if (registry == null) {
-            try {
-                registry = RegistryFactory.getDefaultRegistry();
-            } catch (RegistryException e) {
-                throw new GFacHandlerException("unable to create registry instance", e);
-            }
-        }
-    }
-
-    public MonitorPublisher getPublisher() {
-        return publisher;
-    }
-
-    public void setPublisher(MonitorPublisher publisher) {
-        this.publisher = publisher;
-    }
-
-    public Registry getRegistry() {
-        return registry;
-    }
-
-    public void setRegistry(Registry registry) {
-        this.registry = registry;
-    }
-
-    protected void fireTaskOutputChangeEvent(JobExecutionContext jobExecutionContext, List<OutputDataObjectType> outputArray) {
-        TaskIdentifier taskIdentity = new TaskIdentifier(jobExecutionContext.getTaskData().getTaskID(),
-                jobExecutionContext.getWorkflowNodeDetails().getNodeInstanceId(),
-                jobExecutionContext.getExperimentID(),
-                jobExecutionContext.getGatewayID());
-        publisher.publish(new TaskOutputChangeEvent(outputArray, taskIdentity));
-    }
-}

http://git-wip-us.apache.org/repos/asf/airavata/blob/a3487e77/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/handler/AppDescriptorCheckHandler.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/handler/AppDescriptorCheckHandler.java b/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/handler/AppDescriptorCheckHandler.java
index 34ea139..7302fcf 100644
--- a/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/handler/AppDescriptorCheckHandler.java
+++ b/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/handler/AppDescriptorCheckHandler.java
@@ -29,7 +29,7 @@ import org.slf4j.LoggerFactory;
 
 import java.util.Properties;
 
-public class AppDescriptorCheckHandler implements GFacRecoverableHandler {
+public class AppDescriptorCheckHandler implements GFacHandler {
     private static final Logger logger = LoggerFactory.getLogger(AppDescriptorCheckHandler.class);
 
     public void invoke(JobExecutionContext jobExecutionContext) throws GFacHandlerException {

http://git-wip-us.apache.org/repos/asf/airavata/blob/a3487e77/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/handler/GFacHandler.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/handler/GFacHandler.java b/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/handler/GFacHandler.java
index f820e29..15b86dd 100644
--- a/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/handler/GFacHandler.java
+++ b/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/handler/GFacHandler.java
@@ -49,4 +49,12 @@ public interface GFacHandler {
      * @throws GFacHandlerException
      */
     public void invoke(JobExecutionContext jobExecutionContext) throws GFacHandlerException;
+
+
+    /**
+     * This method can be used to implement recovering part of the stateful handler
+     * If you do not want to recover an already ran handler you leave this recover method empty.
+     * @param jobExecutionContext
+     */
+    public void recover(JobExecutionContext jobExecutionContext)throws GFacHandlerException;
 }

http://git-wip-us.apache.org/repos/asf/airavata/blob/a3487e77/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/handler/GFacRecoverableHandler.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/handler/GFacRecoverableHandler.java b/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/handler/GFacRecoverableHandler.java
deleted file mode 100644
index ab778b8..0000000
--- a/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/handler/GFacRecoverableHandler.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
-*/
-package org.apache.airavata.gfac.core.handler;
-
-import org.apache.airavata.gfac.core.context.JobExecutionContext;
-
-/**
- * This handler type can be used to implement stateful Operation and
- * we recommend to use the ZK client to store and retrieve the states
- * of the handler implementation. Framework level we use
- * ZK to decide handler ran successfully or not so each handler
- * execution details can be found in following zk path
- * /gfac-experiment/<gfac-node-name>/experimentId+taskId/full-qualified-handlername/state
- * ex: /gfac-experiment/gfac-node0/echoExperiment_2c6c11b8-dea0-4ec8-9832-f3e69fe2e6bb+IDontNeedaNode_682faa66-6218-4897-9271-656bfb8b2bd1/org.apache.airavata.gfac.handlers.Test/state
- */
-public interface GFacRecoverableHandler extends GFacHandler {
-
-
-    /**
-     * This method can be used to implement recovering part of the stateful handler
-     * If you do not want to recover an already ran handler you can simply implement
-     * GfacAbstract Handler or GFacHandler or leave this recover method empty.
-     * @param jobExecutionContext
-     */
-    public void recover(JobExecutionContext jobExecutionContext)throws GFacHandlerException;
-
-}

http://git-wip-us.apache.org/repos/asf/airavata/blob/a3487e77/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/provider/AbstractRecoverableProvider.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/provider/AbstractRecoverableProvider.java b/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/provider/AbstractRecoverableProvider.java
deleted file mode 100644
index c6a105e..0000000
--- a/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/provider/AbstractRecoverableProvider.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
-*/
-package org.apache.airavata.gfac.core.provider;
-
-import org.apache.airavata.common.utils.MonitorPublisher;
-import org.apache.airavata.gfac.GFacException;
-import org.apache.airavata.gfac.core.context.JobExecutionContext;
-import org.apache.airavata.gfac.core.cpi.BetterGfacImpl;
-import org.apache.airavata.model.workspace.experiment.JobDetails;
-import org.apache.airavata.model.workspace.experiment.JobStatus;
-import org.apache.airavata.persistance.registry.jpa.impl.RegistryFactory;
-import org.apache.airavata.registry.cpi.Registry;
-import org.apache.airavata.registry.cpi.RegistryException;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public abstract class AbstractRecoverableProvider implements GFacRecoverableProvider {
-    private final Logger log = LoggerFactory.getLogger(this.getClass());
-
-    protected Registry registry = null;
-    protected JobDetails details;     //todo we need to remove this and add methods to fill Job details, this is not a property of a provider
-    protected JobStatus status;   //todo we need to remove this and add methods to fill Job details, this is not a property of a provider
-    protected JobExecutionContext jobExecutionContext;
-
-    protected MonitorPublisher monitorPublisher;
-
-    protected AbstractRecoverableProvider() {                                            //todo this has to be fixed
-        this.monitorPublisher = BetterGfacImpl.getMonitorPublisher();
-        if (this.monitorPublisher == null) {
-            this.monitorPublisher = BetterGfacImpl.getMonitorPublisher();
-        }
-    }
-
-    public void initialize(JobExecutionContext jobExecutionContext) throws GFacProviderException, GFacException {
-        log.debug("Initializing " + this.getClass().getName());
-        if (jobExecutionContext.getRegistry() == null) {
-            try {
-                registry = RegistryFactory.getDefaultRegistry();
-            } catch (RegistryException e) {
-                throw new GFacException("Unable to create registry instance", e);
-            }
-        } else {
-            registry = jobExecutionContext.getRegistry();
-        }
-        details = new JobDetails();
-        status = new JobStatus();
-        this.jobExecutionContext = jobExecutionContext;
-    }
-
-    public MonitorPublisher getMonitorPublisher() {
-        return monitorPublisher;
-    }
-
-    public void setMonitorPublisher(MonitorPublisher monitorPublisher) {
-        this.monitorPublisher = monitorPublisher;
-    }
-}

http://git-wip-us.apache.org/repos/asf/airavata/blob/a3487e77/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/provider/GFacProvider.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/provider/GFacProvider.java b/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/provider/GFacProvider.java
index 031cf77..6006309 100644
--- a/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/provider/GFacProvider.java
+++ b/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/provider/GFacProvider.java
@@ -59,4 +59,11 @@ public interface GFacProvider{
     public void cancelJob(JobExecutionContext jobExecutionContext) throws GFacProviderException, GFacException;
 
 
+    /**
+     * This method can be used to implement recovering part of the stateful handler
+     * If you do not want to recover an already ran handler you leave this recover method empty.
+     *
+     * @param jobExecutionContext
+     */
+    public void recover(JobExecutionContext jobExecutionContext)throws GFacProviderException,GFacException;
 }

http://git-wip-us.apache.org/repos/asf/airavata/blob/a3487e77/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/provider/GFacRecoverableProvider.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/provider/GFacRecoverableProvider.java b/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/provider/GFacRecoverableProvider.java
deleted file mode 100644
index 6cc9820..0000000
--- a/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/provider/GFacRecoverableProvider.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
-*/
-package org.apache.airavata.gfac.core.provider;
-
-import org.apache.airavata.gfac.GFacException;
-import org.apache.airavata.gfac.core.context.JobExecutionContext;
-
-/**
- * This provider type can be used to implement stateful Operation and
- * we recommend to use the ZK client to store and retrieve the states
- * of the handler implementation. Framework level we use
- * ZK to decide handler ran successfully or not so each handler
- * execution details can be found in following zk path
- * /gfac-experiment/<gfac-node-name>/experimentId+taskId/full-qualified-handlername/state
- * ex: /gfac-experiment/gfac-node0/echoExperiment_2c6c11b8-dea0-4ec8-9832-f3e69fe2e6bb+IDontNeedaNode_682faa66-6218-4897-9271-656bfb8b2bd1/org.apache.airavata.gfac.handlers.Test/state
- */
-public interface GFacRecoverableProvider extends GFacProvider {
-    /**
-     * This method can be used to implement recovering part of the stateful handler
-     * If you do not want to recover an already ran handler you can simply implement
-     * GfacAbstract Handler or GFacHandler or leave this recover method empty.
-     *
-     * @param jobExecutionContext
-     */
-    public void recover(JobExecutionContext jobExecutionContext)throws GFacProviderException,GFacException;
-}

http://git-wip-us.apache.org/repos/asf/airavata/blob/a3487e77/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/states/GfacPluginState.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/states/GfacPluginState.java b/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/states/GfacPluginState.java
index b934303..818a144 100644
--- a/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/states/GfacPluginState.java
+++ b/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/states/GfacPluginState.java
@@ -23,7 +23,8 @@ package org.apache.airavata.gfac.core.states;
 public enum GfacPluginState {
     INVOKING(0),
     INVOKED(1),
-    COMPLETED(2);
+    COMPLETED(2),
+    UNKNOWN(3);
 
     private final int value;
 
@@ -49,8 +50,10 @@ public enum GfacPluginState {
                 return INVOKING;
             case 1:
                 return INVOKED;
+            case 2:
+                return COMPLETED;
             default:
-                return null;
+                return UNKNOWN;
         }
     }
 }

http://git-wip-us.apache.org/repos/asf/airavata/blob/a3487e77/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/utils/GFacUtils.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/utils/GFacUtils.java b/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/utils/GFacUtils.java
index 2e2d501..434f6d4 100644
--- a/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/utils/GFacUtils.java
+++ b/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/utils/GFacUtils.java
@@ -900,7 +900,10 @@ public class GFacUtils {
 			InterruptedException {
 		String expState = AiravataZKUtils.getExpState(zk, jobExecutionContext
 				.getExperimentID());
-		return GfacExperimentState.findByValue(Integer.parseInt(expState));
+        if (expState == null || expState.isEmpty()) {
+            return GfacExperimentState.UNKNOWN;
+        }
+        return GfacExperimentState.findByValue(Integer.valueOf(expState));
 	}
 
 	public static int getZKExperimentStateValue(ZooKeeper zk,
@@ -1019,8 +1022,8 @@ public class GFacUtils {
 		return false;
 	}
 
-	public static String getPluginState(ZooKeeper zk,
-			JobExecutionContext jobExecutionContext, String className) {
+	public static GfacPluginState getPluginState(ZooKeeper zk,
+                                                 JobExecutionContext jobExecutionContext, String className) {
 		try {
 			String expState = AiravataZKUtils.getExpZnodeHandlerPath(
 					jobExecutionContext.getExperimentID(), className);
@@ -1028,11 +1031,12 @@ public class GFacUtils {
 			Stat exists = zk.exists(expState + File.separator
 					+ AiravataZKUtils.ZK_EXPERIMENT_STATE_NODE, false);
 			if (exists != null) {
-				return new String(zk.getData(expState + File.separator
-						+ AiravataZKUtils.ZK_EXPERIMENT_STATE_NODE, false,
-						exists));
-			}
-			return null; // if the node doesn't exist or any other error we
+                String stateVal = new String(zk.getData(expState + File.separator
+                                + AiravataZKUtils.ZK_EXPERIMENT_STATE_NODE, false,
+                        exists));
+                return GfacPluginState.findByValue(Integer.valueOf(stateVal));
+            }
+			return GfacPluginState.UNKNOWN; // if the node doesn't exist or any other error we
 							// return false
 		} catch (Exception e) {
 			log.error("Error occured while getting zk node status", e);

http://git-wip-us.apache.org/repos/asf/airavata/blob/a3487e77/modules/gfac/gfac-core/src/test/java/org/apache/airavata/job/TestGlobalHandler.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-core/src/test/java/org/apache/airavata/job/TestGlobalHandler.java b/modules/gfac/gfac-core/src/test/java/org/apache/airavata/job/TestGlobalHandler.java
index 05eb735..67ee9b8 100644
--- a/modules/gfac/gfac-core/src/test/java/org/apache/airavata/job/TestGlobalHandler.java
+++ b/modules/gfac/gfac-core/src/test/java/org/apache/airavata/job/TestGlobalHandler.java
@@ -20,6 +20,7 @@
 */
 package org.apache.airavata.job;
 
+import org.apache.airavata.gfac.core.context.JobExecutionContext;
 import org.apache.airavata.gfac.core.handler.AbstractHandler;
 import org.apache.airavata.gfac.core.handler.GFacHandlerException;
 
@@ -29,4 +30,9 @@ public class TestGlobalHandler extends AbstractHandler {
     public void initProperties(Properties properties) throws GFacHandlerException {
         //To change body of implemented methods use File | Settings | File Templates.
     }
+
+    @Override
+    public void recover(JobExecutionContext jobExecutionContext) throws GFacHandlerException {
+        // TODO: Auto generated method body.
+    }
 }

http://git-wip-us.apache.org/repos/asf/airavata/blob/a3487e77/modules/gfac/gfac-core/src/test/java/org/apache/airavata/job/TestInHandler.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-core/src/test/java/org/apache/airavata/job/TestInHandler.java b/modules/gfac/gfac-core/src/test/java/org/apache/airavata/job/TestInHandler.java
index e50bfd6..7307ba5 100644
--- a/modules/gfac/gfac-core/src/test/java/org/apache/airavata/job/TestInHandler.java
+++ b/modules/gfac/gfac-core/src/test/java/org/apache/airavata/job/TestInHandler.java
@@ -20,6 +20,7 @@
 */
 package org.apache.airavata.job;
 
+import org.apache.airavata.gfac.core.context.JobExecutionContext;
 import org.apache.airavata.gfac.core.handler.AbstractHandler;
 import org.apache.airavata.gfac.core.handler.GFacHandlerException;
 
@@ -29,4 +30,9 @@ public class TestInHandler extends AbstractHandler {
     public void initProperties(Properties properties) throws GFacHandlerException {
         //To change body of implemented methods use File | Settings | File Templates.
     }
+
+    @Override
+    public void recover(JobExecutionContext jobExecutionContext) throws GFacHandlerException {
+        // TODO: Auto generated method body.
+    }
 }

http://git-wip-us.apache.org/repos/asf/airavata/blob/a3487e77/modules/gfac/gfac-core/src/test/java/org/apache/airavata/job/TestOutHandler.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-core/src/test/java/org/apache/airavata/job/TestOutHandler.java b/modules/gfac/gfac-core/src/test/java/org/apache/airavata/job/TestOutHandler.java
index 42dd00c..b19d646 100644
--- a/modules/gfac/gfac-core/src/test/java/org/apache/airavata/job/TestOutHandler.java
+++ b/modules/gfac/gfac-core/src/test/java/org/apache/airavata/job/TestOutHandler.java
@@ -20,6 +20,7 @@
 */
 package org.apache.airavata.job;
 
+import org.apache.airavata.gfac.core.context.JobExecutionContext;
 import org.apache.airavata.gfac.core.handler.AbstractHandler;
 import org.apache.airavata.gfac.core.handler.GFacHandlerException;
 
@@ -29,4 +30,9 @@ public class TestOutHandler extends AbstractHandler {
     public void initProperties(Properties properties) throws GFacHandlerException {
         //To change body of implemented methods use File | Settings | File Templates.
     }
+
+    @Override
+    public void recover(JobExecutionContext jobExecutionContext) throws GFacHandlerException {
+        // TODO: Auto generated method body.
+    }
 }

http://git-wip-us.apache.org/repos/asf/airavata/blob/a3487e77/modules/gfac/gfac-core/src/test/java/org/apache/airavata/job/TestProvider.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-core/src/test/java/org/apache/airavata/job/TestProvider.java b/modules/gfac/gfac-core/src/test/java/org/apache/airavata/job/TestProvider.java
index 151ee19..3829dae 100644
--- a/modules/gfac/gfac-core/src/test/java/org/apache/airavata/job/TestProvider.java
+++ b/modules/gfac/gfac-core/src/test/java/org/apache/airavata/job/TestProvider.java
@@ -33,6 +33,11 @@ public class TestProvider extends AbstractProvider {
         //To change body of implemented methods use File | Settings | File Templates.
     }
 
+    @Override
+    public void recover(JobExecutionContext jobExecutionContext) throws GFacProviderException, GFacException {
+        // TODO: Auto generated method body.
+    }
+
     public void initProperties(Map<String, String> properties) throws GFacProviderException, GFacException {
         //To change body of implemented methods use File | Settings | File Templates.
     }

http://git-wip-us.apache.org/repos/asf/airavata/blob/a3487e77/modules/gfac/gfac-core/src/test/java/org/apache/airavata/job/TestThreadedHandler.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-core/src/test/java/org/apache/airavata/job/TestThreadedHandler.java b/modules/gfac/gfac-core/src/test/java/org/apache/airavata/job/TestThreadedHandler.java
index 7ee54bd..f2788c5 100644
--- a/modules/gfac/gfac-core/src/test/java/org/apache/airavata/job/TestThreadedHandler.java
+++ b/modules/gfac/gfac-core/src/test/java/org/apache/airavata/job/TestThreadedHandler.java
@@ -21,6 +21,7 @@
 package org.apache.airavata.job;
 
 import junit.framework.Assert;
+import org.apache.airavata.gfac.core.context.JobExecutionContext;
 import org.apache.airavata.gfac.core.handler.GFacHandlerException;
 import org.apache.airavata.gfac.core.handler.ThreadedHandler;
 
@@ -32,6 +33,11 @@ public class TestThreadedHandler extends ThreadedHandler {
     public void initProperties(Properties properties) throws GFacHandlerException {
     }
 
+    @Override
+    public void recover(JobExecutionContext jobExecutionContext) throws GFacHandlerException {
+        // TODO: Auto generated method body.
+    }
+
     public void run() {
         System.out.println("Invoking TestThreadedHandler");
         Assert.assertTrue(true);

http://git-wip-us.apache.org/repos/asf/airavata/blob/a3487e77/modules/gfac/gfac-gsissh/src/main/java/org/apache/airavata/gfac/gsissh/handler/GSISSHDirectorySetupHandler.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-gsissh/src/main/java/org/apache/airavata/gfac/gsissh/handler/GSISSHDirectorySetupHandler.java b/modules/gfac/gfac-gsissh/src/main/java/org/apache/airavata/gfac/gsissh/handler/GSISSHDirectorySetupHandler.java
index 26547b5..b4790c7 100644
--- a/modules/gfac/gfac-gsissh/src/main/java/org/apache/airavata/gfac/gsissh/handler/GSISSHDirectorySetupHandler.java
+++ b/modules/gfac/gfac-gsissh/src/main/java/org/apache/airavata/gfac/gsissh/handler/GSISSHDirectorySetupHandler.java
@@ -22,7 +22,7 @@ package org.apache.airavata.gfac.gsissh.handler;
 
 import org.apache.airavata.gfac.GFacException;
 import org.apache.airavata.gfac.core.context.JobExecutionContext;
-import org.apache.airavata.gfac.core.handler.AbstractRecoverableHandler;
+import org.apache.airavata.gfac.core.handler.AbstractHandler;
 import org.apache.airavata.gfac.core.handler.GFacHandlerException;
 import org.apache.airavata.gfac.core.utils.GFacUtils;
 import org.apache.airavata.gfac.gsissh.security.GSISecurityContext;
@@ -37,7 +37,7 @@ import java.io.PrintWriter;
 import java.io.StringWriter;
 import java.util.Properties;
 
-public class GSISSHDirectorySetupHandler extends AbstractRecoverableHandler {
+public class GSISSHDirectorySetupHandler extends AbstractHandler {
       private static final Logger log = LoggerFactory.getLogger(GSISSHDirectorySetupHandler.class);
 
 	public void invoke(JobExecutionContext jobExecutionContext) throws GFacHandlerException {

http://git-wip-us.apache.org/repos/asf/airavata/blob/a3487e77/modules/gfac/gfac-gsissh/src/main/java/org/apache/airavata/gfac/gsissh/handler/GSISSHInputHandler.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-gsissh/src/main/java/org/apache/airavata/gfac/gsissh/handler/GSISSHInputHandler.java b/modules/gfac/gfac-gsissh/src/main/java/org/apache/airavata/gfac/gsissh/handler/GSISSHInputHandler.java
index 70706ae..5fba1c1 100644
--- a/modules/gfac/gfac-gsissh/src/main/java/org/apache/airavata/gfac/gsissh/handler/GSISSHInputHandler.java
+++ b/modules/gfac/gfac-gsissh/src/main/java/org/apache/airavata/gfac/gsissh/handler/GSISSHInputHandler.java
@@ -24,7 +24,7 @@ import org.apache.airavata.common.exception.ApplicationSettingsException;
 import org.apache.airavata.gfac.GFacException;
 import org.apache.airavata.gfac.core.context.JobExecutionContext;
 import org.apache.airavata.gfac.core.context.MessageContext;
-import org.apache.airavata.gfac.core.handler.AbstractRecoverableHandler;
+import org.apache.airavata.gfac.core.handler.AbstractHandler;
 import org.apache.airavata.gfac.core.handler.GFacHandlerException;
 import org.apache.airavata.gfac.core.utils.GFacUtils;
 import org.apache.airavata.gfac.gsissh.security.GSISecurityContext;
@@ -53,7 +53,7 @@ import java.util.Set;
  * Recoverability for this handler assumes the same input values will come in the second
  * run, and assume nobody is changing registry during the original submission and re-submission
  */
-public class GSISSHInputHandler extends AbstractRecoverableHandler {
+public class GSISSHInputHandler extends AbstractHandler {
     private static final Logger log = LoggerFactory.getLogger(GSISSHInputHandler.class);
 
 

http://git-wip-us.apache.org/repos/asf/airavata/blob/a3487e77/modules/gfac/gfac-gsissh/src/main/java/org/apache/airavata/gfac/gsissh/handler/GSISSHOutputHandler.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-gsissh/src/main/java/org/apache/airavata/gfac/gsissh/handler/GSISSHOutputHandler.java b/modules/gfac/gfac-gsissh/src/main/java/org/apache/airavata/gfac/gsissh/handler/GSISSHOutputHandler.java
index 1064e1c..cfd5a40 100644
--- a/modules/gfac/gfac-gsissh/src/main/java/org/apache/airavata/gfac/gsissh/handler/GSISSHOutputHandler.java
+++ b/modules/gfac/gfac-gsissh/src/main/java/org/apache/airavata/gfac/gsissh/handler/GSISSHOutputHandler.java
@@ -24,7 +24,7 @@ package org.apache.airavata.gfac.gsissh.handler;
 //import org.apache.airavata.commons.gfac.type.MappingFactory;
 import org.apache.airavata.gfac.GFacException;
 import org.apache.airavata.gfac.core.context.JobExecutionContext;
-import org.apache.airavata.gfac.core.handler.AbstractRecoverableHandler;
+import org.apache.airavata.gfac.core.handler.AbstractHandler;
 import org.apache.airavata.gfac.core.handler.GFacHandlerException;
 import org.apache.airavata.gfac.core.provider.GFacProviderException;
 import org.apache.airavata.gfac.core.utils.GFacUtils;
@@ -52,7 +52,7 @@ import java.util.Map;
 import java.util.Properties;
 import java.util.Set;
 
-public class GSISSHOutputHandler extends AbstractRecoverableHandler {
+public class GSISSHOutputHandler extends AbstractHandler {
     private static final Logger log = LoggerFactory.getLogger(GSISSHOutputHandler.class);
 
     public void invoke(JobExecutionContext jobExecutionContext) throws GFacHandlerException {

http://git-wip-us.apache.org/repos/asf/airavata/blob/a3487e77/modules/gfac/gfac-gsissh/src/main/java/org/apache/airavata/gfac/gsissh/handler/NewGSISSHOutputHandler.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-gsissh/src/main/java/org/apache/airavata/gfac/gsissh/handler/NewGSISSHOutputHandler.java b/modules/gfac/gfac-gsissh/src/main/java/org/apache/airavata/gfac/gsissh/handler/NewGSISSHOutputHandler.java
index f4aaf72..ed94312 100644
--- a/modules/gfac/gfac-gsissh/src/main/java/org/apache/airavata/gfac/gsissh/handler/NewGSISSHOutputHandler.java
+++ b/modules/gfac/gfac-gsissh/src/main/java/org/apache/airavata/gfac/gsissh/handler/NewGSISSHOutputHandler.java
@@ -69,7 +69,12 @@ public class NewGSISSHOutputHandler extends AbstractHandler{
 			}
 	    }
 
-	@Override
+    @Override
+    public void recover(JobExecutionContext jobExecutionContext) throws GFacHandlerException {
+        // TODO: Auto generated method body.
+    }
+
+    @Override
 	public void initProperties(Properties properties) throws GFacHandlerException {
 		// TODO Auto-generated method stub
 		

http://git-wip-us.apache.org/repos/asf/airavata/blob/a3487e77/modules/gfac/gfac-gsissh/src/main/java/org/apache/airavata/gfac/gsissh/provider/impl/GSISSHProvider.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-gsissh/src/main/java/org/apache/airavata/gfac/gsissh/provider/impl/GSISSHProvider.java b/modules/gfac/gfac-gsissh/src/main/java/org/apache/airavata/gfac/gsissh/provider/impl/GSISSHProvider.java
index 1b0d283..c35445b 100644
--- a/modules/gfac/gfac-gsissh/src/main/java/org/apache/airavata/gfac/gsissh/provider/impl/GSISSHProvider.java
+++ b/modules/gfac/gfac-gsissh/src/main/java/org/apache/airavata/gfac/gsissh/provider/impl/GSISSHProvider.java
@@ -24,7 +24,6 @@ import org.airavata.appcatalog.cpi.AppCatalog;
 import org.airavata.appcatalog.cpi.AppCatalogException;
 import org.apache.airavata.common.exception.AiravataException;
 import org.apache.airavata.common.exception.ApplicationSettingsException;
-import org.apache.airavata.common.utils.ServerSettings;
 import org.apache.airavata.gfac.ExecutionMode;
 import org.apache.airavata.gfac.GFacException;
 import org.apache.airavata.gfac.core.context.JobExecutionContext;
@@ -32,7 +31,7 @@ import org.apache.airavata.gfac.core.cpi.BetterGfacImpl;
 import org.apache.airavata.gfac.core.handler.GFacHandlerException;
 import org.apache.airavata.gfac.core.handler.ThreadedHandler;
 import org.apache.airavata.gfac.core.notification.events.StartExecutionEvent;
-import org.apache.airavata.gfac.core.provider.AbstractRecoverableProvider;
+import org.apache.airavata.gfac.core.provider.AbstractProvider;
 import org.apache.airavata.gfac.core.provider.GFacProviderException;
 import org.apache.airavata.gfac.core.utils.GFacUtils;
 import org.apache.airavata.gfac.gsissh.security.GSISecurityContext;
@@ -62,7 +61,7 @@ import java.util.Map;
 
 //import org.apache.airavata.schemas.gfac.GsisshHostType;
 
-public class GSISSHProvider extends AbstractRecoverableProvider {
+public class GSISSHProvider extends AbstractProvider {
     private static final Logger log = LoggerFactory.getLogger(GSISSHProvider.class);
 
     public void initProperties(Map<String, String> properties) throws GFacProviderException, GFacException {

http://git-wip-us.apache.org/repos/asf/airavata/blob/a3487e77/modules/gfac/gfac-local/src/main/java/org/apache/airavata/gfac/local/handler/LocalDirectorySetupHandler.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-local/src/main/java/org/apache/airavata/gfac/local/handler/LocalDirectorySetupHandler.java b/modules/gfac/gfac-local/src/main/java/org/apache/airavata/gfac/local/handler/LocalDirectorySetupHandler.java
index 394cfaa..2f9e3b0 100644
--- a/modules/gfac/gfac-local/src/main/java/org/apache/airavata/gfac/local/handler/LocalDirectorySetupHandler.java
+++ b/modules/gfac/gfac-local/src/main/java/org/apache/airavata/gfac/local/handler/LocalDirectorySetupHandler.java
@@ -41,6 +41,12 @@ public class LocalDirectorySetupHandler implements GFacHandler {
         makeFileSystemDir(jobExecutionContext.getInputDir());
         makeFileSystemDir(jobExecutionContext.getOutputDir());
     }
+
+    @Override
+    public void recover(JobExecutionContext jobExecutionContext) throws GFacHandlerException {
+        // TODO: Auto generated method body.
+    }
+
     private void makeFileSystemDir(String dir) throws GFacHandlerException {
            File f = new File(dir);
            if (f.isDirectory() && f.exists()) {

http://git-wip-us.apache.org/repos/asf/airavata/blob/a3487e77/modules/gfac/gfac-local/src/main/java/org/apache/airavata/gfac/local/handler/LocalInputHandler.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-local/src/main/java/org/apache/airavata/gfac/local/handler/LocalInputHandler.java b/modules/gfac/gfac-local/src/main/java/org/apache/airavata/gfac/local/handler/LocalInputHandler.java
index d085fbf..884ccd5 100644
--- a/modules/gfac/gfac-local/src/main/java/org/apache/airavata/gfac/local/handler/LocalInputHandler.java
+++ b/modules/gfac/gfac-local/src/main/java/org/apache/airavata/gfac/local/handler/LocalInputHandler.java
@@ -20,9 +20,8 @@
 */
 package org.apache.airavata.gfac.local.handler;
 
-import org.apache.airavata.gfac.GFacException;
 import org.apache.airavata.gfac.core.context.JobExecutionContext;
-import org.apache.airavata.gfac.core.handler.AbstractRecoverableHandler;
+import org.apache.airavata.gfac.core.handler.AbstractHandler;
 import org.apache.airavata.gfac.core.handler.GFacHandlerException;
 import org.apache.airavata.model.appcatalog.appinterface.DataType;
 import org.apache.airavata.model.appcatalog.appinterface.InputDataObjectType;
@@ -36,7 +35,7 @@ import java.util.Map;
 import java.util.Properties;
 
 
-public class LocalInputHandler extends AbstractRecoverableHandler {
+public class LocalInputHandler extends AbstractHandler {
     private static final Logger logger = LoggerFactory.getLogger(LocalInputHandler.class);
     @Override
     public void invoke(JobExecutionContext jobExecutionContext) throws GFacHandlerException {

http://git-wip-us.apache.org/repos/asf/airavata/blob/a3487e77/modules/gfac/gfac-local/src/main/java/org/apache/airavata/gfac/local/provider/impl/LocalProvider.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-local/src/main/java/org/apache/airavata/gfac/local/provider/impl/LocalProvider.java b/modules/gfac/gfac-local/src/main/java/org/apache/airavata/gfac/local/provider/impl/LocalProvider.java
index d62d3d7..df932b4 100644
--- a/modules/gfac/gfac-local/src/main/java/org/apache/airavata/gfac/local/provider/impl/LocalProvider.java
+++ b/modules/gfac/gfac-local/src/main/java/org/apache/airavata/gfac/local/provider/impl/LocalProvider.java
@@ -252,6 +252,11 @@ public class LocalProvider extends AbstractProvider {
         throw new NotImplementedException();
     }
 
+    @Override
+    public void recover(JobExecutionContext jobExecutionContext) throws GFacProviderException, GFacException {
+        // TODO: Auto generated method body.
+    }
+
 
     private void buildCommand() {
         cmdList.add(jobExecutionContext.getExecutablePath());

http://git-wip-us.apache.org/repos/asf/airavata/blob/a3487e77/modules/gfac/gfac-monitor/gfac-hpc-monitor/src/main/java/org/apache/airavata/gfac/monitor/handlers/GridPullMonitorHandler.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-monitor/gfac-hpc-monitor/src/main/java/org/apache/airavata/gfac/monitor/handlers/GridPullMonitorHandler.java b/modules/gfac/gfac-monitor/gfac-hpc-monitor/src/main/java/org/apache/airavata/gfac/monitor/handlers/GridPullMonitorHandler.java
index 24b300e..6fff840 100644
--- a/modules/gfac/gfac-monitor/gfac-hpc-monitor/src/main/java/org/apache/airavata/gfac/monitor/handlers/GridPullMonitorHandler.java
+++ b/modules/gfac/gfac-monitor/gfac-hpc-monitor/src/main/java/org/apache/airavata/gfac/monitor/handlers/GridPullMonitorHandler.java
@@ -107,6 +107,12 @@ public class GridPullMonitorHandler extends ThreadedHandler implements Watcher{
                     monitorID.getJobID(),  monitorID.getExperimentID());
         }
     }
+
+    @Override
+    public void recover(JobExecutionContext jobExecutionContext) throws GFacHandlerException {
+        // TODO: Auto generated method body.
+    }
+
     public AuthenticationInfo getAuthenticationInfo() {
         return authenticationInfo;
     }

http://git-wip-us.apache.org/repos/asf/airavata/blob/a3487e77/modules/gfac/gfac-monitor/gfac-hpc-monitor/src/main/java/org/apache/airavata/gfac/monitor/handlers/GridPushMonitorHandler.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-monitor/gfac-hpc-monitor/src/main/java/org/apache/airavata/gfac/monitor/handlers/GridPushMonitorHandler.java b/modules/gfac/gfac-monitor/gfac-hpc-monitor/src/main/java/org/apache/airavata/gfac/monitor/handlers/GridPushMonitorHandler.java
index 0eb4526..bb36b28 100644
--- a/modules/gfac/gfac-monitor/gfac-hpc-monitor/src/main/java/org/apache/airavata/gfac/monitor/handlers/GridPushMonitorHandler.java
+++ b/modules/gfac/gfac-monitor/gfac-hpc-monitor/src/main/java/org/apache/airavata/gfac/monitor/handlers/GridPushMonitorHandler.java
@@ -85,6 +85,11 @@ public class GridPushMonitorHandler extends ThreadedHandler {
         amqpMonitor.getRunningQueue().add(monitorID);
     }
 
+    @Override
+    public void recover(JobExecutionContext jobExecutionContext) throws GFacHandlerException {
+        // TODO: Auto generated method body.
+    }
+
     public AMQPMonitor getAmqpMonitor() {
         return amqpMonitor;
     }

http://git-wip-us.apache.org/repos/asf/airavata/blob/a3487e77/modules/gfac/gfac-ssh/src/main/java/org/apache/airavata/gfac/ssh/handler/AdvancedSCPInputHandler.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-ssh/src/main/java/org/apache/airavata/gfac/ssh/handler/AdvancedSCPInputHandler.java b/modules/gfac/gfac-ssh/src/main/java/org/apache/airavata/gfac/ssh/handler/AdvancedSCPInputHandler.java
index 2fae3d5..a1c5278 100644
--- a/modules/gfac/gfac-ssh/src/main/java/org/apache/airavata/gfac/ssh/handler/AdvancedSCPInputHandler.java
+++ b/modules/gfac/gfac-ssh/src/main/java/org/apache/airavata/gfac/ssh/handler/AdvancedSCPInputHandler.java
@@ -23,7 +23,7 @@ package org.apache.airavata.gfac.ssh.handler;
 import org.apache.airavata.gfac.GFacException;
 import org.apache.airavata.gfac.core.context.JobExecutionContext;
 import org.apache.airavata.gfac.core.context.MessageContext;
-import org.apache.airavata.gfac.core.handler.AbstractRecoverableHandler;
+import org.apache.airavata.gfac.core.handler.AbstractHandler;
 import org.apache.airavata.gfac.core.handler.GFacHandlerException;
 import org.apache.airavata.gfac.core.utils.GFacUtils;
 import org.apache.airavata.gfac.ssh.security.SSHSecurityContext;
@@ -57,7 +57,7 @@ import java.util.*;
  * <property name="hostName" value="gw98.iu.xsede.org"/>
  * <property name="inputPath" value="/home/airavata/outputData"/>
  */
-public class AdvancedSCPInputHandler extends AbstractRecoverableHandler {
+public class AdvancedSCPInputHandler extends AbstractHandler {
     private static final Logger log = LoggerFactory.getLogger(AdvancedSCPInputHandler.class);
     public static final String ADVANCED_SSH_AUTH = "advanced.ssh.auth";
     public static final int DEFAULT_SSH_PORT = 22;

http://git-wip-us.apache.org/repos/asf/airavata/blob/a3487e77/modules/gfac/gfac-ssh/src/main/java/org/apache/airavata/gfac/ssh/handler/AdvancedSCPOutputHandler.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-ssh/src/main/java/org/apache/airavata/gfac/ssh/handler/AdvancedSCPOutputHandler.java b/modules/gfac/gfac-ssh/src/main/java/org/apache/airavata/gfac/ssh/handler/AdvancedSCPOutputHandler.java
index fac03e8..efed1bc 100644
--- a/modules/gfac/gfac-ssh/src/main/java/org/apache/airavata/gfac/ssh/handler/AdvancedSCPOutputHandler.java
+++ b/modules/gfac/gfac-ssh/src/main/java/org/apache/airavata/gfac/ssh/handler/AdvancedSCPOutputHandler.java
@@ -212,5 +212,10 @@ public class AdvancedSCPOutputHandler extends AbstractHandler {
         }
     }
 
+    @Override
+    public void recover(JobExecutionContext jobExecutionContext) throws GFacHandlerException {
+        // TODO: Auto generated method body.
+    }
+
 
 }

http://git-wip-us.apache.org/repos/asf/airavata/blob/a3487e77/modules/gfac/gfac-ssh/src/main/java/org/apache/airavata/gfac/ssh/handler/NewSSHOutputHandler.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-ssh/src/main/java/org/apache/airavata/gfac/ssh/handler/NewSSHOutputHandler.java b/modules/gfac/gfac-ssh/src/main/java/org/apache/airavata/gfac/ssh/handler/NewSSHOutputHandler.java
index f7efb34..93d0ed0 100644
--- a/modules/gfac/gfac-ssh/src/main/java/org/apache/airavata/gfac/ssh/handler/NewSSHOutputHandler.java
+++ b/modules/gfac/gfac-ssh/src/main/java/org/apache/airavata/gfac/ssh/handler/NewSSHOutputHandler.java
@@ -64,7 +64,12 @@ public class NewSSHOutputHandler extends AbstractHandler{
 	       
 	    }
 
-	@Override
+    @Override
+    public void recover(JobExecutionContext jobExecutionContext) throws GFacHandlerException {
+        // TODO: Auto generated method body.
+    }
+
+    @Override
 	public void initProperties(Properties properties) throws GFacHandlerException {
 		// TODO Auto-generated method stub
 		

http://git-wip-us.apache.org/repos/asf/airavata/blob/a3487e77/modules/gfac/gfac-ssh/src/main/java/org/apache/airavata/gfac/ssh/handler/SSHDirectorySetupHandler.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-ssh/src/main/java/org/apache/airavata/gfac/ssh/handler/SSHDirectorySetupHandler.java b/modules/gfac/gfac-ssh/src/main/java/org/apache/airavata/gfac/ssh/handler/SSHDirectorySetupHandler.java
index 5c0d1f8..a985bd3 100644
--- a/modules/gfac/gfac-ssh/src/main/java/org/apache/airavata/gfac/ssh/handler/SSHDirectorySetupHandler.java
+++ b/modules/gfac/gfac-ssh/src/main/java/org/apache/airavata/gfac/ssh/handler/SSHDirectorySetupHandler.java
@@ -63,7 +63,13 @@ public class SSHDirectorySetupHandler extends AbstractHandler {
         makeDirectory(jobExecutionContext);
 
 	}
-	private void makeDirectory(JobExecutionContext jobExecutionContext) throws GFacHandlerException {
+
+    @Override
+    public void recover(JobExecutionContext jobExecutionContext) throws GFacHandlerException {
+        // TODO: Auto generated method body.
+    }
+
+    private void makeDirectory(JobExecutionContext jobExecutionContext) throws GFacHandlerException {
 		Cluster cluster = null;
 		try{
             String hostAddress = jobExecutionContext.getHostName();

http://git-wip-us.apache.org/repos/asf/airavata/blob/a3487e77/modules/gfac/gfac-ssh/src/main/java/org/apache/airavata/gfac/ssh/handler/SSHInputHandler.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-ssh/src/main/java/org/apache/airavata/gfac/ssh/handler/SSHInputHandler.java b/modules/gfac/gfac-ssh/src/main/java/org/apache/airavata/gfac/ssh/handler/SSHInputHandler.java
index 27471d4..160c77d 100644
--- a/modules/gfac/gfac-ssh/src/main/java/org/apache/airavata/gfac/ssh/handler/SSHInputHandler.java
+++ b/modules/gfac/gfac-ssh/src/main/java/org/apache/airavata/gfac/ssh/handler/SSHInputHandler.java
@@ -153,6 +153,11 @@ public class SSHInputHandler extends AbstractHandler {
         jobExecutionContext.setInMessageContext(inputNew);
     }
 
+    @Override
+    public void recover(JobExecutionContext jobExecutionContext) throws GFacHandlerException {
+        // TODO: Auto generated method body.
+    }
+
     private static String stageInputFiles(Cluster cluster, JobExecutionContext jobExecutionContext, String paramValue) throws IOException, GFacException {
         int i = paramValue.lastIndexOf(File.separator);
         String substring = paramValue.substring(i + 1);

http://git-wip-us.apache.org/repos/asf/airavata/blob/a3487e77/modules/gfac/gfac-ssh/src/main/java/org/apache/airavata/gfac/ssh/handler/SSHOutputHandler.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-ssh/src/main/java/org/apache/airavata/gfac/ssh/handler/SSHOutputHandler.java b/modules/gfac/gfac-ssh/src/main/java/org/apache/airavata/gfac/ssh/handler/SSHOutputHandler.java
index 9b7cd2e..f9eb1ef 100644
--- a/modules/gfac/gfac-ssh/src/main/java/org/apache/airavata/gfac/ssh/handler/SSHOutputHandler.java
+++ b/modules/gfac/gfac-ssh/src/main/java/org/apache/airavata/gfac/ssh/handler/SSHOutputHandler.java
@@ -243,6 +243,11 @@ public class SSHOutputHandler extends AbstractHandler {
 
     }
 
+    @Override
+    public void recover(JobExecutionContext jobExecutionContext) throws GFacHandlerException {
+        // TODO: Auto generated method body.
+    }
+
     public void initProperties(Properties properties) throws GFacHandlerException {
 
     }

http://git-wip-us.apache.org/repos/asf/airavata/blob/a3487e77/modules/gfac/gfac-ssh/src/main/java/org/apache/airavata/gfac/ssh/provider/impl/SSHProvider.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-ssh/src/main/java/org/apache/airavata/gfac/ssh/provider/impl/SSHProvider.java b/modules/gfac/gfac-ssh/src/main/java/org/apache/airavata/gfac/ssh/provider/impl/SSHProvider.java
index 7023e3c..0f88327 100644
--- a/modules/gfac/gfac-ssh/src/main/java/org/apache/airavata/gfac/ssh/provider/impl/SSHProvider.java
+++ b/modules/gfac/gfac-ssh/src/main/java/org/apache/airavata/gfac/ssh/provider/impl/SSHProvider.java
@@ -21,7 +21,6 @@
 
 package org.apache.airavata.gfac.ssh.provider.impl;
 
-import org.airavata.appcatalog.cpi.AppCatalog;
 import org.airavata.appcatalog.cpi.AppCatalogException;
 import org.apache.airavata.common.exception.AiravataException;
 import org.apache.airavata.common.exception.ApplicationSettingsException;
@@ -34,7 +33,7 @@ import org.apache.airavata.gfac.core.cpi.BetterGfacImpl;
 import org.apache.airavata.gfac.core.handler.GFacHandlerException;
 import org.apache.airavata.gfac.core.handler.ThreadedHandler;
 import org.apache.airavata.gfac.core.notification.events.StartExecutionEvent;
-import org.apache.airavata.gfac.core.provider.AbstractRecoverableProvider;
+import org.apache.airavata.gfac.core.provider.AbstractProvider;
 import org.apache.airavata.gfac.core.provider.GFacProviderException;
 import org.apache.airavata.gfac.core.utils.GFacUtils;
 import org.apache.airavata.gfac.monitor.email.EmailBasedMonitor;
@@ -71,7 +70,7 @@ import java.util.*;
 /**
  * Execute application using remote SSH
  */
-public class SSHProvider extends AbstractRecoverableProvider {
+public class SSHProvider extends AbstractProvider {
     private static final Logger log = LoggerFactory.getLogger(SSHProvider.class);
     private Cluster cluster;
     private String jobID = null;