CMMN Deprecation & Removal

CMMN support removed in 1.4.0

CMMN support is deprecated as of EximeeBPMS 1.3.0 and will be removed in 1.4.0. This guide helps you detect CMMN usage in your environment and prepares you for a safe upgrade. It is not a guide to rewriting CMMN models — see Mapping CMMN patterns to BPMN for that.

Why CMMN is being removed

Adoption data shows marginal usage of the CMMN notation. EximeeBPMS is concentrating investment on BPMN, Human Workflow, and business orchestration. Case management patterns remain fully supported through BPMN — see the mapping table below.

This change applies to both the Open Source and Enterprise editions at the same time.

1. Detect CMMN usage

Check three categories of data in your database: deployed definitions, active instances, and historic data.

PostgreSQL / Oracle

-- (1) Deployed CMMN definitions
SELECT COUNT(*) AS deployed_case_definitions FROM ACT_RE_CASE_DEF;

-- (2) Active case instances (a row with no PARENT_ID_ is a top-level instance, not a sub-execution)
SELECT COUNT(*) AS active_case_instances
FROM ACT_RU_CASE_EXECUTION
WHERE PARENT_ID_ IS NULL;

-- (3) Historic CMMN data
SELECT COUNT(*) AS historic_case_instances FROM ACT_HI_CASEINST;
SELECT COUNT(*) AS historic_case_activity_instances FROM ACT_HI_CASEACTINST;

Interpreting the results

ResultMeaning
All queries return 0No action needed — the upgrade to 1.4.0 will proceed without issues.
active_case_instances = 0, but historic counts > 0The upgrade will proceed. Historic CMMN data remains untouched in the database (see Fate of historical data).
active_case_instances > 0Action required before upgrading — see Handling active case instances.
deployed_case_definitions > 0, but no instancesDefinitions remain in the database; the engine neither reads nor removes them (see Deployment validation).

Test readiness without waiting for 1.4.0

Set eximeebpms.bpm.cmmn-enabled=false (Spring Boot) or <property name="cmmnEnabled" value="false"/> in your engine’s XML configuration on 1.3.0. The engine then behaves like 1.4.0 — CMMN definitions and instances are ignored by queries and the deployment cache.

2. Handling active case instances

If the query in step 1(2) returned a result greater than 0, finish or close those instances on version 1.3.0 before upgrading:

  • Java API: caseService.withCaseExecution(caseInstanceId).close().execute() (or .complete() / .terminate(), depending on the modeled flow).
  • REST API: POST /case-instance/{id}/close, /complete, or /terminate.

1.4.0 behavior when ACT_RU_CASE_EXECUTION is not empty: the engine performs a fail-fast at startup with a message indicating that active case instances are blocking the upgrade and pointing to this guide. Recognize this message in your runbooks.

3. Fate of historical data

Guarantee: 1.4.0 does not read, modify, or delete CMMN history tables. Schema migration scripts do not touch them.

Tables covered by this guarantee: ACT_HI_CASEINST, ACT_HI_CASEACTINST.

Important consequence: the REST history endpoints for case data are removed in 1.4.0 along with the rest of the CMMN REST API (see Impact on REST clients). Organizations that need access to CMMN history after the upgrade (for example, retention or audit requirements) must export the data beforehand, or query the tables directly with SQL afterward, for example:

SELECT ci.*, aci.CASE_ACT_ID_, aci.CASE_ACT_NAME_, aci.CREATE_TIME_, aci.END_TIME_
FROM ACT_HI_CASEINST ci
LEFT JOIN ACT_HI_CASEACTINST aci ON aci.CASE_INST_ID_ = ci.CASE_INST_ID_
WHERE ci.CLOSE_TIME_ >= :retentionCutoffDate
ORDER BY ci.CASE_INST_ID_, aci.CREATE_TIME_;

An optional, separately distributed cleanup script for CMMN historic data (data removal, not schema removal) will be made available independently — to be run only at your own discretion, after taking a backup.

4. Deployment validation

1.4.0 behavior: deploying a package that contains a .cmmn, .cmmn10.xml, or .cmmn11.xml file results in the whole deployment being explicitly rejected with a clear error — files are never silently skipped.

Audit your deployment artifacts before upgrading — search your repositories and CI/CD pipelines for CMMN files:

grep -rl --include="*.cmmn" --include="*.cmmn10.xml" --include="*.cmmn11.xml" .
find . -iname "*.cmmn" -o -iname "*.cmmn10.xml" -o -iname "*.cmmn11.xml"

Smoke-test your whole environment: setting eximeebpms.bpm.cmmn-enabled=false in 1.3.0 (see step 1) lets you verify deployment behavior before the actual upgrade.

5. Impact on embedded engine code

The following public Java API classes and interfaces are marked @Deprecated as of 1.3.0 and will be removed in 1.4.0. To find usages in your code, search for references to the classes below, or compile with -Xlint:deprecation.

PackageClasses / interfaces
org.eximeebpms.bpm.engineCaseService
org.eximeebpms.bpm.engine.repositoryCaseDefinition, CaseDefinitionQuery
org.eximeebpms.bpm.engine.runtimeCaseInstance, CaseInstanceQuery, CaseInstanceBuilder, CaseExecution, CaseExecutionQuery, CaseExecutionCommandBuilder
org.eximeebpms.bpm.engine.delegateCaseExecutionListener, CaseVariableListener
org.eximeebpms.bpm.engine.exception.cmmnCaseException, CaseDefinitionNotFoundException, CaseExecutionNotFoundException, CaseIllegalStateTransitionException, CmmnModelInstanceNotFoundException
org.eximeebpms.bpm.model.cmmn (module model-api/cmmn-model)CmmnModelInstance

Embedded-engine users who implement CaseExecutionListener / CaseVariableListener, or call CaseService directly, will get compile errors after upgrading to 1.4.0 — removing these references is a prerequisite for the upgrade.

6. Impact on REST clients

The following REST endpoints disappear in 1.4.0 (marked @Deprecated as of 1.3.0, with Deprecation: true and Sunset response headers per RFC 8594):

ResourceBase pathNotes
Case definition/case-definitionplus sub-resources: /case-definition/{id}, /key/{key}, /xml, /diagram, /create, /history-time-to-live
Case instance/case-instanceplus sub-resources: /case-instance/{id}, /complete, /close, /terminate, /variables
Case execution/case-executionplus sub-resources: /case-execution/{id}, /manual-start, /disable, /reenable, /complete, /terminate, /localVariables, /variables
Case instance history/history/case-instance
Case activity instance history/history/case-activity-instance
Case definition history/history/case-definition/{id}/statistics, /history/case-definition/cleanable-case-instance-report

If your client is generated from the published OpenAPI specification, you will not see CMMN there — these endpoints were never part of the public OpenAPI spec. If you call these paths manually or from Javadoc-based documentation, use the list above.

7. Mapping CMMN patterns to BPMN

The table below is a starting point, not a mechanical recipe — CMMN patterns do not map 1:1 onto BPMN.

CMMN patternBPMN equivalent
Human task in a caseUser task, or an ad-hoc subprocess containing a single user task
Sentry / entry-exit criteriaConditional events + event subprocess
Discretionary itemsDynamically activated tasks inside an ad-hoc subprocess
MilestonesIntermediate events, or explicit process state (status variable + gateway)
Case plan model (top-level container)Main process, or a top-level ad-hoc subprocess

8. Feedback channel

If you have questions about migrating your specific CMMN use case, reach out via GitHub Discussions / the issue tracker before planning your 1.4.0 upgrade — every report of production CMMN usage will be reviewed individually.

On this page