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

  1. Use a database supported by your Flowable version (H2, MySQL, MariaDB, PostgreSQL, Oracle, SQL Server, DB2)
  2. Upgrade Flowable if your database is supported only in newer versions
  3. Check the JDBC driver is correct so DatabaseMetaData.getDatabaseProductName returns a standard name
  4. 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

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


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)