{"record":{"id":"9db86f693545d200","repo":"flowable/flowable-engine","slug":"unsupported-process-engine-configuration","errorCode":null,"errorMessage":"Unsupported process engine configuration","messagePattern":"Unsupported process engine configuration","errorType":"exception","errorClass":"ActivitiException","httpStatus":null,"severity":"error","filePath":"modules/flowable5-compatibility/src/main/java/org/flowable/compatibility/DefaultProcessEngineFactory.java","lineNumber":47,"sourceCode":"import org.flowable.common.engine.impl.EngineDeployer;\nimport org.flowable.common.engine.impl.history.HistoryLevel;\nimport org.flowable.engine.impl.cfg.ProcessEngineConfigurationImpl;\nimport org.flowable.engine.impl.cfg.StandaloneProcessEngineConfiguration;\nimport org.flowable.engine.impl.rules.RulesDeployer;\n\npublic class DefaultProcessEngineFactory {\n\n    /**\n     * Takes in an Flowable 6 process engine config, gives back an Flowable 5 Process engine.\n     */\n    public ProcessEngine buildProcessEngine(ProcessEngineConfigurationImpl flowable6Configuration) {\n        org.activiti.engine.impl.cfg.ProcessEngineConfigurationImpl flowable5Configuration = null;\n        if (flowable6Configuration instanceof StandaloneProcessEngineConfiguration) {\n            flowable5Configuration = new org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration();\n            copyConfigItems(flowable6Configuration, flowable5Configuration);\n            return flowable5Configuration.buildProcessEngine();\n        } else {\n            throw new ActivitiException(\"Unsupported process engine configuration\");\n        }\n    }\n\n    protected void copyConfigItems(ProcessEngineConfigurationImpl flowable6Configuration, org.activiti.engine.impl.cfg.ProcessEngineConfigurationImpl flowable5Configuration) {\n        flowable5Configuration.setFlowable5CompatibilityHandler(flowable6Configuration.getFlowable5CompatibilityHandler());\n\n        copyJdbcConfig(flowable6Configuration, flowable5Configuration);\n        copyHistoryConfig(flowable6Configuration, flowable5Configuration);\n        copyMailConfig(flowable6Configuration, flowable5Configuration);\n        copyDiagramConfig(flowable6Configuration, flowable5Configuration);\n        copyAsyncExecutorConfig(flowable6Configuration, flowable5Configuration);\n        copyJpaConfig(flowable6Configuration, flowable5Configuration);\n        copyBeans(flowable6Configuration, flowable5Configuration);\n        copyCaches(flowable6Configuration, flowable5Configuration);\n        copyActivityBehaviorFactory(flowable6Configuration, flowable5Configuration);\n        copyExpressionManager(flowable6Configuration, flowable5Configuration);\n        copyListenerFactory(flowable6Configuration, flowable5Configuration);\n        convertParseHandlers(flowable6Configuration, flowable5Configuration);","sourceCodeStart":29,"sourceCodeEnd":65,"githubUrl":"https://github.com/flowable/flowable-engine/blob/d6d39ce1c69ff244f2d9dc6af756a9b95e865586/modules/flowable5-compatibility/src/main/java/org/flowable/compatibility/DefaultProcessEngineFactory.java#L29-L65","documentation":"DefaultProcessEngineFactory.buildProcessEngine only knows how to build an Activiti 5 engine from a Flowable 6 StandaloneProcessEngineConfiguration; any other ProcessEngineConfigurationImpl subtype is rejected with this ActivitiException. It is a configuration-type guard in the flowable5-compatibility bridge.","triggerScenarios":"Calling DefaultProcessEngineFactory.buildProcessEngine(config) with a config that is not an instance of StandaloneProcessEngineConfiguration (e.g. SpringProcessEngineConfiguration, custom subclass).","commonSituations":"Embedding the Activiti 5 compatibility engine inside a Spring Boot app using SpringProcessEngineConfiguration; custom configuration classes built via builder patterns.","solutions":["Use StandaloneProcessEngineConfiguration when constructing the engine for the factory","If using Spring, build the engine via the Spring integration path instead of DefaultProcessEngineFactory","Extend/copy the factory to support your configuration type (add copyConfigItems handling for your subclass)"],"exampleFix":"// before\nSpringProcessEngineConfiguration cfg = new SpringProcessEngineConfiguration();\nProcessEngine engine = new DefaultProcessEngineFactory().buildProcessEngine(cfg); // throws\n// after\nStandaloneProcessEngineConfiguration cfg = new StandaloneProcessEngineConfiguration();\ncfg.setJdbcUrl(...);\nProcessEngine engine = new DefaultProcessEngineFactory().buildProcessEngine(cfg);","handlingStrategy":"type-guard","validationCode":"if (!(config instanceof StandaloneProcessEngineConfiguration)) {\n  throw new IllegalArgumentException(\"DefaultProcessEngineFactory requires StandaloneProcessEngineConfiguration\");\n}","typeGuard":"boolean supported(ProcessEngineConfigurationImpl cfg) {\n  return cfg instanceof StandaloneProcessEngineConfiguration;\n}","tryCatchPattern":"try {\n  engine = factory.buildProcessEngine(cfg);\n} catch (ActivitiException e) {\n  if (e.getMessage().contains(\"Unsupported process engine configuration\")) {\n    engine = buildEngineViaSpringPath(cfg);\n  } else throw e;\n}","preventionTips":["Only pass StandaloneProcessEngineConfiguration to DefaultProcessEngineFactory","Use SpringProcessEngineConfiguration with the Spring integration for Spring apps","Review copyConfigItems when adding custom configuration fields"],"tags":["flowable","activiti","configuration","compatibility"],"backgroundTag":"unsupported-operation","analyzedSha":"d6d39ce1c69ff244f2d9dc6af756a9b95e865586","analyzedAt":"2026-09-11T06:41:19.413Z","contentChangedAt":"2026-09-11T06:41:19.413Z","schemaVersion":2},"datasetVersion":"2026-09-18T11:17:12.947Z"}