summaryrefslogtreecommitdiff
path: root/src/main/java/com/c2kernel/process/UserCodeProcess.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/c2kernel/process/UserCodeProcess.java')
-rw-r--r--src/main/java/com/c2kernel/process/UserCodeProcess.java18
1 files changed, 17 insertions, 1 deletions
diff --git a/src/main/java/com/c2kernel/process/UserCodeProcess.java b/src/main/java/com/c2kernel/process/UserCodeProcess.java
index 7779802..2f508bc 100644
--- a/src/main/java/com/c2kernel/process/UserCodeProcess.java
+++ b/src/main/java/com/c2kernel/process/UserCodeProcess.java
@@ -14,6 +14,8 @@ import com.c2kernel.entity.proxy.EntityProxyObserver;
import com.c2kernel.entity.proxy.MemberSubscription;
import com.c2kernel.lifecycle.instance.stateMachine.Transitions;
import com.c2kernel.persistency.ClusterStorage;
+import com.c2kernel.scripting.ErrorInfo;
+import com.c2kernel.scripting.ScriptErrorException;
import com.c2kernel.utils.Logger;
/**************************************************************************
@@ -28,6 +30,7 @@ public class UserCodeProcess extends StandardClient implements EntityProxyObserv
protected AgentProxy agent;
static boolean active = true;
ArrayList<String> ignoredPaths = new ArrayList<String>();
+ HashMap<String, ErrorInfo> errors = new HashMap<String, ErrorInfo>();
HashMap<String, C2KLocalObject> jobs;
public UserCodeProcess(String agentName, String agentPass) {
@@ -96,18 +99,31 @@ public class UserCodeProcess extends StandardClient implements EntityProxyObserv
ignoredPaths.remove(jobKey);
}
else if (thisJob.getPossibleTransition()==Transitions.SUSPEND) {
- if (ignoredPaths.contains(jobKey))
+ if (ignoredPaths.contains(jobKey)) {
+ if (errors.containsKey(jobKey)) {
+ thisJob.setOutcome(Gateway.getMarshaller().marshall(errors.get(jobKey)));
+ errors.remove(jobKey);
+ }
agent.execute(thisJob);
+ }
}
else if (thisJob.getPossibleTransition()==Transitions.RESUME) {
if (!ignoredPaths.contains(jobKey))
agent.execute(thisJob);
}
+ } catch (ScriptErrorException ex) {
+ errors.put(jobKey, ex.getErrors());
+ ignoredPaths.add(jobKey);
} catch (InvalidTransitionException ex) {
// must have already been done by someone else - ignore
} catch (Throwable ex) {
Logger.error("Error executing "+Transitions.getTransitionName(thisJob.getPossibleTransition())+" job:");
Logger.error(ex);
+ ErrorInfo ei = new ErrorInfo();
+ ei.setFatal();
+ ei.addError(ex.getClass().getSimpleName());
+ ei.addError(ex.getMessage());
+ errors.put(jobKey, ei);
ignoredPaths.add(jobKey);
}
}