@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);
}
}
}