{"record":{"id":"fbe42319cbd9dd90","repo":"pinpoint-apm/pinpoint","slug":"factoryname-not-found","errorCode":null,"errorMessage":"${factoryName} not found","messagePattern":"(.+?) not found","errorType":"exception","errorClass":"IllegalStateException","httpStatus":null,"severity":"error","filePath":"agent-module/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/javamodule/JavaModuleFactoryFinder.java","lineNumber":50,"sourceCode":"\n    public static JavaModuleFactory lookup(Instrumentation instrumentation) {\n        Objects.requireNonNull(instrumentation, \"instrumentation\");\n\n        final Class<JavaModuleFactory> javaModuleFactory = getJavaModuleFactory();\n        try {\n            Constructor<JavaModuleFactory> constructor = javaModuleFactory.getDeclaredConstructor(Instrumentation.class);\n            return constructor.newInstance(instrumentation);\n        } catch (ReflectiveOperationException e) {\n            throw new IllegalStateException(\"JavaModuleFactory() invoke fail Caused by:\" + e.getMessage(), e);\n        }\n    }\n\n    private static Class<JavaModuleFactory> getJavaModuleFactory() {\n        final String factoryName = \"com.navercorp.pinpoint.bootstrap.java9.module.DefaultJavaModuleFactory\";\n        try {\n            return (Class<JavaModuleFactory>) Class.forName(factoryName, false, JavaModule.class.getClassLoader());\n        } catch (ClassNotFoundException e) {\n            throw new IllegalStateException(factoryName + \" not found\");\n        }\n    }\n}\n","sourceCodeStart":32,"sourceCodeEnd":54,"githubUrl":"https://github.com/pinpoint-apm/pinpoint/blob/744c3d3075e595656abb1ae331ad2c0e4c9eb996/agent-module/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/javamodule/JavaModuleFactoryFinder.java#L32-L54","documentation":"getJavaModuleFactory() loads the Java-9 module factory class by name through Class.forName. If the class is absent from the classloader visible to JavaModule, it throws IllegalStateException('<factoryName> not found'). This guards the Java 9+ module-handling path that requires DefaultJavaModuleFactory.","triggerScenarios":"Calling javaModuleFactory() (which calls getJavaModuleFactory) on JDK 9+ when com.navercorp.pinpoint.bootstrap.java9.module.DefaultJavaModuleFactory is not loadable from JavaModule.class.getClassLoader() — typically because the bootstrap jar containing it is missing or stripped.","commonSituations":"Deploying only the profiler jar without the full agent distribution, manually assembling the agent classpath and omitting bootstrap classes, or using a trimmed/slim Docker image that excludes Java 9 module-support classes.","solutions":["Deploy the complete, unmodified Pinpoint agent distribution (bootstrap jar includes DefaultJavaModuleFactory)","Verify with: unzip -l pinpoint-bootstrap.jar | grep DefaultJavaModuleFactory","If on JDK 8 where module handling is unnecessary, confirm the agent isn't wrongly taking the Java 9+ code path","Re-download the matching Pinpoint agent release instead of hand-building a subset"],"exampleFix":null,"handlingStrategy":"fallback","validationCode":"try {\n    Class.forName(\"com.navercorp.pinpoint.bootstrap.java9.module.DefaultJavaModuleFactory\", false, JavaModule.class.getClassLoader());\n} catch (ClassNotFoundException e) {\n    // skip Java9 module wrapping\n}","typeGuard":"boolean hasModuleFactory() {\n    try { Class.forName(\"com.navercorp.pinpoint.bootstrap.java9.module.DefaultJavaModuleFactory\", false, JavaModule.class.getClassLoader()); return true; }\n    catch (ClassNotFoundException e) { return false; }\n}","tryCatchPattern":null,"preventionTips":["Deploy the unmodified full agent distribution","Check jar contents for the java9 module classes before rollout","On JDK 8, ensure the Java 9+ code path is not invoked"],"tags":["reflection","java9","classloader","missing-class"],"backgroundTag":"class-not-found","analyzedSha":"744c3d3075e595656abb1ae331ad2c0e4c9eb996","analyzedAt":"2026-09-07T18:48:45.289Z","contentChangedAt":"2026-09-07T18:48:45.289Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}