{"record":{"id":"99b102ea32ef7bc5","repo":"flowable/flowable-engine","slug":"schema-version-property-is-not-set","errorCode":null,"errorMessage":"Schema version property is not set","messagePattern":"Schema version property is not set","errorType":"exception","errorClass":"FlowableException","httpStatus":null,"severity":"error","filePath":"modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/db/ServiceSqlScriptBasedDbSchemaManager.java","lineNumber":103,"sourceCode":"        }\n        return feedback;\n    }\n    \n    @Override\n    public void schemaCheckVersion() {\n        String dbVersion = getSchemaVersion();\n        if (!FlowableVersions.CURRENT_VERSION.equals(dbVersion)) {\n            throw new FlowableWrongDbException(FlowableVersions.CURRENT_VERSION, dbVersion);\n        }\n    }\n\n    protected boolean isUpdateNeeded() {\n        return isTablePresent(table);\n    }\n\n    protected String getSchemaVersion() {\n        if (schemaVersionProperty == null) {\n            throw new FlowableException(\"Schema version property is not set\");\n        }\n        String dbVersion = getProperty(schemaVersionProperty);\n        if (dbVersion == null) {\n            return getUpgradeStartVersion();\n        }\n        return dbVersion;\n    }\n    \n    protected String getUpgradeStartVersion() {\n        return \"6.1.2.0\"; // last version before most services were separated. Start upgrading from this point.\n    }\n\n}\n","sourceCodeStart":85,"sourceCodeEnd":117,"githubUrl":"https://github.com/flowable/flowable-engine/blob/d6d39ce1c69ff244f2d9dc6af756a9b95e865586/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/db/ServiceSqlScriptBasedDbSchemaManager.java#L85-L117","documentation":"getSchemaVersion() reads the schema version from the DB property table using a per-service schemaVersionProperty column name (e.g. 'schema.version'). If that property name was never configured on this ServiceSqlScriptBasedDbSchemaManager, it throws FlowableException because it cannot know where to read the version from. This is a misconfiguration of the schema manager itself, not a DB problem.","triggerScenarios":"Any call to getSchemaVersion() (via dbVersion/schemaCheckVersion/schemaUpdate) when the schemaVersionProperty field is null — typically because a custom subclass or manually constructed ServiceSqlScriptBasedDbSchemaManager was created without calling setSchemaVersionProperty.","commonSituations":"Custom engine configuration wiring the schema manager by hand and omitting the schema-version property; copying a partial configuration from an older Flowable setup; subclassing the manager for a custom service module.","solutions":["Set the schema version property on the manager configuration (e.g. setSchemaVersionProperty(\"schema.version\") or the equivalent XML/config property)","Use Flowable's standard ProcessEngineConfiguration instead of manually constructing the schema manager so defaults are applied","Check that your custom subclass constructor invokes the parent setup that initializes schemaVersionProperty"],"exampleFix":"// before\nServiceSqlScriptBasedDbSchemaManager mgr = new ServiceSqlScriptBasedDbSchemaManager();\nmgr.schemaCheckVersion();\n\n// after\nmgr.setSchemaVersionProperty(\"schema.version\");\nmgr.schemaCheckVersion();","handlingStrategy":"validation","validationCode":"// When constructing a custom schema manager, assert configuration first\nif (mgr.getSchemaVersionProperty() == null) {\n    throw new IllegalStateException(\"schemaVersionProperty must be set before schema operations\");\n}","typeGuard":null,"tryCatchPattern":"try {\n    mgr.schemaCheckVersion();\n} catch (FlowableException e) {\n    if (e.getMessage().contains(\"Schema version property is not set\")) {\n        throw new IllegalStateException(\"Misconfigured schema manager: set schemaVersionProperty\", e);\n    }\n    throw e;\n}","preventionTips":["Prefer standard ProcessEngineConfiguration over hand-built schema managers","Keep custom subclasses calling the parent setup that initializes defaults","Document required constructor/config fields for internal engine wrappers"],"tags":["database","configuration","schema","flowable"],"backgroundTag":"missing-required-config-field","analyzedSha":"d6d39ce1c69ff244f2d9dc6af756a9b95e865586","analyzedAt":"2026-09-11T06:41:19.413Z","contentChangedAt":"2026-09-11T06:41:19.413Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}