flowable/flowable-engine · critical · FlowableException

no flowable tables in db. set <property name="databaseSchema

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 processEngineConfig

What it means

Wrapped error thrown when the IDM schema version check fails because the underlying JDBC interaction reports missing Flowable tables. It adds remediation guidance: enable automatic schema creation via databaseSchemaUpdate. The original exception is attached as the cause.

Source

Thrown at modules/flowable-idm-engine/src/main/java/org/flowable/idm/engine/impl/db/IdmDbSchemaManager.java:89

   public void schemaCheckVersion() {
       try {
           String dbVersion = getSchemaVersion();
           if (!IdmEngine.VERSION.equals(dbVersion)) {
               throw new FlowableWrongDbException(IdmEngine.VERSION, dbVersion);
           }

           String errorMessage = null;
           if (!isTablePresent(IDM_PROPERTY_TABLE)) {
               errorMessage = addMissingComponent(errorMessage, "engine");
           }

           if (errorMessage != null) {
               throw new FlowableException("Flowable IDM 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 idm 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)

Solutions

  1. Set databaseSchemaUpdate to true (or create-drop for test environments) so Flowable creates the tables.
  2. Run the IDM SQL create scripts for your DB vendor manually.
  3. Confirm the JDBC URL points to the correct database/catalog containing the Flowable tables.
  4. Inspect the cause exception to rule out permissions or connectivity issues rather than truly missing tables.

Example fix

// before
<property name="databaseSchemaUpdate" value="false" />
// after
<property name="databaseSchemaUpdate" value="true" />
Defensive patterns

Strategy: validation

Validate before calling

try (Connection c = dataSource.getConnection(); ResultSet rs = c.getMetaData().getTables(null, null, "ACT_ID_PROPERTY", null)) {
  if (!rs.next()) throw new IllegalStateException("Flowable IDM tables missing — enable databaseSchemaUpdate or run create scripts");
}

Try / catch

try {
  idmEngine = config.buildEngine();
} catch (FlowableException e) {
  if (e.getMessage().startsWith("no flowable tables in db")) {
    // apply schema scripts then retry bootstrap
  }
  throw e;
}

Prevention

When it happens

Trigger: Engine bootstrap (schemaCheckVersion) where a SQL exception indicates the ACT_ID_* tables do not exist — typically any query against an empty database.

Common situations: First run against a brand-new empty database with databaseSchemaUpdate=false; pointing the engine at the wrong database/schema; DB migrations never applied.

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/aa4cd79851ca4d02. Report an issue: GitHub.