提交 f4c5407c 编写于 作者: J Joram Barrez

Merge branch 'master' of https://github.com/Activiti/Activiti

......@@ -12,6 +12,8 @@
*/
package org.activiti.engine.delegate;
import java.io.Serializable;
......@@ -21,7 +23,7 @@ package org.activiti.engine.delegate;
* @author Tom Baeyens
* @author Joram Barrez
*/
public interface ExecutionListener {
public interface ExecutionListener extends Serializable {
String EVENTNAME_START = "start";
String EVENTNAME_END = "end";
......
......@@ -13,13 +13,15 @@
package org.activiti.engine.delegate;
import java.io.Serializable;
/**
* @author Frederik Heremans
*/
public interface Expression {
public interface Expression extends Serializable {
Object getValue(VariableScope variableScope);
......
......@@ -13,6 +13,8 @@
package org.activiti.engine.delegate;
import java.io.Serializable;
......@@ -20,7 +22,7 @@ package org.activiti.engine.delegate;
/**
* @author Tom Baeyens
*/
public interface TaskListener {
public interface TaskListener extends Serializable {
String EVENTNAME_CREATE = "create";
String EVENTNAME_ASSIGNMENT = "assignment";
......
......@@ -23,7 +23,7 @@ import org.activiti.engine.FormService;
*
* @author Tom Baeyens
*/
public interface FormProperty {
public interface FormProperty extends Serializable {
/** The key used to submit the property in {@link FormService#submitStartFormData(String, java.util.Map)}
* or {@link FormService#submitTaskFormData(String, java.util.Map)} */
......
......@@ -22,7 +22,7 @@ import org.activiti.engine.IdentityService;
*
* @author Tom Baeyens
*/
public interface Group {
public interface Group extends Serializable {
String getId();
void setId(String id);
......
......@@ -21,7 +21,7 @@ import java.io.Serializable;
/**
* @author Tom Baeyens
*/
public class Picture {
public class Picture implements Serializable {
private static final long serialVersionUID = 2384375526314443322L;
......
......@@ -21,7 +21,7 @@ import org.activiti.engine.IdentityService;
* Represents a user, used in {@link IdentityService}.
* @author Tom Baeyens
*/
public interface User {
public interface User extends Serializable {
String getId();
void setId(String id);
......
......@@ -21,7 +21,7 @@ import org.activiti.engine.delegate.DelegateExecution;
/**
* @author Tom Baeyens
*/
public interface Condition {
public interface Condition extends Serializable {
boolean evaluate(DelegateExecution execution);
}
......@@ -16,7 +16,6 @@ package org.activiti.engine.impl;
import java.io.Serializable;
import java.util.List;
import org.activiti.engine.ActivitiException;
import org.activiti.engine.ActivitiIllegalArgumentException;
import org.activiti.engine.impl.interceptor.CommandContext;
import org.activiti.engine.impl.interceptor.CommandExecutor;
......@@ -26,7 +25,7 @@ import org.activiti.engine.impl.persistence.entity.EventSubscriptionEntity;
/**
* @author Daniel Meyer
*/
public class EventSubscriptionQueryImpl extends AbstractQuery<EventSubscriptionQueryImpl, EventSubscriptionEntity> {
public class EventSubscriptionQueryImpl extends AbstractQuery<EventSubscriptionQueryImpl, EventSubscriptionEntity> implements Serializable {
private static final long serialVersionUID = 1L;
......
......@@ -19,7 +19,7 @@ import java.io.Serializable;
/**
* @author Daniel Meyer
*/
public class EventSubscriptionQueryValue {
public class EventSubscriptionQueryValue implements Serializable {
private static final long serialVersionUID = 1L;
......
......@@ -20,7 +20,7 @@ import org.activiti.engine.ProcessEngineInfo;
/**
* @author Tom Baeyens
*/
public class ProcessEngineInfoImpl implements ProcessEngineInfo {
public class ProcessEngineInfoImpl implements Serializable, ProcessEngineInfo {
private static final long serialVersionUID = 1L;
......
......@@ -15,7 +15,6 @@ package org.activiti.engine.impl;
import java.io.Serializable;
import org.activiti.engine.ActivitiException;
import org.activiti.engine.ActivitiIllegalArgumentException;
import org.activiti.engine.impl.persistence.entity.VariableInstanceEntity;
import org.activiti.engine.impl.variable.ByteArrayType;
......@@ -29,7 +28,7 @@ import org.activiti.engine.impl.variable.VariableTypes;
*
* @author Frederik Heremans
*/
public class QueryVariableValue {
public class QueryVariableValue implements Serializable {
private static final long serialVersionUID = 1L;
private String name;
private Object value;
......
......@@ -35,7 +35,7 @@ import org.slf4j.LoggerFactory;
*
* @author Joram Barrez
*/
public class BpmnActivityBehavior {
public class BpmnActivityBehavior implements Serializable {
private static final long serialVersionUID = 1L;
......
......@@ -13,11 +13,13 @@
package org.activiti.engine.impl.bpmn.parser;
import java.io.Serializable;
/**
* @author Daniel Meyer
*/
public class CompensateEventDefinition {
public class CompensateEventDefinition implements Serializable {
protected String activityRef;
protected boolean waitForCompletion;
......
......@@ -19,7 +19,7 @@ import java.util.Comparator;
/**
* @author Daniel Meyer
*/
public class ErrorEventDefinition {
public class ErrorEventDefinition implements Serializable {
public static Comparator<ErrorEventDefinition> comparator = new Comparator<ErrorEventDefinition>() {
public int compare(ErrorEventDefinition o1, ErrorEventDefinition o2) {
......
......@@ -28,7 +28,7 @@ import org.activiti.engine.impl.pvm.process.ActivityImpl;
* @author Falko Menge
* @author Joram Barrez
*/
public class EventSubscriptionDeclaration {
public class EventSubscriptionDeclaration implements Serializable {
private static final long serialVersionUID = 1L;
......
......@@ -20,7 +20,7 @@ import java.io.Serializable;
*
* @author Daniel Meyer
*/
public class SignalDefinition {
public class SignalDefinition implements Serializable {
private static final long serialVersionUID = 1L;
......
......@@ -23,7 +23,6 @@ import java.text.ParseException;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Locale;
import java.util.Map;
import java.util.SortedSet;
......@@ -197,7 +196,7 @@ import java.util.TreeSet;
* @author Contributions from Mads Henderson
* @author Refactoring from CronTrigger to CronExpression by Aaron Craven
*/
public class CronExpression implements Cloneable {
public class CronExpression implements Serializable, Cloneable {
private static final long serialVersionUID = 12423409423L;
......
......@@ -13,8 +13,8 @@
package org.activiti.engine.impl.form;
import java.util.List;
import java.io.Serializable;
import java.util.List;
import java.util.Map;
import org.activiti.bpmn.model.FormProperty;
......@@ -26,7 +26,7 @@ import org.activiti.engine.impl.persistence.entity.ProcessDefinitionEntity;
/**
* @author Tom Baeyens
*/
public interface FormHandler {
public interface FormHandler extends Serializable {
ThreadLocal<FormHandler> current = new ThreadLocal<FormHandler>();
......
......@@ -28,7 +28,7 @@ import java.util.Hashtable;
* {@link FunctionMapper}. This allows a container to pre-create expressions and not have to reparse
* them each time they are evaluated.
*/
public abstract class Expression {
public abstract class Expression implements Serializable {
private static final long serialVersionUID = 1L;
/**
......
......@@ -22,7 +22,7 @@ import java.io.Serializable;
*
* @since 2.2
*/
public class ValueReference {
public class ValueReference implements Serializable {
private static final long serialVersionUID = 1L;
private Object base;
......
......@@ -29,7 +29,7 @@ import org.activiti.engine.impl.persistence.entity.TimerEntity;
/**
* @author Tom Baeyens
*/
public class TimerDeclarationImpl {
public class TimerDeclarationImpl implements Serializable {
private static final long serialVersionUID = 1L;
......
......@@ -40,7 +40,7 @@ public class Bindings implements TypeConverter {
/**
* Wrap a {@link Method} for serialization.
*/
private static class MethodWrapper {
private static class MethodWrapper implements Serializable {
private static final long serialVersionUID = 1L;
private transient Method method;
......
......@@ -26,7 +26,7 @@ import org.activiti.engine.impl.javax.el.ELException;
*
* @author Christoph Beck
*/
public interface TreeBuilder {
public interface TreeBuilder extends Serializable {
/**
* Parse the given expression and create an abstract syntax tree for it.
* @param expression expression string
......
......@@ -19,7 +19,7 @@ import java.io.Serializable;
import org.activiti.engine.impl.javax.el.ELException;
public interface TypeConverter {
public interface TypeConverter extends Serializable {
/**
* Default conversions as from JSR245.
*/
......
......@@ -24,7 +24,7 @@ import org.apache.commons.lang3.ObjectUtils;
* @author Tom Baeyens
* @author Marcus Klimstra (CGI)
*/
public class ByteArrayEntity implements PersistentObject, HasRevision {
public class ByteArrayEntity implements Serializable, PersistentObject, HasRevision {
private static final long serialVersionUID = 1L;
......
......@@ -17,7 +17,7 @@ import org.activiti.engine.impl.context.Context;
*
* @author Marcus Klimstra (CGI)
*/
public final class ByteArrayRef {
public final class ByteArrayRef implements Serializable {
private static final long serialVersionUID = 1L;
......
......@@ -29,7 +29,7 @@ import org.activiti.engine.repository.Deployment;
/**
* @author Tom Baeyens
*/
public class DeploymentEntity implements Deployment, PersistentObject {
public class DeploymentEntity implements Serializable, Deployment, PersistentObject {
private static final long serialVersionUID = 1L;
......
......@@ -24,7 +24,7 @@ import org.activiti.engine.impl.db.PersistentObject;
/**
* @author Frederik Heremans
*/
public class HistoricIdentityLinkEntity implements HistoricIdentityLink, PersistentObject {
public class HistoricIdentityLinkEntity implements Serializable, HistoricIdentityLink, PersistentObject {
private static final long serialVersionUID = 1L;
......
......@@ -27,7 +27,7 @@ import org.activiti.engine.task.IdentityLink;
/**
* @author Joram Barrez
*/
public class IdentityLinkEntity implements IdentityLink, PersistentObject {
public class IdentityLinkEntity implements Serializable, IdentityLink, PersistentObject {
private static final long serialVersionUID = 1L;
......
......@@ -39,7 +39,7 @@ import org.apache.commons.lang3.StringUtils;
* @author Dave Syer
* @author Frederik Heremans
*/
public abstract class JobEntity implements Job, PersistentObject, HasRevision {
public abstract class JobEntity implements Job, PersistentObject, HasRevision, Serializable {
public static final boolean DEFAULT_EXCLUSIVE = true;
public static final int DEFAULT_RETRIES = 3;
......
......@@ -21,7 +21,7 @@ import org.activiti.engine.impl.db.PersistentObject;
* @author Tom Baeyens
* @author Joram Barrez
*/
public class MembershipEntity implements PersistentObject {
public class MembershipEntity implements PersistentObject, Serializable {
private static final long serialVersionUID = 1L;
......
......@@ -28,7 +28,7 @@ import org.activiti.engine.repository.Model;
* @author Tijs Rademakers
* @author Joram Barrez
*/
public class ModelEntity implements Model, HasRevision, PersistentObject {
public class ModelEntity implements Model, HasRevision, PersistentObject, Serializable {
private static final long serialVersionUID = 1L;
......
......@@ -21,7 +21,7 @@ import org.activiti.engine.impl.db.PersistentObject;
/**
* @author Tom Baeyens
*/
public class ResourceEntity implements PersistentObject {
public class ResourceEntity implements PersistentObject, Serializable {
private static final long serialVersionUID = 1L;
......
......@@ -36,7 +36,7 @@ import org.activiti.engine.impl.variable.VariableTypes;
* @author Joram Barrez
* @author Tijs Rademakers
*/
public abstract class VariableScopeImpl implements VariableScope {
public abstract class VariableScopeImpl implements Serializable, VariableScope {
private static final long serialVersionUID = 1L;
......
......@@ -19,7 +19,7 @@ import java.io.Serializable;
/**
* @author Tom Baeyens
*/
public interface PvmProcessElement {
public interface PvmProcessElement extends Serializable {
String getId();
......
......@@ -18,7 +18,7 @@ import java.io.Serializable;
/**
* @author Tom Baeyens
*/
public interface ActivityBehavior {
public interface ActivityBehavior extends Serializable {
void execute(ActivityExecution execution) throws Exception;
}
......@@ -24,7 +24,7 @@ import java.util.List;
*
* @author Frederik Heremans
*/
public class LaneSet {
public class LaneSet implements Serializable {
private static final long serialVersionUID = 1L;
......
......@@ -12,9 +12,12 @@
*/
package org.activiti.engine.impl.scripting;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.script.Bindings;
import javax.script.ScriptContext;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineFactory;
import javax.script.ScriptEngineManager;
......@@ -26,13 +29,18 @@ import org.activiti.engine.delegate.VariableScope;
/**
* @author Tom Baeyens
* @author Joram Barrez
* @author Frederik Heremans
*/
public class ScriptingEngines {
public static final String DEFAULT_SCRIPTING_LANGUAGE = "juel";
public static final String GROOVY_SCRIPTING_LANGUAGE = "groovy";
private final ScriptEngineManager scriptEngineManager;
protected ScriptBindingsFactory scriptBindingsFactory;
protected boolean cacheScriptingEngines = true;
protected Map<String, ScriptEngine> cachedEngines;
public ScriptingEngines(ScriptBindingsFactory scriptBindingsFactory) {
this(new ScriptEngineManager());
......@@ -41,6 +49,7 @@ public class ScriptingEngines {
public ScriptingEngines(ScriptEngineManager scriptEngineManager) {
this.scriptEngineManager = scriptEngineManager;
cachedEngines = new HashMap<String, ScriptEngine>();
}
public ScriptingEngines addScriptEngineFactory(ScriptEngineFactory scriptEngineFactory) {
......@@ -63,14 +72,17 @@ public class ScriptingEngines {
public Object evaluate(String script, String language, VariableScope variableScope, boolean storeScriptVariables) {
return evaluate(script, language, createBindings(variableScope, storeScriptVariables));
}
public void setCacheScriptingEngines(boolean cacheScriptingEngines) {
this.cacheScriptingEngines = cacheScriptingEngines;
}
public boolean isCacheScriptingEngines() {
return cacheScriptingEngines;
}
protected Object evaluate(String script, String language, Bindings bindings) {
ScriptEngine scriptEngine = scriptEngineManager.getEngineByName(language);
if (scriptEngine == null) {
throw new ActivitiException("Can't find scripting engine for '" + language + "'");
}
ScriptEngine scriptEngine = getEngineByName(language);
try {
return scriptEngine.eval(script, bindings);
} catch (ScriptException e) {
......@@ -78,6 +90,42 @@ public class ScriptingEngines {
}
}
protected ScriptEngine getEngineByName(String language) {
ScriptEngine scriptEngine = null;
if(cacheScriptingEngines) {
scriptEngine = cachedEngines.get(language);
if(scriptEngine == null) {
scriptEngine = scriptEngineManager.getEngineByName(language);
if(scriptEngine != null) {
// ACT-1858: Special handling for groovy engine regarding GC
if(GROOVY_SCRIPTING_LANGUAGE.equals(language)) {
try {
scriptEngine.getContext().setAttribute("#jsr223.groovy.engine.keep.globals", "weak", ScriptContext.ENGINE_SCOPE);
} catch(Exception ignore) {
// ignore this, in case engine doesn't support the passed attribute
}
}
// Check if script-engine allows caching, using "THREADING" parameter as defined in spec
Object threadingParameter = scriptEngine.getFactory().getParameter("THREADING");
if(threadingParameter != null) {
// Add engine to cache as any non-null result from the threading-parameter indicates at least MT-access
cachedEngines.put(language, scriptEngine);
}
}
}
} else {
scriptEngine = scriptEngineManager.getEngineByName(language);
}
if (scriptEngine == null) {
throw new ActivitiException("Can't find scripting engine for '" + language + "'");
}
return scriptEngine;
}
/** override to build a spring aware ScriptingEngines */
protected Bindings createBindings(VariableScope variableScope) {
return scriptBindingsFactory.createBindings(variableScope);
......
......@@ -29,7 +29,7 @@ import org.activiti.engine.impl.form.TaskFormHandler;
*
* @author Joram Barrez
*/
public class TaskDefinition {
public class TaskDefinition implements Serializable {
private static final long serialVersionUID = 1L;
......
......@@ -21,7 +21,7 @@ import java.io.Serializable;
*
* @author Frederik Heremans
*/
public interface QueryProperty {
public interface QueryProperty extends Serializable {
String getName();
}
......@@ -21,7 +21,7 @@ import java.io.Serializable;
*
* @author Falko Menge
*/
public class DiagramEdgeWaypoint {
public class DiagramEdgeWaypoint implements Serializable {
private static final long serialVersionUID = 1L;
......
......@@ -20,7 +20,7 @@ import java.io.Serializable;
*
* @author Falko Menge
*/
abstract public class DiagramElement {
abstract public class DiagramElement implements Serializable {
private static final long serialVersionUID = 1L;
......
......@@ -25,7 +25,7 @@ import java.util.Map.Entry;
*
* @author Falko Menge
*/
public class DiagramLayout {
public class DiagramLayout implements Serializable {
private static final long serialVersionUID = 1L;
......
......@@ -25,7 +25,7 @@ import org.activiti.engine.TaskService;
* @see {@link TaskService#getTaskEvents(String)
* @author Tom Baeyens
*/
public interface Event {
public interface Event extends Serializable {
/** A user identity link was added with following message parts:
* [0] userId
......
......@@ -6159,4 +6159,48 @@ Exactly the same way, the list of groups that is configured as a potential start
</programlisting>
</para>
</section>
<section id="dataobjects">
<title>Data objects</title>
<link linkend="experimental">
<emphasis role="bold">[EXPERIMENTAL]</emphasis>
</link>
<para>
BPMN provides the possibility to define data objects as part of a process or sub process element. According to the BPMN specification it's possible to include complex XML structures
that might be imported from XSD definitions. As a first start to support data objects in Activiti the folowing XSD types are supported:
</para>
<itemizedlist>
<programlisting>
&lt;dataObject id="dObj1" name="StringTest" itemSubjectRef="xsd:string"/&gt;
</programlisting>
<programlisting>
&lt;dataObject id="dObj2" name="BooleanTest" itemSubjectRef="xsd:boolean"/&gt;
</programlisting>
<programlisting>
&lt;dataObject id="dObj3" name="DateTest" itemSubjectRef="xsd:datetime"/&gt;
</programlisting>
<programlisting>
&lt;dataObject id="dObj4" name="DoubleTest" itemSubjectRef="xsd:double"/&gt;
</programlisting>
<programlisting>
&lt;dataObject id="dObj5" name="IntegerTest" itemSubjectRef="xsd:int"/&gt;
</programlisting>
<programlisting>
&lt;dataObject id="dObj6" name="LongTest" itemSubjectRef="xsd:long"/&gt;
</programlisting>
</itemizedlist>
<para>
The data object definitions will be automatically converted to process variables using the 'name' attribute value as the name for the new variable.
In addition to the definition of the data object Activiti also provides an extension element to assign a default value to the variable. The following BPMN snippet provides an example:
</para>
<programlisting>
&lt;process id="dataObjectScope" name="Data Object Scope" isExecutable="true"&gt;
&lt;dataObject id="dObj123" name="StringTest123" itemSubjectRef="xsd:string"&gt;
&lt;extensionElements&gt;
&lt;activiti:value&gt;Testing123&lt;/activiti:value&gt;
&lt;/extensionElements&gt;
&lt;/dataObject&gt;
</programlisting>
</section>
</chapter>
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册