pentaho/pentaho-kettle · critical · IllegalStateException

Unable to get list of instantiated value meta plugin classes

Error message

Unable to get list of instantiated value meta plugin classes

What it means

Database.initValueMetaPluginClasses is a static initializer that loads all ValueMeta plugin classes via ValueMetaFactory.getValueMetaPluginClasses(). If that call throws any exception, the failure is wrapped in an IllegalStateException, aborting Database class initialization. Because it runs during class init, it typically surfaces as a Cause in an ExceptionInInitializerError.

Solutions

  1. Inspect the cause (getCause()) of the IllegalStateException/ExceptionInInitializerError to find the underlying plugin load failure
  2. Verify the Pentaho plugin directories exist and contain valid value-meta plugin jars and plugin.xml files
  3. Fix classpath: remove duplicate/conflicting Kettle jars and ensure all core plugins are packaged
  4. Check ValueMetaFactory/PluginRegistry initialization logs for earlier warnings
Defensive patterns

Strategy: validation

Validate before calling

try {
  Class.forName( "org.pentaho.di.core.database.Database" );
} catch ( Throwable t ) {
  // fail fast: report missing/broken plugin environment before using Database
}

Try / catch

try {
  new Database( loggingObject, dbMeta );
} catch ( ExceptionInInitializerError e ) {
  log.error( "Plugin init failed: " + e.getCause(), e );
}

Prevention

When it happens

Trigger: First use of the Database class when ValueMetaFactory cannot build the list of value meta plugin classes — e.g. the plugin registry fails to scan plugins, a plugin jar is corrupt/missing, or plugin type declarations are broken.

Common situations: Broken or incomplete Pentaho plugin directory, classpath missing kettle value-meta plugins, plugin.xml descriptor errors, or duplicated/conflicting plugin jars on the classpath in embedded deployments.

Related errors


AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13). Data as JSON: /api/errors/6fbd6b2a63ae6c93. Report an issue: GitHub.

Appendix: source

Thrown at core/src/main/java/org/pentaho/di/core/database/Database.java:264

        @Override public void pluginRemoved( Object serviceObject ) {
          initValueMetaPluginClasses();
        }

        @Override public void pluginChanged( Object serviceObject ) {
          initValueMetaPluginClasses();
        }
      }
    );
  }

  private static void initValueMetaPluginClasses() {
    try {
      valueMetaPluginClasses = ValueMetaFactory.getValueMetaPluginClasses();
      // Reverse the sort list
      valueMetaPluginClasses.sort( ( o1, o2 ) -> ( Integer.compare( o1.getType(), o2.getType() ) ) * -1 );
    } catch ( Exception e ) {
      throw new IllegalStateException( "Unable to get list of instantiated value meta plugin classes", e );
    }
  }

  /**
   * Construct a new Database Connection
   *
   * @param databaseMeta The Database Connection Info to construct the connection with.
   * @deprecated Please specify the parent object so that we can see which object is initiating a database connection
   */
  @Deprecated
  public Database( DatabaseMeta databaseMeta ) {
    this.parentLoggingObject = null;
    this.databaseMeta = databaseMeta;
    shareVariablesWith( databaseMeta );

    // In this case we don't have the parent object, so we don't know which
    // object makes the connection.
    // We also don't know what log level to attach to it, so we have to stick to

View on GitHub (pinned to f3058517a1)