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
- Set databaseSchemaUpdate=true (or create-drop for tests) and restart so Flowable creates its schema.
- Or manually run the create DDL scripts for your database and engine version, keeping databaseSchemaUpdate=false afterwards.
- 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
- On a fresh DB, boot once with databaseSchemaUpdate=true or run the create DDL first
- Ensure the DB user has CREATE TABLE privileges
- Keep 'create-drop' confined to tests
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
- Activiti database problem
- Could not set database schema on connection
- Could not update Flowable database schema: unknown version…
- couldn't check if tables are already present using metadata
- couldn't get db schema version
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)