pentaho/pentaho-kettle · error · KettleException
PanTransformationDelegate.Error.NoExecutionTypeSpecified
Error message
PanTransformationDelegate.Error.NoExecutionTypeSpecified
What it means
executeBasedOnConfiguration throws KettleException when the TransExecutionConfiguration requests neither local, remote, nor clustered execution — none of the executor branches match. Every pan run must set an execution type.
Solutions
- Set an execution mode, e.g. executionConfiguration.setExecutingLocally(true) (or setLocal(true) depending on version)
- For remote runs, call setRemoteServer(new SlaveServer(...)) which also sets the remote flag
- Use TransExecutionConfigurationFactory / delegate's createDefaultConfiguration for a sane default
- Inspect the flags with getRemoteServer()/isExecutingClustered() before calling execute
Example fix
// before TransExecutionConfiguration cfg = new TransExecutionConfiguration(); delegate.executeTransformation(trans, cfg, args); // after TransExecutionConfiguration cfg = new TransExecutionConfiguration(); cfg.setExecutingLocally(true); delegate.executeTransformation(trans, cfg, args);
Defensive patterns
Strategy: validation
Validate before calling
TransExecutionConfiguration cfg = ...;
if (!cfg.isExecutingLocally() && !cfg.isExecutingRemoted() && !cfg.isExecutingClustered()) {
cfg.setExecutingLocally(true); // or fail fast
// or: throw new IllegalStateException("No execution type set on configuration");
} Type guard
static boolean hasExecutionType(TransExecutionConfiguration c) {
return c != null && (c.isExecutingLocally() || c.isExecutingRemoted() || c.isExecutingClustered());
} Try / catch
try {
delegate.executeTransformation(trans, cfg, args);
} catch (KettleException e) {
if (e.getMessage() != null && e.getMessage().endsWith("NoExecutionTypeSpecified")) {
cfg.setExecutingLocally(true);
// retry or report misconfiguration
} else throw e;
} Prevention
- Start from delegate.createDefaultConfiguration() instead of a bare TransExecutionConfiguration
- Set exactly one execution flag per run
- Unit-test configuration builders to assert an execution type is set
- Centralize config construction in one factory method
When it happens
Trigger: Passing a TransExecutionConfiguration where isExecutingLocally(), isExecutingRemoted(), and isExecutingClustered() all return false, then invoking the delegate's executeTransformation.
Common situations: Programmatic pan usage building a custom configuration without calling setExecutingClustered/setRemoteServer/setLocal; a config deserialized from XML that lost its execution flags.
Understand the failure class
Background: "Must pass :limit option" / "Missing required option" — required option errors explained — this error's family across 41 libraries.
Related errors
- Could not connect to repository: ...
- Error executing transformation and error cleaning up cluster
- PanTransformationDelegate.Error.NoRemoteServerSpecified
- PanTransformationDelegate.Error.TransMetaNull
- RepositoryMeta.Error.OpeningFile
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/dc80c93e96ad4f1d.
Report an issue: GitHub.
Appendix: source
Thrown at engine/src/main/java/org/pentaho/di/pan/delegates/PanTransformationDelegate.java:149
/**
* Execute transformation based on the execution configuration type.
*/
private Result executeBasedOnConfiguration( TransMeta transMeta,
TransExecutionConfiguration executionConfiguration,
String[] arguments ) throws KettleException {
if ( executionConfiguration.isExecutingLocally() ) {
return transformationExecutorServiceMap.get( LOCAL )
.execute( log, transMeta, repository, executionConfiguration, arguments );
} else if ( executionConfiguration.isExecutingRemotely() ) {
return transformationExecutorServiceMap.get( REMOTE )
.execute( log, transMeta, repository, executionConfiguration, arguments );
} else if ( executionConfiguration.isExecutingClustered() ) {
return transformationExecutorServiceMap.get( CLUSTERED )
.execute( log, transMeta, repository, executionConfiguration, arguments );
} else {
throw new KettleException( BaseMessages.getString( pkg, "PanTransformationDelegate.Error.NoExecutionTypeSpecified" ) );
}
}
/**
* Create a default execution configuration for command-line execution.
*/
public TransExecutionConfiguration createDefaultExecutionConfiguration() {
TransExecutionConfiguration config = new TransExecutionConfiguration();
// Set defaults for command-line execution
config.setExecutingLocally( true );
config.setExecutingRemotely( false );
config.setExecutingClustered( false );
config.setClearingLog( true );
config.setSafeModeEnabled( false );
config.setGatheringMetrics( false );
config.setLogLevel( LogLevel.BASIC );
View on GitHub (pinned to f3058517a1)