flowable/flowable-engine · critical · FlowableException
couldn't deduct database type from database product name
Error message
couldn't deduct database type from database product name '${databaseProductName}' What it means
DbUtil.determineDatabaseType inspects the JDBC database product name and maps it to a Flowable database type. If the product name has no entry in the databaseTypeMappings properties, it throws FlowableException because Flowable does not support that database.
Solutions
- Use a database supported by your Flowable version (H2, MySQL, MariaDB, PostgreSQL, Oracle, SQL Server, DB2)
- Upgrade Flowable if your database is supported only in newer versions
- Check the JDBC driver is correct so DatabaseMetaData.getDatabaseProductName returns a standard name
- Extend databaseTypeMappings if you must add a custom mapping (advanced)
Example fix
// before (flowable.cfg) jdbcUrl=jdbc:sqlite:app.db // after jdbcUrl=jdbc:h2:~/flowable-db;AUTO_SERVER=TRUE
Defensive patterns
Strategy: try-catch
Validate before calling
try (Connection c = dataSource.getConnection()) {
String product = c.getMetaData().getDatabaseProductName();
Set<String> supported = Set.of("H2", "MySQL", "MariaDB", "PostgreSQL", "Oracle", "Microsoft SQL Server", "DB2");
if (supported.stream().noneMatch(product::contains)) {
logger.error("Unsupported database product: {}", product);
}
} Try / catch
try {
engineConfig.buildEngine();
} catch (FlowableException e) {
if (e.getMessage().startsWith("couldn't deduct database type")) {
logger.error("Unsupported database: {}", e.getMessage());
}
} Prevention
- Verify your database is on the supported list for your Flowable version
- Use the vendor's official JDBC driver so getDatabaseProductName is standard
- Pin supported database versions in deployment docs
When it happens
Trigger: Pointing the Flowable engine at an unsupported database (or a driver reporting an unusual/unknown product name), e.g. a new fork, embedded DB, or proxy whose product name differs from the standard.
Common situations: Connecting to unsupported DBs like SAP HANA variants, CockroachDB, or a driver misreporting productName; typo in jdbc url so an unexpected driver/database is used; Flowable version predating support for your database.
Related errors
- Cannot set tenant context to null
- couldn't get db schema version
- couldn't initialize process engine from spring…
- Error adding model editor source extra
- Error adding model editor source extra
AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11).
Data as JSON: /api/errors/61a5078462a8ead1.
Report an issue: GitHub.
Appendix: source
Thrown at modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/util/DbUtil.java:111
// CRDB does not expose the version through the jdbc driver, so we need to fetch it through version().
if (PRODUCT_NAME_POSTGRES.equalsIgnoreCase(databaseProductName)) {
try (PreparedStatement preparedStatement = connection.prepareStatement("select version() as version;");
ResultSet resultSet = preparedStatement.executeQuery()) {
String version = null;
if (resultSet.next()) {
version = resultSet.getString("version");
}
if (StringUtils.isNotEmpty(version) && version.toLowerCase().startsWith(PRODUCT_NAME_CRDB.toLowerCase())) {
databaseProductName = PRODUCT_NAME_CRDB;
logger.info("CockroachDB version '{}' detected", version);
}
}
}
databaseType = databaseTypeMappings.getProperty(databaseProductName);
if (databaseType == null) {
throw new FlowableException("couldn't deduct database type from database product name '" + databaseProductName + "'");
}
logger.debug("using database type: {}", databaseType);
} catch (SQLException e) {
throw new RuntimeException("Exception while initializing Database connection", e);
} finally {
try {
if (connection != null) {
connection.close();
}
} catch (SQLException e) {
logger.error("Exception while closing the Database connection", e);
}
}
return databaseType;
}
View on GitHub (pinned to d6d39ce1c6)