flowable/flowable-engine · critical · FlowableException

no flowable tables in db. set <property…

Error message

no flowable tables in db. set <property name="databaseSchemaUpdate" to value="true" or value="create-drop" (use create-drop for testing only!) in bean processEngineConfiguration in flowable.cfg.xml for automatic schema creation

What it means

Thrown when schemaCheckVersion catches an exception that the engine classifies as 'missing tables' (isMissingTablesException), i.e. the database contains no Flowable tables at all. The message instructs the developer to enable automatic schema creation via databaseSchemaUpdate because the DB was never initialized.

Solutions

  1. Set databaseSchemaUpdate=true (or create-drop for tests) and restart so Flowable creates its schema.
  2. Or manually run the create DDL scripts for your database and engine version, keeping databaseSchemaUpdate=false afterwards.
  3. Verify the JDBC user has CREATE TABLE privileges so automatic creation can succeed.

Example fix

// before
<property name="databaseSchemaUpdate" value="false"/> <!-- empty DB -->
// after
<property name="databaseSchemaUpdate" value="true"/> <!-- first boot creates schema; optionally revert after -->
Defensive patterns

Strategy: validation

Validate before calling

try (Connection c = ds.getConnection()) { ResultSet rs = c.getMetaData().getTables(null, null, "ACT_GE_PROPERTY", null); if (!rs.next()) { cfg.setDatabaseSchemaUpdate("true"); } }

Try / catch

try { engine = cfg.buildProcessEngine(); } catch (FlowableException e) { if (e.getMessage().startsWith("no flowable tables in db")) { /* enable schema creation */ } }

Prevention

When it happens

Trigger: Starting the engine with databaseSchemaUpdate=false against an empty/fresh database; querying Flowable tables before schema creation ran; pointing at a schema in another database where no tables exist.

Common situations: First deployment against a brand-new database; CI running tests with validate mode; connecting to a fresh RDS/cloud DB instance without running the DDL.

Understand the failure class

Background: Schema validation failed / invalid input schema: payload rejected because its shape doesn't match the expected schema — this error's family across 28 libraries.

Related errors


AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11). Data as JSON: /api/errors/0569e06e56a33343. Report an issue: GitHub.

Appendix: source

Thrown at modules/flowable-engine/src/main/java/org/flowable/engine/impl/db/ProcessDbSchemaManager.java:58

            if (!ProcessEngine.VERSION.equals(dbVersion)) {
                throw new FlowableWrongDbException(ProcessEngine.VERSION, dbVersion);
            }

            String errorMessage = null;
            if (!isEngineTablePresent()) {
                errorMessage = addMissingComponent(errorMessage, "engine");
            }
            if (CommandContextUtil.getDbSqlSession().getDbSqlSessionFactory().isDbHistoryUsed() && !isHistoryTablePresent()) {
                errorMessage = addMissingComponent(errorMessage, "history");
            }

            if (errorMessage != null) {
                throw new FlowableException("Flowable database problem: " + errorMessage);
            }

        } catch (Exception e) {
            if (isMissingTablesException(e)) {
                throw new FlowableException(
                        "no flowable tables in db. set <property name=\"databaseSchemaUpdate\" to value=\"true\" or value=\"create-drop\" (use create-drop for testing only!) in bean processEngineConfiguration in flowable.cfg.xml for automatic schema creation",
                        e);
            } else {
                if (e instanceof RuntimeException) {
                    throw (RuntimeException) e;
                } else {
                    throw new FlowableException("couldn't get db schema version", e);
                }
            }
        }

        logger.debug("flowable db schema check successful");
    }

    protected String addMissingComponent(String missingComponents, String component) {
        if (missingComponents == null) {
            return "Tables missing for component(s) " + component;
        }

View on GitHub (pinned to d6d39ce1c6)