Release containing bug fixes and improvements. Includes an important bug fix for a concurrency bug caused when deleting a variable (task or process variable) and attempting to save the delete variable event.
- Introduction of 2 new engines, a DMN (Decision Model Notation) Rule Engine and a Form Engine. The DMN Engine allows you to create decision tables and get an outcome based on the input values and the rules defined in the decision table. These decision tables can be invoked from a decision rule task in a BPMN definition, but also independently of a process instance. The Form Engine centralizes the form logic that was introduced with the new Activiti 6 UI. Forms can be deployed with BPMN process definitions but also seperately. A start or task form references a form definition defined in a JSON format with a logical key. The Activiti 6 UI includes the new Rule Engine and Form Engine by default.
- Ad-hoc sub process support was added, a blog post is available here.
- The job executor has been refactored. In Activiti 6 there's only one job executor (based on the async executor from Activiti 5. Jobs are now divided into 4 different tables: executable jobs, timer jobs, suspended jobs and deadletter jobs. All jobs in the executable jobs table can be executed as soon as possible. Timer jobs are now stored in a separate table and a thread will look for timer jobs that are due and then the timer jobs due will be moved to the executable jobs table. When a process instance is suspended, the suspended jobs will be moved to the suspended jobs table. And when the retries of a job have been exhausted, the job will be moved to the deadletter jobs table. This refactoring was done mainly to improve the job queries, that were very complicated because it had to take into account due timer jobs, suspended jobs and deadletter jobs. The job query to look for executable jobs is now a lot less complex, because every job in the executable jobs table needs to execute.
- Implementation of a message queue based Activiti job executor, you can read more about it here
- Introduction of transient variables. Transient variables won't be persisted in the Activiti variable tables, but are still available on the execution for the duration of a single transaction. Transient variables can for example be used to store a REST response that is only needed to create a request to another REST service, or to use a Java service task result in the next Java service task without it getting persisted.
- Introduction of two new experimental performance flags: 'eager execution tree fetching' will fetch a complete execution tree while fetching a part of a process instance, as typically following parts of the tree are needed when continuing a process instance. 'Execution relationship counting' keeps a count of various related objects to an execution and thus removes the need for explicit checking and deleting related objects when an execution is removed (which happens frequently). First performance benchmarks using these flags gave some great results. The flags have been tested against the Activiti test suite and all test pass, but the flags are currently not enabled by default.
- Introduction of transaction dependent listeners. You can now register a listener which will be executed before commit, after commit or on rollback. The transaction dependent listener is an addition to the already existing execution, task and event listeners and provides more ways to listen to the execution of a process instance in the Activiti Engine.
- A simple DMN editor has been added to the Activiti 6 UI app.
- Added terminate multi instance end behaviour: this allows to use an end event that will end all instances of a multi instance.
- Optimize the compensation activity behaviour and added support for the use of subprocesses as compensation activity.
- Expose start time and start user id on runtime process instance and executions. Expose claim time on runtime task. Before: only on historical counterpart.
- Fix the use of database schema's (oracle/postgres) properly (workarounds were needed before).
- Fix historical data capturing (vs Beta2 especially, but also against certain v5 cases).
- Lots of refactoring in the Activiti 6 UI app, for example app definitions are now deployed as normal Activiti deployments without separate app definition tables.
- Lots of improvements to Activiti 6 QA.
- Various and many small bugfixes all around.
- The Activiti 6 Engine is now considered feature complete for a final version 6 release and mainly needs community testing and bug fixes when issues are found.
- A first refactor of the userguide has been completed for version 6, but there's still work left.
- A lot of changes were made to the Activiti 6 UI app and we expect there will still be breaking changes before the final version 6 release.
- The DMN and Form Engine are feature complete but there can still be some changes before the final version 6.
- An Admin application has been added to the Activiti Github project but is not yet included in the Beta 3 release. The Admin application will provide query capabilities on deployments, process instances, tasks, jobs, forms and decision tables. For the final version 6 release the Admin application will be added to the release.
This release contains some quite important bugfixes, more specifically
- It fixes some cases where the end time was not set for activities in a process definition under certain conditions.
- A concurrency bug was discovered when using delegateExpressions together with field injection. Make sure to read the updated documentation section on the use of 'delegateExpression'.
- support for multiple start timer/signal events
This is a bugfix release:
- Security fix around using commons-collection (ddf9b51)
- Upgrade to MyBatis 3.3.0
- Enhancing AsyncExecutor for high load scenarios (especially when the job queue is full)
- A few small bug fixes
- We introduced a new service DynamicBpmnService that allows you to change a defined set of properties of a process definition without needing to redeploy http://bpmn20inaction.blogspot.com/2015/10/adding-dynamic-behaviour-to-activiti.html
- Improved support for the terminate end event. According to the BPMN spec a terminate end event should only terminate the current scope. So in case of a multi instance sub process, a terminate end event inside that multi instance sub process should only kill a single instance and the rest of the instances (of the multi instance) will continue. And in case a call activity kicks off a sub process, a terminate end event in the sub process will only kill the sub process instance, and the parent process will continue. We've added a new attribute on the terminate end event (activiti:terminateAll) that allows you to terminate all parent scopes if the value is set to true. By default only the current scope is killed.
- ACT-4072 was fixed, a repeating timer (time cycle) now works according to the defined duration values
- Various bug fixes