rudi
July 13, 2017, 8:21am
1
I’m using Spring with embedded process engine. I want to configure isDeployChangedOnly for process-archive.
This is usually configured in processes.xml but I understand that I don’t need this file and I think this file is not working with my Spring configuration. Is it correct? How can I configure these attributes about process-archive?
Here is my configuration about Camunda:
<bean id="processEngineConfiguration" class="org.camunda.bpm.engine.spring.SpringProcessEngineConfiguration">
<property name="processEngineName" value="default" />
<property name="dataSource" ref="processEngineDS" />
<property name="transactionManager" ref="blTransactionManager" />
<property name="history" value="full" />
<property name="databaseSchemaUpdate" value="noop" />
<property name="deploymentResources" value="classpath*:process/*.bpmn" />
<property name="authorizationEnabled" value="true" />
<property name="jobExecutorActivate" value="true" />
<property name="jobExecutorDeploymentAware" value="false" />
<property name="idGenerator">
<bean class="org.camunda.bpm.engine.impl.persistence.StrongUuidGenerator" />
</property>
</bean>
<bean id="processEngine" class="org.camunda.bpm.engine.spring.ProcessEngineFactoryBean">
<property name="processEngineConfiguration" ref="processEngineConfiguration" />
</bean>
<bean id="repositoryService" factory-bean="processEngine" factory-method="getRepositoryService" />
<bean id="runtimeService" factory-bean="processEngine" factory-method="getRuntimeService" />
<bean id="taskService" factory-bean="processEngine" factory-method="getTaskService" />
<bean id="historyService" factory-bean="processEngine" factory-method="getHistoryService" />
<bean id="managementService" factory-bean="processEngine" factory-method="getManagementService" />
I used this processes.xml located at META-INF\processes.xml but this doesn’t work. I think that configuration from this file is not used.
<?xml version="1.0" encoding="UTF-8" ?>
<process-application
xmlns="http://www.camunda.org/schema/1.0/ProcessApplication"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<process-archive name="workflows">
<process-engine>default</process-engine>
<properties>
<property name="isDeleteUponUndeploy">false</property>
<property name="isScanForProcessDefinitions">true</property>
<property name="isDeployChangedOnly">true</property>
</properties>
</process-archive>
</process-application>
I think you can’t use the configuration property deploymentResources
in case you want to modify the deployment. Instead, make a deployment via Java API. RepositoryService#createDeployment
is the entry point and you can use its methods to configure the deployment as you like. processes.xml
is not needed.
Cheers,
Thorben
1 Like
rudi
July 18, 2017, 2:34pm
3
Thank you thorben, your answer was very helpful.
I extend existing SpringProcessEngineConfiguration to add property deployChangedOnly and override method autoDeployResources.
Here is example of final configuration:
<bean id="processEngineConfiguration" class="com.my.ProcessEngineConfiguration">
<property name="processEngineName" value="default" />
<property name="dataSource" ref="processEngineDS" />
<property name="transactionManager" ref="blTransactionManager" />
<property name="history" value="full" />
<property name="databaseSchemaUpdate" value="noop" />
<property name="deploymentResources" value="classpath*:process/*.bpmn" />
<property name="deployChangedOnly" value="true" />
<property name="authorizationEnabled" value="true" />
<property name="jobExecutorActivate" value="true" />
<property name="jobExecutorDeploymentAware" value="false" />
<property name="idGenerator">
<bean class="org.camunda.bpm.engine.impl.persistence.StrongUuidGenerator" />
</property>
</bean>
<bean id="processEngine" class="org.camunda.bpm.engine.spring.ProcessEngineFactoryBean">
<property name="processEngineConfiguration" ref="processEngineConfiguration" />
</bean>
<bean id="repositoryService" factory-bean="processEngine" factory-method="getRepositoryService" />
<bean id="runtimeService" factory-bean="processEngine" factory-method="getRuntimeService" />
<bean id="taskService" factory-bean="processEngine" factory-method="getTaskService" />
<bean id="historyService" factory-bean="processEngine" factory-method="getHistoryService" />
<bean id="managementService" factory-bean="processEngine" factory-method="getManagementService" />
My SpringProcessEngineConfiguration class:
public class ProcessEngineConfiguration extends SpringProcessEngineConfiguration {
protected boolean deployChangedOnly;
protected void autoDeployResources(ProcessEngine processEngine) {
if (deploymentResources!=null && deploymentResources.length>0) {
RepositoryService repositoryService = processEngine.getRepositoryService();
DeploymentBuilder deploymentBuilder = repositoryService
.createDeployment()
.enableDuplicateFiltering(deployChangedOnly)
.name(deploymentName)
.tenantId(deploymentTenantId);
...
see method SpringProcessEngineConfiguration.autoDeployResources
...
}
public boolean isDeployChangedOnly() {
return deployChangedOnly;
}
public void setDeployChangedOnly(boolean deployChangedOnly) {
this.deployChangedOnly = deployChangedOnly;
}
}
3 Likes
Thanks for posting the solution.