public void updateLastUpdateDate() { lastUpdate = System.currentTimeMillis(); final Querier querier = EnvTool.getJournalQueriers(); querier.getProcessInstance(getProcessInstanceUUID()).updateLastUpdateDate(); if (getRootInstanceUUID() != null && getRootInstanceUUID() != getProcessInstanceUUID()) { querier.getProcessInstance(getRootInstanceUUID()).updateLastUpdateDate(); } }
@Override public Map<String, Object> evaluateGroovyExpressions(final Map<String, String> expressions, final ActivityInstanceUUID activityUUID, final Map<String, Object> context, final boolean useActivityScope, final boolean propagate) throws InstanceNotFoundException, ActivityNotFoundException, GroovyException { Misc.checkArgsNotNull(activityUUID); if (expressions == null || expressions.isEmpty()) { return Collections.emptyMap(); } final ClassLoader ori = Thread.currentThread().getContextClassLoader(); try { final InternalActivityInstance activityInstance = EnvTool.getAllQueriers().getActivityInstance(activityUUID); final ProcessDefinitionUUID definitionUUID = activityInstance.getProcessDefinitionUUID(); final ClassLoader processClassLoader = EnvTool.getClassDataLoader().getProcessClassLoader(definitionUUID); Thread.currentThread().setContextClassLoader(processClassLoader); final Binding binding = getBinding(definitionUUID, activityInstance.getProcessInstanceUUID(), activityUUID, context, useActivityScope, false, propagate); final Map<String, Object> results = evaluateGroovyExpressions(expressions, binding); propagateVariablesIfNecessary(activityUUID, null, propagate, binding); return results; } catch (final Exception e) { throw new GroovyException("Exception while evaluating expression. ActivityInstanceUUID: " + activityUUID, e); } finally { if (ori != null && ori != Thread.currentThread().getContextClassLoader()) { Thread.currentThread().setContextClassLoader(ori); } } }
private static void restoreTransientVariablesIfNecessary(final ActivityInstanceUUID activityInstanceUUID) { final InternalActivityInstance activityInstance = EnvTool.getJournalQueriers().getActivityInstance( activityInstanceUUID); if (activityInstance != null && needRestore(activityInstance.getState())) { final InternalActivityDefinition activityDefinition = EnvTool.getJournalQueriers().getActivity( activityInstance.getActivityDefinitionUUID()); final Map<String, Object> transientVariables = VariableUtil.createTransientVariables( activityDefinition.getDataFields(), activityInstance.getProcessInstanceUUID()); if (transientVariables != null && !transientVariables.isEmpty()) { addTransientVariables(activityInstanceUUID, transientVariables); if (LOG.isLoggable(Level.WARNING)) { final StringBuilder stb = new StringBuilder("Restoring transient varaibles for activity "); stb.append(activityInstanceUUID); stb.append(": the system probably was stopped during the variable life cycle. All transient variables for this activity will be restored to their default value."); LOG.warning(stb.toString()); } } } }
public SimpleBinding(final Map<String, Object> variables, final ProcessDefinitionUUID processUUID, final ProcessInstanceUUID instanceUUID, final ActivityInstanceUUID activityInstanceUUID) throws IOException, ClassNotFoundException { super(); attachmentsWasLoaded = false; if (variables != null) { for (final Map.Entry<String, Object> variable : variables.entrySet()) { Object value = variable.getValue(); if (value instanceof ObjectVariable) { value = ((ObjectVariable) value).getValue(); } allVariables.put(variable.getKey(), value); } } if (processUUID != null) { this.processUUID = processUUID; } else if (instanceUUID != null) { this.processUUID = EnvTool.getAllQueriers().getProcessInstance(instanceUUID).getProcessDefinitionUUID(); } else if (activityInstanceUUID != null) { this.processUUID = EnvTool.getAllQueriers().getActivityInstance(activityInstanceUUID) .getProcessDefinitionUUID(); } if (instanceUUID != null) { this.instanceUUID = instanceUUID; } else if (activityInstanceUUID != null) { this.instanceUUID = EnvTool.getAllQueriers().getActivityInstance(activityInstanceUUID).getProcessInstanceUUID(); } this.activityInstanceUUID = activityInstanceUUID; }
if (activityInstance != null) { LOG.log(Level.WARNING, "Exception caught in activity instance " + activityInstance.getUUID() + " of process instance" + activityInstance.getProcessInstanceUUID(), e); } else { final InternalProcessInstance instance = execution.getInstance();