pentaho/pentaho-kettle · error · NotImplementedException

ConnectionManagementServiceMeta is a placeholder and should…

Error message

ConnectionManagementServiceMeta is a placeholder and should not be used directly.

What it means

ConnectionManagementServiceMeta is a deliberately non-functional placeholder DatabaseMeta implementation; getFieldDefinition always throws NotImplementedException to make accidental use fail fast. It defines no real SQL dialect behavior.

Solutions

  1. Select/configure the real database dialect for the connection instead of ConnectionManagementServiceMeta
  2. If you intended a new dialect, implement getFieldDefinition (and all other DatabaseMeta methods) in a subclass with a distinct name
  3. Check how the DatabaseMeta for this connection is resolved and why the placeholder instance got returned

Example fix

// before
DatabaseMeta meta = new DatabaseMeta(); meta.setDatabaseInterface( new ConnectionManagementServiceMeta() );
// after
DatabaseMeta meta = new DatabaseMeta(); meta.setDatabaseInterface( new PostgresDatabaseMeta() );
Defensive patterns

Strategy: type-guard

Validate before calling

// Reject the placeholder before generating field DDL
if ( dialect instanceof ConnectionManagementServiceMeta ) {
  throw new IllegalStateException( "Placeholder dialect selected; configure a real database type" );
}

Type guard

boolean isPlaceholderDialect( DatabaseInterface di ) { return di instanceof ConnectionManagementServiceMeta; }

Try / catch

try { String ddl = dialect.getFieldDefinition( v, tk, pk, false, true, true ); } catch ( NotImplementedException e ) { log.error( "Placeholder dialect in use; fix database type selection", e ); throw new IllegalStateException( e ); }

Prevention

When it happens

Trigger: Any code path invokes getFieldDefinition(ValueMetaInterface, tk, pk, useAutoinc, addFieldName, addCr) on a ConnectionManagementServiceMeta instance — e.g. it was registered as or substituted for the actual database dialect when generating field DDL.

Common situations: Plugin/dialect misconfiguration that selects the placeholder meta class as the active database; copy-pasting this placeholder as a template for a new dialect without implementing methods; reflective lookup returning the placeholder.

Related errors


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

Appendix: source

Thrown at core/src/main/java/org/pentaho/di/core/database/ConnectionManagementServiceMeta.java:34

import org.apache.commons.lang3.NotImplementedException;

/**
 * Acts as a placeholder for the Connection Management Service connection, which is not a real database, but needs to be
 * acting as one in the internal flow.
 * <p>
 * Internally contains an instance of a real database and proxies all calls to it after it's data is fetched from the
 * connection management service.
 */
public class ConnectionManagementServiceMeta extends BaseDatabaseMeta implements DatabaseInterface {

  private static final String NOT_IMPLEMENTED_MESSAGE =
    "ConnectionManagementServiceMeta is a placeholder and should not be used directly.";

  @Override
  public String getFieldDefinition( ValueMetaInterface v, String tk, String pk, boolean useAutoinc,
                                    boolean addFieldName, boolean addCr ) {
    throw new NotImplementedException( NOT_IMPLEMENTED_MESSAGE );
  }

  @Override
  public int[] getAccessTypeList() {
    return new int[ 0 ];
  }

  @Override
  public String getDriverClass() {
    throw new NotImplementedException( NOT_IMPLEMENTED_MESSAGE );
  }

  @Override
  public String getURL( String hostname, String port, String databaseName ) throws KettleDatabaseException {
    throw new NotImplementedException( NOT_IMPLEMENTED_MESSAGE );
  }

  @Override

View on GitHub (pinned to f3058517a1)