{"record":{"id":"6ab87a3d5f8bbd95","repo":"flowable/flowable-engine","slug":"cannot-create-scriptenginefactory","errorCode":null,"errorMessage":"Cannot create ScriptEngineFactory: {}","messagePattern":"Cannot create ScriptEngineFactory: (.+?)","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"modules/flowable-osgi/src/main/java/org/flowable/osgi/Extender.java","lineNumber":404,"sourceCode":"                    if (test.equals(name)) {\n                        ClassLoader old = Thread.currentThread().getContextClassLoader();\n                        ScriptEngine engine;\n                        try {\n                            // JRuby seems to require the correct TCCL to call\n                            // getScriptEngine\n                            Thread.currentThread().setContextClassLoader(factory.getClass().getClassLoader());\n                            engine = factory.getScriptEngine();\n                        } finally {\n                            Thread.currentThread().setContextClassLoader(old);\n                        }\n                        LOGGER.trace(\"Resolved ScriptEngineFactory: {} for expected name: {}\", engine, name);\n                        return engine;\n                    }\n                }\n                LOGGER.debug(\"ScriptEngineFactory: {} does not match expected name: {}\", factory.getEngineName(), name);\n                return null;\n            } catch (Exception e) {\n                LOGGER.warn(\"Cannot create ScriptEngineFactory: {}\", e.getClass().getName(), e);\n                return null;\n            }\n        }\n\n        @Override\n        public String toString() {\n            return \"OSGi script engine resolver for \" + bundle.getSymbolicName();\n        }\n    }\n\n}\n","sourceCodeStart":386,"sourceCodeEnd":416,"githubUrl":"https://github.com/flowable/flowable-engine/blob/d6d39ce1c69ff244f2d9dc6af756a9b95e865586/modules/flowable-osgi/src/main/java/org/flowable/osgi/Extender.java#L386-L416","documentation":"During script engine resolution, the OSGi Extender instantiates discovered ScriptEngineFactory implementations to check their engine name. Any exception during factory instantiation (missing classes, wiring failures, factory bugs) results in this warning and the engine is skipped for that lookup.","triggerScenarios":"resolveScriptEngine (called from resolvedEngine) calls factory.getEngineName() after instantiating a ScriptEngineFactory whose class throws on construction or whose Class.forName fails with a non-Error exception.","commonSituations":"A scripting bundle (e.g. Jython, Groovy, Nashorn) is present but its engine factory cannot be wired in OSGi due to missing imported packages or a broken fragment; script engine bundle started in wrong order.","solutions":["Read the attached exception '{}' argument in the log to see the factory class and root cause.","Install/start the scripting bundle that provides the engine (e.g. org.flowable.osgi-compatible groovy/jython bundles) and its dependencies.","Verify the engine bundle's OSGi imports resolve: bundle:diag <id> in Karaf.","Ensure the script engine factory class name listed in META-INF/services/javax.script.ScriptEngineFactory is correct."],"exampleFix":"// before: engine bundle missing transitive deps\nosgi> start org.python.jython // ClassCastException / LinkageError\n// after\nosgi> feature:install jython-scripting\nosgi> start flowable-osgi-extender","handlingStrategy":"fallback","validationCode":"for (Provider<ScriptEngineFactory> p : ServiceLoader.load(ScriptEngineFactory.class)) {\n    try { p.get(); } catch (Throwable t) {\n        logger.warn(\"Unusable script engine factory: {}\", p.type().getName());\n    }\n}","typeGuard":"boolean engineUsable(ScriptEngineFactory f) {\n    try { return f.getEngineName() != null; }\n    catch (Throwable t) { return false; }\n}","tryCatchPattern":null,"preventionTips":["Install all scripting bundles and their transitive dependencies before starting the extender.","Run bundle:diag to verify OSGi import resolution for engine bundles.","Verify META-INF/services/javax.script.ScriptEngineFactory entries point to valid classes."],"tags":["osgi","scripting","script-engine","reflection"],"backgroundTag":"class-not-found","analyzedSha":"d6d39ce1c69ff244f2d9dc6af756a9b95e865586","analyzedAt":"2026-09-11T06:41:19.413Z","contentChangedAt":"2026-09-11T06:41:19.413Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}