Hi,
I am upgrading an app based on Flowable-6.1.2 to Flowable-6.3.1.
In Flowable-6.1.2 there were some events in https://github.com/flowable/flowable-engine/blob/flowable-6.1.2/modules/flowable-engine/src/main/java/org/flowable/engine/delegate/event/FlowableEngineEventType.java that have since been removed in Flowable-6.3.1 in this commit. https://github.com/flowable/flowable-engine/commit/a34be6352750dfe71a89bd23da7a22457490a722#diff-52aa8bce1109d775c92f3736045e2f06
In our processes there are eventlisteners used for auditing purposes, and these were definied to listen to all event types defined in the class FlowableEngineEventType. This is by explicitly listing all event types by name, and not using a catch-all expression like ‘*’. This included events such as MEMBERSHIP_CREATED, UNCAUGHT_BPMN_ERROR, etc
These eventlisteners were defined in the BPMN, not via the runtime API.
Now when we run Flowable-6.3.1 we get an exception when we try to retreive the BPMN model.
2230559 2018-10-17T10:07:51,299 ERROR pl.bpmn.deployer.ParsedDeploymentBuilder [] - Could not parse resource my-process.bpmn
org.flowable.common.engine.api.FlowableIllegalArgumentException: Invalid event-type: MEMBERSHIP_CREATED
at org.flowable.common.engine.api.delegate.event.FlowableEngineEventType.getTypesFromString(FlowableEngineEventType.java:311) ~[flowable-engine-common-api-6.3.1.jar:6.3.1]
at org.flowable.engine.impl.bpmn.parser.handler.ProcessParseHandler.createEventListeners(ProcessParseHandler.java:87) ~[flowable-engine-6.3.1.jar:6.3.1]
at org.flowable.engine.impl.bpmn.parser.handler.ProcessParseHandler.transformProcess(ProcessParseHandler.java:70) ~[flowable-engine-6.3.1.jar:6.3.1]
at org.flowable.engine.impl.bpmn.parser.handler.ProcessParseHandler.executeParse(ProcessParseHandler.java:49) ~[flowable-engine-6.3.1.jar:6.3.1]
at org.flowable.engine.impl.bpmn.parser.handler.ProcessParseHandler.executeParse(ProcessParseHandler.java:33) ~[flowable-engine-6.3.1.jar:6.3.1]
at org.flowable.engine.impl.bpmn.parser.handler.AbstractBpmnParseHandler.parse(AbstractBpmnParseHandler.java:61) ~[flowable-engine-6.3.1.jar:6.3.1]
at org.flowable.engine.impl.bpmn.parser.BpmnParseHandlers.parseElement(BpmnParseHandlers.java:79) ~[flowable-engine-6.3.1.jar:6.3.1]
at org.flowable.engine.impl.bpmn.parser.BpmnParse.applyParseHandlers(BpmnParse.java:282) ~[flowable-engine-6.3.1.jar:6.3.1]
at org.flowable.engine.impl.bpmn.parser.BpmnParse.execute(BpmnParse.java:195) ~[flowable-engine-6.3.1.jar:6.3.1]
at org.flowable.engine.impl.bpmn.deployer.ParsedDeploymentBuilder.createBpmnParseFromResource(ParsedDeploymentBuilder.java:97) ~[flowable-engine-6.3.1.jar:6.3.1]
at org.flowable.engine.impl.bpmn.deployer.ParsedDeploymentBuilder.build(ParsedDeploymentBuilder.java:55) ~[flowable-engine-6.3.1.jar:6.3.1]
at org.flowable.engine.impl.bpmn.deployer.BpmnDeployer.deploy(BpmnDeployer.java:76) ~[flowable-engine-6.3.1.jar:6.3.1]
at org.flowable.engine.impl.persistence.deploy.DeploymentManager.deploy(DeploymentManager.java:62) ~[flowable-engine-6.3.1.jar:6.3.1]
at org.flowable.engine.impl.persistence.deploy.DeploymentManager.resolveProcessDefinition(DeploymentManager.java:130) ~[flowable-engine-6.3.1.jar:6.3.1]
at org.flowable.engine.impl.persistence.deploy.DeploymentManager.findDeployedProcessDefinitionById(DeploymentManager.java:80) ~[flowable-engine-6.3.1.jar:6.3.1]
at org.flowable.engine.impl.util.ProcessDefinitionUtil.getBpmnModel(ProcessDefinitionUtil.java:78) ~[flowable-engine-6.3.1.jar:6.3.1]
at org.flowable.engine.impl.cmd.GetBpmnModelCmd.execute(GetBpmnModelCmd.java:42) ~[flowable-engine-6.3.1.jar:6.3.1]
at org.flowable.engine.impl.cmd.GetBpmnModelCmd.execute(GetBpmnModelCmd.java:26) ~[flowable-engine-6.3.1.jar:6.3.1]
at org.flowable.engine.impl.interceptor.CommandInvoker$1.run(CommandInvoker.java:51) ~[flowable-engine-6.3.1.jar:6.3.1]
at org.flowable.engine.impl.interceptor.CommandInvoker.executeOperation(CommandInvoker.java:93) ~[flowable-engine-6.3.1.jar:6.3.1]
at org.flowable.engine.impl.interceptor.CommandInvoker.executeOperations(CommandInvoker.java:72) ~[flowable-engine-6.3.1.jar:6.3.1]
at org.flowable.engine.impl.interceptor.CommandInvoker.execute(CommandInvoker.java:56) ~[flowable-engine-6.3.1.jar:6.3.1]
at org.flowable.engine.impl.interceptor.BpmnOverrideContextInterceptor.execute(BpmnOverrideContextInterceptor.java:25) ~[flowable-engine-6.3.1.jar:6.3.1]
at org.flowable.common.engine.impl.interceptor.TransactionContextInterceptor.execute(TransactionContextInterceptor.java:53) ~[flowable-engine-common-6.3.1.jar:6.3.1]
at org.flowable.common.engine.impl.interceptor.CommandContextInterceptor.execute(CommandContextInterceptor.java:71) ~[flowable-engine-common-6.3.1.jar:6.3.1]
at org.flowable.idm.spring.SpringTransactionInterceptor$1.doInTransaction(SpringTransactionInterceptor.java:49) ~[flowable-idm-spring-6.3.1.jar:6.3.1]
at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:140) ~[spring-tx-5.0.6.RELEASE.jar:5.0.6.RELEASE]
at org.flowable.idm.spring.SpringTransactionInterceptor.execute(SpringTransactionInterceptor.java:46) ~[flowable-idm-spring-6.3.1.jar:6.3.1]
at org.flowable.common.engine.impl.interceptor.LogInterceptor.execute(LogInterceptor.java:30) ~[flowable-engine-common-6.3.1.jar:6.3.1]
at org.flowable.common.engine.impl.cfg.CommandExecutorImpl.execute(CommandExecutorImpl.java:56) ~[flowable-engine-common-6.3.1.jar:6.3.1]
at org.flowable.common.engine.impl.cfg.CommandExecutorImpl.execute(CommandExecutorImpl.java:51) ~[flowable-engine-common-6.3.1.jar:6.3.1]
at org.flowable.engine.impl.RepositoryServiceImpl.getBpmnModel(RepositoryServiceImpl.java:177) ~[flowable-engine-6.3.1.jar:6.3.1]
We have now removed the non-existing event types from the BPMN, but unfortunately existing processes (both running and finished) still suffer the above problem.
I had a look in the source code and a fix for us would be to remove the exception at this line https://github.com/flowable/flowable-engine/blob/e436cfd9be95805dfc945cc519a4f556936c1638/modules/flowable-engine-common-api/src/main/java/org/flowable/common/engine/api/delegate/event/FlowableEngineEventType.java#L311 and replace it with a log warning, and simply ignoring the non-existing event types.
Would this seem like a reasonable change? Or is there some other solution or workaround to this problem?
Thanks,
Paul