pinpoint-apm/pinpoint · error · IllegalStateException

${factoryName} not found

Error message

${factoryName} not found

What it means

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.

Source

Thrown at agent-module/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/javamodule/JavaModuleFactoryFinder.java:50

    public static JavaModuleFactory lookup(Instrumentation instrumentation) {
        Objects.requireNonNull(instrumentation, "instrumentation");

        final Class<JavaModuleFactory> javaModuleFactory = getJavaModuleFactory();
        try {
            Constructor<JavaModuleFactory> constructor = javaModuleFactory.getDeclaredConstructor(Instrumentation.class);
            return constructor.newInstance(instrumentation);
        } catch (ReflectiveOperationException e) {
            throw new IllegalStateException("JavaModuleFactory() invoke fail Caused by:" + e.getMessage(), e);
        }
    }

    private static Class<JavaModuleFactory> getJavaModuleFactory() {
        final String factoryName = "com.navercorp.pinpoint.bootstrap.java9.module.DefaultJavaModuleFactory";
        try {
            return (Class<JavaModuleFactory>) Class.forName(factoryName, false, JavaModule.class.getClassLoader());
        } catch (ClassNotFoundException e) {
            throw new IllegalStateException(factoryName + " not found");
        }
    }
}

View on GitHub (pinned to 744c3d3075)

Solutions

  1. Deploy the complete, unmodified Pinpoint agent distribution (bootstrap jar includes DefaultJavaModuleFactory)
  2. Verify with: unzip -l pinpoint-bootstrap.jar | grep DefaultJavaModuleFactory
  3. If on JDK 8 where module handling is unnecessary, confirm the agent isn't wrongly taking the Java 9+ code path
  4. Re-download the matching Pinpoint agent release instead of hand-building a subset
Defensive patterns

Strategy: fallback

Validate before calling

try {
    Class.forName("com.navercorp.pinpoint.bootstrap.java9.module.DefaultJavaModuleFactory", false, JavaModule.class.getClassLoader());
} catch (ClassNotFoundException e) {
    // skip Java9 module wrapping
}

Type guard

boolean hasModuleFactory() {
    try { Class.forName("com.navercorp.pinpoint.bootstrap.java9.module.DefaultJavaModuleFactory", false, JavaModule.class.getClassLoader()); return true; }
    catch (ClassNotFoundException e) { return false; }
}

Prevention

When it happens

Trigger: 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.

Common situations: 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.

Related errors


AI-assisted analysis of pinpoint-apm/pinpoint@744c3d3075 (2026-09-07). Data as JSON: /api/errors/fbe42319cbd9dd90. Report an issue: GitHub.