From c543e99e6b02a25c6dc745081f3915897420b225 Mon Sep 17 00:00:00 2001 From: Andrew Branson Date: Fri, 20 Sep 2013 13:39:01 +0200 Subject: Keep a History object in the Workflow to avoid recreating it on repeated executions. --- .../java/com/c2kernel/lifecycle/instance/Activity.java | 13 +++++++------ .../java/com/c2kernel/lifecycle/instance/Workflow.java | 11 +++++++++++ .../com/c2kernel/lifecycle/instance/predefined/Import.java | 14 +++++++------- 3 files changed, 25 insertions(+), 13 deletions(-) (limited to 'src') diff --git a/src/main/java/com/c2kernel/lifecycle/instance/Activity.java b/src/main/java/com/c2kernel/lifecycle/instance/Activity.java index 2384dc3..a8a2016 100644 --- a/src/main/java/com/c2kernel/lifecycle/instance/Activity.java +++ b/src/main/java/com/c2kernel/lifecycle/instance/Activity.java @@ -21,7 +21,6 @@ import com.c2kernel.lookup.EntityPath; import com.c2kernel.lookup.InvalidEntityPathException; import com.c2kernel.lookup.LDAPRoleManager; import com.c2kernel.lookup.RolePath; -import com.c2kernel.persistency.ClusterStorage; import com.c2kernel.persistency.TransactionManager; import com.c2kernel.persistency.outcome.Outcome; import com.c2kernel.persistency.outcome.Viewpoint; @@ -523,7 +522,7 @@ public class Activity extends WfVertex String viewName = hasOutcome?(String)getProperties().get("Viewpoint"):null; try { - hist = (History) Gateway.getStorage().get(entityPath.getSysKey(), ClusterStorage.HISTORY, this); + hist = getWf().getHistory(); if (hasOutcome) { String schemaName = isError?"Errors":(String)getProperties().get("SchemaType"); String schemaVersion = isError?"0":(String)getProperties().get("SchemaVersion"); @@ -577,17 +576,18 @@ public class Activity extends WfVertex Logger.msg(5, "Activity::storeOutcome() - type:" + schemaType + " version:" + schemaVersion); try { + Object locker = getWf(); Outcome newOutcome = new Outcome(eventID, requestData, schemaType, schemaVersion); - Gateway.getStorage().put(entityPath.getSysKey(), newOutcome, this); + Gateway.getStorage().put(entityPath.getSysKey(), newOutcome, locker); // update specific view if defined String specificView = (String) getProperties().get("Viewpoint"); if (specificView != null && !specificView.equals("")) { Viewpoint currentView = new Viewpoint(entityPath.getSysKey(), schemaType, specificView, schemaVersion, eventID); - Gateway.getStorage().put(entityPath.getSysKey(), currentView, this); + Gateway.getStorage().put(entityPath.getSysKey(), currentView, locker); } // update last view Viewpoint currentView = new Viewpoint(entityPath.getSysKey(), schemaType, "last", schemaVersion, eventID); - Gateway.getStorage().put(entityPath.getSysKey(), currentView, this); + Gateway.getStorage().put(entityPath.getSysKey(), currentView, locker); return schemaType + "/" + schemaVersion + "/" + eventID; } catch (Exception ex) @@ -609,6 +609,7 @@ public class Activity extends WfVertex String schemaType = (String) getProperties().get("SchemaType"); boolean hasOutcome = (transitionID == Transitions.DONE || transitionID == Transitions.COMPLETE) && (schemaType != null && schemaType.length() > 0); boolean hasErrorOutcome = transitionID == Transitions.SUSPEND && requestData != null && requestData.length()>0; + Object locker = getWf(); Event event = auditEvent(transitionID, agent, hasOutcome, hasErrorOutcome); if (event != null) eventID = event.getID(); @@ -618,7 +619,7 @@ public class Activity extends WfVertex TransactionManager storage = Gateway.getStorage(); if (entityPath != null) { - storage.commit(this); + storage.commit(locker); } } diff --git a/src/main/java/com/c2kernel/lifecycle/instance/Workflow.java b/src/main/java/com/c2kernel/lifecycle/instance/Workflow.java index 321e53e..13a7db6 100644 --- a/src/main/java/com/c2kernel/lifecycle/instance/Workflow.java +++ b/src/main/java/com/c2kernel/lifecycle/instance/Workflow.java @@ -8,6 +8,7 @@ import com.c2kernel.common.ObjectAlreadyExistsException; import com.c2kernel.common.ObjectNotFoundException; import com.c2kernel.entity.C2KLocalObject; import com.c2kernel.entity.agent.Job; +import com.c2kernel.events.History; import com.c2kernel.graph.model.GraphPoint; import com.c2kernel.graph.model.TypeNameAndConstructionInfo; import com.c2kernel.lifecycle.instance.predefined.PredefinedStepContainer; @@ -23,6 +24,7 @@ import com.c2kernel.utils.Logger; */ public class Workflow extends CompositeActivity implements C2KLocalObject { + public History history; /** TypeNameAndConstructionInfo[] variables added by Steve */ private final TypeNameAndConstructionInfo[] mVertexTypeNameAndConstructionInfo = { @@ -53,6 +55,15 @@ public class Workflow extends CompositeActivity implements C2KLocalObject PredefinedStepContainer act = new PredefinedStepContainer(); addChild(act, new GraphPoint(300, 100)); } + + public History getHistory() { + if (history == null) { + Integer i = (Integer) (getProperties().get("ItemSystemKey")); + if (i != null) + history = new History(i, this); + } + return history; + } /** * Method getVertexTypeNameAndConstructionInfo. diff --git a/src/main/java/com/c2kernel/lifecycle/instance/predefined/Import.java b/src/main/java/com/c2kernel/lifecycle/instance/predefined/Import.java index 8bcaa45..cbdc33b 100644 --- a/src/main/java/com/c2kernel/lifecycle/instance/predefined/Import.java +++ b/src/main/java/com/c2kernel/lifecycle/instance/predefined/Import.java @@ -77,20 +77,20 @@ public class Import extends PredefinedStep // write event, outcome and viewpoints to storage int syskey = getItemEntityPath().getSysKey(); TransactionManager storage = Gateway.getStorage(); - - History hist = new History(syskey, this); + Object locker = getWf(); + History hist = getWf().getHistory(); Event event = hist.addEvent(agent.getAgentName(), getCurrentAgentRole(), transitionID, getName(), getPath(), getType(), schemaName, schemaVersion, viewpoint, getCurrentState(), timestamp); try { - storage.put(syskey, new Outcome(event.getID(), requestData, schemaName, schemaVersion), this); - storage.put(syskey, new Viewpoint(syskey, schemaName, viewpoint, schemaVersion, event.getID()), this); + storage.put(syskey, new Outcome(event.getID(), requestData, schemaName, schemaVersion), locker); + storage.put(syskey, new Viewpoint(syskey, schemaName, viewpoint, schemaVersion, event.getID()), locker); if (!"last".equals(viewpoint)) - storage.put(syskey, new Viewpoint(syskey, schemaName, "last", schemaVersion, event.getID()), this); + storage.put(syskey, new Viewpoint(syskey, schemaName, "last", schemaVersion, event.getID()), locker); } catch (ClusterStorageException e) { Logger.error(e); - storage.abort(this); + storage.abort(locker); throw new InvalidDataException("Could not store imported outcome. Rolled back."); } - storage.commit(this); + storage.commit(locker); } } -- cgit v1.2.3