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
- Select/configure the real database dialect for the connection instead of ConnectionManagementServiceMeta
- If you intended a new dialect, implement getFieldDefinition (and all other DatabaseMeta methods) in a subclass with a distinct name
- 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
- Never instantiate ConnectionManagementServiceMeta directly; it is a marker only
- Verify the connection's database type resolves to a concrete dialect before DDL operations
- If subclassing the placeholder as a template, override every throwing method
- Add an assertion/config check that the active dialect is not the placeholder
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 );
}
@OverrideView on GitHub (pinned to f3058517a1)