Edstem engaged with one of their UK clients to migrate their production workflow systems from Alfresco Enterprise Activiti to an Open Source BPMN solution to help reduce their operational cost while at the same time ensuring their production workflow systems functioned smoothly.
The Community edition of Camunda was chosen as the preferred solution for the following reasons :
- Camunda has been forked from Activiti, so there were a lot of similarities that made the transition easy.
- Most of the required features were available in the Camunda Community edition.
- APIs were available to support custom implementations of certain features like LDAP integration etc.
- Good and active community support is available for Camunda.
The migration project involved more than 200 BPMN models, Decision Tables and User Tasks in less than 3 months along with the Dockerization of Camunda deployment. Some of the challenges identified as part of the migration were as follows.
- Conversion of User Task Forms
- Support for uploading files up to 1G size to S3 bucket
- LDAP Integration with offline support
- Plugin support for showing completed User Tasks which was not available in Camunda Community Edition The volume of effort required for model conversion, the timeline to finish this, and the unknowns after the initial analysis made the project very challenging.
The Overview Solution
- Process Diagrams - From the Activiti app the processes were exported as XML files. This was used by the Camunda modeler to create the BPMN files required for Camunda.
- Service Tasks – The java classes were modified to extend JavaDelegate. Process instance information such as process variables and other information can be accessed and manipulated through the DelegateExecution interface instead of ActivitiExecution.
- User Task Forms – From the form builder in Activiti the forms were exported as JSON. We developed a script to convert these JSON forms to HTML files which were embedded in BPMN models.
- Decision Tables – From the Activiti app the decision tables were exported as XML files. This was used by the Camunda modeler to create the DMN files.
- LDAP Integration – The IdentityService provided by Camunda requires the LDAP to be online to work, however, the LDAP in the client’s environment can occasionally go offline and that was a challenge. To overcome this, we wrote a custom LDAP Service Provider in Camunda which can cache the user and group details from LDAP in a local database.
- Upload support for 1G files – The default upload option available in Camunda uses base64 to save data and was not an efficient mechanism to upload files. So, we created a separate endpoint using spring which uploads the file making use of multi-part form and this endpoint saves the data to AWS S3 and sets a variable in the embedded form with the S3 link.
- Plugin to show completed User Tasks – Camunda Task List Plugins was used to query the completed user tasks and display the results accordingly.