Skip to content

Commit eeb859f

Browse files
More Flowable5 unit test fixes + http test fix for windows
1 parent 00c8f81 commit eeb859f

File tree

13 files changed

+90
-47
lines changed

13 files changed

+90
-47
lines changed

modules/flowable-engine/src/main/java/org/flowable/engine/compatibility/Flowable5CompatibilityHandler.java

+2
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,8 @@ ProcessInstance startProcessInstance(String processDefinitionKey, String process
177177
void deleteJob(String jobId);
178178

179179
void leaveExecution(DelegateExecution execution);
180+
181+
void leaveMIExecution(DelegateExecution execution, Object v5MultiInstanceActivityBehavior);
180182

181183
void propagateError(BpmnError bpmnError, DelegateExecution execution);
182184

modules/flowable-engine/src/main/java/org/flowable/engine/impl/bpmn/behavior/AbstractBpmnActivityBehavior.java

+17-2
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import org.flowable.engine.impl.delegate.ActivityBehavior;
2727
import org.flowable.engine.impl.persistence.entity.ExecutionEntity;
2828
import org.flowable.engine.impl.util.CommandContextUtil;
29+
import org.flowable.engine.impl.util.Flowable5Util;
2930
import org.flowable.engine.impl.util.ProcessDefinitionUtil;
3031

3132
/**
@@ -38,6 +39,8 @@ public class AbstractBpmnActivityBehavior extends FlowNodeActivityBehavior {
3839
private static final long serialVersionUID = 1L;
3940

4041
protected MultiInstanceActivityBehavior multiInstanceActivityBehavior;
42+
43+
protected Object v5MultiInstanceActivityBehavior;
4144

4245
/**
4346
* Subclasses that call leave() will first pass through this method, before the regular {@link FlowNodeActivityBehavior#leave(DelegateExecution)} is called. This way, we can check if the activity
@@ -53,7 +56,12 @@ public void leave(DelegateExecution execution) {
5356
if (!hasLoopCharacteristics()) {
5457
super.leave(execution);
5558
} else if (hasMultiInstanceCharacteristics()) {
56-
multiInstanceActivityBehavior.leave(execution);
59+
if (multiInstanceActivityBehavior != null) {
60+
multiInstanceActivityBehavior.leave(execution);
61+
62+
} else if (v5MultiInstanceActivityBehavior != null) {
63+
Flowable5Util.getFlowable5CompatibilityHandler().leaveMIExecution(execution, v5MultiInstanceActivityBehavior);
64+
}
5765
}
5866
}
5967

@@ -105,7 +113,7 @@ protected boolean hasLoopCharacteristics() {
105113
}
106114

107115
protected boolean hasMultiInstanceCharacteristics() {
108-
return multiInstanceActivityBehavior != null;
116+
return multiInstanceActivityBehavior != null || v5MultiInstanceActivityBehavior != null;
109117
}
110118

111119
public MultiInstanceActivityBehavior getMultiInstanceActivityBehavior() {
@@ -116,4 +124,11 @@ public void setMultiInstanceActivityBehavior(MultiInstanceActivityBehavior multi
116124
this.multiInstanceActivityBehavior = multiInstanceActivityBehavior;
117125
}
118126

127+
public Object getV5MultiInstanceActivityBehavior() {
128+
return v5MultiInstanceActivityBehavior;
129+
}
130+
131+
public void setV5MultiInstanceActivityBehavior(Object v5MultiInstanceActivityBehavior) {
132+
this.v5MultiInstanceActivityBehavior = v5MultiInstanceActivityBehavior;
133+
}
119134
}

modules/flowable-http/src/test/java/org/flowable/http/bpmn/HttpServiceTaskTestServer.java

+29-24
Original file line numberDiff line numberDiff line change
@@ -14,19 +14,15 @@
1414

1515
import java.io.IOException;
1616
import java.io.InputStream;
17+
import java.net.URL;
18+
import java.nio.file.Path;
19+
import java.nio.file.Paths;
1720
import java.util.ArrayList;
1821
import java.util.Enumeration;
1922
import java.util.HashMap;
2023
import java.util.List;
2124
import java.util.Map;
2225

23-
import jakarta.servlet.MultipartConfigElement;
24-
import jakarta.servlet.ServletException;
25-
import jakarta.servlet.http.HttpServlet;
26-
import jakarta.servlet.http.HttpServletRequest;
27-
import jakarta.servlet.http.HttpServletResponse;
28-
import jakarta.servlet.http.Part;
29-
3026
import org.apache.commons.io.IOUtils;
3127
import org.apache.commons.lang3.StringUtils;
3228
import org.eclipse.jetty.http.HttpVersion;
@@ -48,6 +44,13 @@
4844
import com.fasterxml.jackson.databind.ObjectMapper;
4945
import com.fasterxml.jackson.databind.node.ObjectNode;
5046

47+
import jakarta.servlet.MultipartConfigElement;
48+
import jakarta.servlet.ServletException;
49+
import jakarta.servlet.http.HttpServlet;
50+
import jakarta.servlet.http.HttpServletRequest;
51+
import jakarta.servlet.http.HttpServletResponse;
52+
import jakarta.servlet.http.Part;
53+
5154
/**
5255
* Http Server and API to test HTTP Activity
5356
*
@@ -72,24 +75,26 @@ public class HttpServiceTaskTestServer {
7275
new HttpConnectionFactory(httpConfig));
7376
httpConnector.setPort(HTTP_PORT);
7477

75-
// https connector configuration
76-
// keytool -selfcert -alias Flowable -keystore keystore -genkey -keyalg RSA -sigalg SHA256withRSA -validity 36500
77-
SslContextFactory.Server sslContextFactory = new SslContextFactory.Server();
78-
sslContextFactory.setKeyStorePath(ReflectUtil.getResource("flowable.keystore").getFile());
79-
sslContextFactory.setKeyStorePassword("Flowable");
80-
81-
HttpConfiguration httpsConfig = new HttpConfiguration();
82-
83-
SslConnectionFactory sslConnectionFactory = new SslConnectionFactory(sslContextFactory, HttpVersion.HTTP_1_1.asString());
84-
sslConnectionFactory.setEnsureSecureRequestCustomizer(false);
85-
ServerConnector httpsConnector = new ServerConnector(server,
86-
sslConnectionFactory,
87-
new HttpConnectionFactory(httpsConfig));
88-
httpsConnector.setPort(HTTPS_PORT);
89-
90-
server.setConnectors(new Connector[]{httpConnector, httpsConnector});
91-
9278
try {
79+
// https connector configuration
80+
// keytool -selfcert -alias Flowable -keystore keystore -genkey -keyalg RSA -sigalg SHA256withRSA -validity 36500
81+
SslContextFactory.Server sslContextFactory = new SslContextFactory.Server();
82+
URL keystoreURL = ReflectUtil.getResource("flowable.keystore");
83+
Path keystorePath = Paths.get(keystoreURL.toURI());
84+
sslContextFactory.setKeyStorePath(keystorePath.toString());
85+
sslContextFactory.setKeyStorePassword("Flowable");
86+
87+
HttpConfiguration httpsConfig = new HttpConfiguration();
88+
89+
SslConnectionFactory sslConnectionFactory = new SslConnectionFactory(sslContextFactory, HttpVersion.HTTP_1_1.asString());
90+
sslConnectionFactory.setEnsureSecureRequestCustomizer(false);
91+
ServerConnector httpsConnector = new ServerConnector(server,
92+
sslConnectionFactory,
93+
new HttpConnectionFactory(httpsConfig));
94+
httpsConnector.setPort(HTTPS_PORT);
95+
96+
server.setConnectors(new Connector[]{httpConnector, httpsConnector});
97+
9398
ServletContextHandler contextHandler = new ServletContextHandler(ServletContextHandler.SESSIONS);
9499
contextHandler.setContextPath("/");
95100
MultipartConfigElement multipartConfig = new MultipartConfigElement((String) null);

modules/flowable5-camel-test/pom.xml

+5
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,11 @@
9292
<artifactId>java-uuid-generator</artifactId>
9393
<scope>test</scope>
9494
</dependency>
95+
<dependency>
96+
<groupId>org.openjdk.nashorn</groupId>
97+
<artifactId>nashorn-core</artifactId>
98+
<scope>test</scope>
99+
</dependency>
95100

96101
</dependencies>
97102

modules/flowable5-camel-test/src/test/java/org/activiti/camel/TestReturnValueFromFlowable.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -40,10 +40,10 @@ public class TestReturnValueFromFlowable extends SpringFlowableTestCase {
4040
@Autowired
4141
RuntimeService runtimeService;
4242

43-
@EndpointInject(uri = "mock:result")
43+
@EndpointInject("mock:result")
4444
protected MockEndpoint resultEndpoint;
4545

46-
@Produce(uri = "direct:startReturnResultTest")
46+
@Produce("direct:startReturnResultTest")
4747
protected ProducerTemplate template;
4848

4949
public void setUp() throws Exception {

modules/flowable5-compatibility/src/main/java/org/flowable/compatibility/DefaultFlowable5CompatibilityHandler.java

+10
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import org.activiti.engine.impl.JobProcessorContextImpl;
2727
import org.activiti.engine.impl.asyncexecutor.AsyncJobUtil;
2828
import org.activiti.engine.impl.bpmn.behavior.BpmnActivityBehavior;
29+
import org.activiti.engine.impl.bpmn.behavior.MultiInstanceActivityBehavior;
2930
import org.activiti.engine.impl.bpmn.helper.ErrorPropagation;
3031
import org.activiti.engine.impl.bpmn.helper.ErrorThrowingEventListener;
3132
import org.activiti.engine.impl.cfg.ProcessEngineConfigurationImpl;
@@ -971,6 +972,15 @@ public void leaveExecution(DelegateExecution execution) {
971972
handleActivitiException(e);
972973
}
973974
}
975+
976+
@Override
977+
public void leaveMIExecution(DelegateExecution execution, Object v5MultiInstanceActivityBehavior) {
978+
try {
979+
((MultiInstanceActivityBehavior) v5MultiInstanceActivityBehavior).execute(execution);
980+
} catch (org.activiti.engine.ActivitiException e) {
981+
handleActivitiException(e);
982+
}
983+
}
974984

975985
@Override
976986
public void propagateError(BpmnError bpmnError, DelegateExecution execution) {

modules/flowable5-engine/src/main/java/org/activiti/engine/impl/bpmn/behavior/MultiInstanceActivityBehavior.java

+15-6
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
import org.activiti.engine.impl.pvm.process.ActivityImpl;
3434
import org.activiti.engine.impl.pvm.runtime.AtomicOperation;
3535
import org.activiti.engine.impl.pvm.runtime.InterpretableExecution;
36+
import org.flowable.common.engine.api.FlowableException;
3637
import org.flowable.common.engine.api.delegate.Expression;
3738
import org.flowable.engine.delegate.DelegateExecution;
3839
import org.flowable.engine.delegate.ExecutionListener;
@@ -63,7 +64,7 @@ public abstract class MultiInstanceActivityBehavior extends FlowNodeActivityBeha
6364

6465
// Instance members
6566
protected ActivityImpl activity;
66-
protected AbstractBpmnActivityBehavior innerActivityBehavior;
67+
protected ActivityBehavior innerActivityBehavior;
6768
protected Expression loopCardinalityExpression;
6869
protected Expression completionConditionExpression;
6970
protected Expression collectionExpression;
@@ -76,7 +77,7 @@ public abstract class MultiInstanceActivityBehavior extends FlowNodeActivityBeha
7677
* @param activity
7778
* @param innerActivityBehavior The original {@link ActivityBehavior} of the activity that will be wrapped inside this behavior.
7879
*/
79-
public MultiInstanceActivityBehavior(ActivityImpl activity, AbstractBpmnActivityBehavior innerActivityBehavior) {
80+
public MultiInstanceActivityBehavior(ActivityImpl activity, ActivityBehavior innerActivityBehavior) {
8081
this.activity = activity;
8182
setInnerActivityBehavior(innerActivityBehavior);
8283
}
@@ -104,7 +105,11 @@ public void execute(DelegateExecution execution) {
104105
// Intercepts signals, and delegates it to the wrapped {@link ActivityBehavior}.
105106
@Override
106107
public void signal(ActivityExecution execution, String signalName, Object signalData) throws Exception {
107-
innerActivityBehavior.signal(execution, signalName, signalData);
108+
if (innerActivityBehavior instanceof org.flowable.engine.impl.bpmn.behavior.AbstractBpmnActivityBehavior) {
109+
throw new FlowableException("Not supported to signal this execution");
110+
} else {
111+
((AbstractBpmnActivityBehavior) this.innerActivityBehavior).signal(execution, signalName, signalData);
112+
}
108113
}
109114

110115
// required for supporting embedded subprocesses
@@ -330,12 +335,16 @@ public void setCollectionElementIndexVariable(String collectionElementIndexVaria
330335
this.collectionElementIndexVariable = collectionElementIndexVariable;
331336
}
332337

333-
public void setInnerActivityBehavior(AbstractBpmnActivityBehavior innerActivityBehavior) {
338+
public void setInnerActivityBehavior(ActivityBehavior innerActivityBehavior) {
334339
this.innerActivityBehavior = innerActivityBehavior;
335-
this.innerActivityBehavior.setMultiInstanceActivityBehavior(this);
340+
if (innerActivityBehavior instanceof org.flowable.engine.impl.bpmn.behavior.AbstractBpmnActivityBehavior) {
341+
((org.flowable.engine.impl.bpmn.behavior.AbstractBpmnActivityBehavior) innerActivityBehavior).setV5MultiInstanceActivityBehavior(this);
342+
} else {
343+
((AbstractBpmnActivityBehavior) this.innerActivityBehavior).setMultiInstanceActivityBehavior(this);
344+
}
336345
}
337346

338-
public AbstractBpmnActivityBehavior getInnerActivityBehavior() {
347+
public ActivityBehavior getInnerActivityBehavior() {
339348
return innerActivityBehavior;
340349
}
341350

modules/flowable5-engine/src/main/java/org/activiti/engine/impl/bpmn/behavior/ParallelMultiInstanceBehavior.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
*/
2727
public class ParallelMultiInstanceBehavior extends MultiInstanceActivityBehavior {
2828

29-
public ParallelMultiInstanceBehavior(ActivityImpl activity, AbstractBpmnActivityBehavior originalActivityBehavior) {
29+
public ParallelMultiInstanceBehavior(ActivityImpl activity, ActivityBehavior originalActivityBehavior) {
3030
super(activity, originalActivityBehavior);
3131
}
3232

modules/flowable5-engine/src/main/java/org/activiti/engine/impl/bpmn/behavior/SequentialMultiInstanceBehavior.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
*/
2727
public class SequentialMultiInstanceBehavior extends MultiInstanceActivityBehavior {
2828

29-
public SequentialMultiInstanceBehavior(ActivityImpl activity, AbstractBpmnActivityBehavior innerActivityBehavior) {
29+
public SequentialMultiInstanceBehavior(ActivityImpl activity, ActivityBehavior innerActivityBehavior) {
3030
super(activity, innerActivityBehavior);
3131
}
3232

modules/flowable5-engine/src/main/java/org/activiti/engine/impl/bpmn/parser/factory/ActivityBehaviorFactory.java

+2-3
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
*/
1313
package org.activiti.engine.impl.bpmn.parser.factory;
1414

15-
import org.activiti.engine.impl.bpmn.behavior.AbstractBpmnActivityBehavior;
1615
import org.activiti.engine.impl.bpmn.behavior.BoundaryEventActivityBehavior;
1716
import org.activiti.engine.impl.bpmn.behavior.CallActivityBehavior;
1817
import org.activiti.engine.impl.bpmn.behavior.CancelBoundaryEventActivityBehavior;
@@ -144,9 +143,9 @@ public interface ActivityBehaviorFactory {
144143

145144
public abstract EventBasedGatewayActivityBehavior createEventBasedGatewayActivityBehavior(EventGateway eventGateway);
146145

147-
public abstract SequentialMultiInstanceBehavior createSequentialMultiInstanceBehavior(ActivityImpl activity, AbstractBpmnActivityBehavior innerActivityBehavior);
146+
public abstract SequentialMultiInstanceBehavior createSequentialMultiInstanceBehavior(ActivityImpl activity, ActivityBehavior innerActivityBehavior);
148147

149-
public abstract ParallelMultiInstanceBehavior createParallelMultiInstanceBehavior(ActivityImpl activity, AbstractBpmnActivityBehavior innerActivityBehavior);
148+
public abstract ParallelMultiInstanceBehavior createParallelMultiInstanceBehavior(ActivityImpl activity, ActivityBehavior innerActivityBehavior);
150149

151150
public abstract SubProcessActivityBehavior createSubprocActivityBehavior(SubProcess subProcess);
152151

modules/flowable5-engine/src/main/java/org/activiti/engine/impl/bpmn/parser/factory/DefaultActivityBehaviorFactory.java

+2-3
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
import java.util.List;
1616

1717
import org.activiti.engine.ActivitiException;
18-
import org.activiti.engine.impl.bpmn.behavior.AbstractBpmnActivityBehavior;
1918
import org.activiti.engine.impl.bpmn.behavior.BoundaryEventActivityBehavior;
2019
import org.activiti.engine.impl.bpmn.behavior.BusinessRuleTaskActivityBehavior;
2120
import org.activiti.engine.impl.bpmn.behavior.CallActivityBehavior;
@@ -336,12 +335,12 @@ public EventBasedGatewayActivityBehavior createEventBasedGatewayActivityBehavior
336335
// Multi Instance
337336

338337
@Override
339-
public SequentialMultiInstanceBehavior createSequentialMultiInstanceBehavior(ActivityImpl activity, AbstractBpmnActivityBehavior innerActivityBehavior) {
338+
public SequentialMultiInstanceBehavior createSequentialMultiInstanceBehavior(ActivityImpl activity, ActivityBehavior innerActivityBehavior) {
340339
return new SequentialMultiInstanceBehavior(activity, innerActivityBehavior);
341340
}
342341

343342
@Override
344-
public ParallelMultiInstanceBehavior createParallelMultiInstanceBehavior(ActivityImpl activity, AbstractBpmnActivityBehavior innerActivityBehavior) {
343+
public ParallelMultiInstanceBehavior createParallelMultiInstanceBehavior(ActivityImpl activity, ActivityBehavior innerActivityBehavior) {
345344
return new ParallelMultiInstanceBehavior(activity, innerActivityBehavior);
346345
}
347346

modules/flowable5-engine/src/main/java/org/activiti/engine/impl/bpmn/parser/handler/AbstractActivityBpmnParseHandler.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -52,10 +52,10 @@ protected void createMultiInstanceLoopCharacteristics(BpmnParse bpmnParse, Activ
5252

5353
if (loopCharacteristics.isSequential()) {
5454
miActivityBehavior = bpmnParse.getActivityBehaviorFactory().createSequentialMultiInstanceBehavior(
55-
activity, (AbstractBpmnActivityBehavior) activity.getActivityBehavior());
55+
activity, activity.getActivityBehavior());
5656
} else {
5757
miActivityBehavior = bpmnParse.getActivityBehaviorFactory().createParallelMultiInstanceBehavior(
58-
activity, (AbstractBpmnActivityBehavior) activity.getActivityBehavior());
58+
activity, activity.getActivityBehavior());
5959
}
6060

6161
// ActivityImpl settings

modules/flowable5-test/src/main/java/org/activiti/engine/test/TestActivityBehaviorFactory.java

+2-3
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
import java.util.Map;
2020
import java.util.Set;
2121

22-
import org.activiti.engine.impl.bpmn.behavior.AbstractBpmnActivityBehavior;
2322
import org.activiti.engine.impl.bpmn.behavior.BoundaryEventActivityBehavior;
2423
import org.activiti.engine.impl.bpmn.behavior.CallActivityBehavior;
2524
import org.activiti.engine.impl.bpmn.behavior.CancelBoundaryEventActivityBehavior;
@@ -260,13 +259,13 @@ public EventBasedGatewayActivityBehavior createEventBasedGatewayActivityBehavior
260259

261260
@Override
262261
public SequentialMultiInstanceBehavior createSequentialMultiInstanceBehavior(
263-
ActivityImpl activity, AbstractBpmnActivityBehavior innerActivityBehavior) {
262+
ActivityImpl activity, ActivityBehavior innerActivityBehavior) {
264263
return wrappedActivityBehaviorFactory.createSequentialMultiInstanceBehavior(activity, innerActivityBehavior);
265264
}
266265

267266
@Override
268267
public ParallelMultiInstanceBehavior createParallelMultiInstanceBehavior(
269-
ActivityImpl activity, AbstractBpmnActivityBehavior innerActivityBehavior) {
268+
ActivityImpl activity, ActivityBehavior innerActivityBehavior) {
270269
return wrappedActivityBehaviorFactory.createParallelMultiInstanceBehavior(activity, innerActivityBehavior);
271270
}
272271

0 commit comments

Comments
 (0)