pentaho/pentaho-kettle · error · IllegalStateException
Unable to access run configuration manager
Error message
Unable to access run configuration manager
What it means
RunConfigurationDelegate.moveCopy() throws IllegalStateException when targetBowl.getManager(RunConfigurationService.class) fails with a KettleException, meaning the run configuration service manager could not be obtained for the target project/bowl. Copying or moving the run configuration cannot proceed.
Solutions
- Inspect the nested KettleException for why the RunConfigurationService manager lookup failed
- Restart PDI (Spoon) so all project plugins and bowls re-initialize
- Verify the target project is valid and properly initialized (check project configuration files)
- Recreate the target project if its bowl state is corrupted, then retry the copy/move
Defensive patterns
Strategy: try-catch
Try / catch
try {
delegate.copyToProject( runConfiguration, targetProject );
} catch ( IllegalStateException e ) {
logError( "Target project RunConfigurationService unavailable: " + e.getCause().getMessage() );
// restart Spoon / reinitialize project before retrying
} Prevention
- Ensure target projects initialize cleanly (check Spoon startup logs)
- Restart PDI if plugin/bowl initialization errors appear
- Verify project configuration files are valid before moving configurations
When it happens
Trigger: Invoking copyToGlobalInternal, copyToProjectInternal, moveToGlobalInternal, or moveToProjectInternal when the target bowl cannot supply a RunConfigurationService — plugin not loaded, bowl initialization failed, or an internal KettleException in manager lookup.
Common situations: Copying run configurations to a project whose lifecycle/plugin registry failed to initialize, corrupted project metadata, or a PDI plugin loading problem in the target environment.
Understand the failure class
Background: "not installed", "pip install", "required for": how missing-dependency errors surface across open-source libraries — this error's family across 34 libraries.
Related errors
- DefaultRunConfigurationExecutor.RemoteNotFound.Error
- RunConfigurationRunExtensionPoint.ConfigNotFound.Error
- AccessInputMeta.Exception.ErrorSavingToRepository
- AccessInputMeta.Exception.FileDoesNotExist
- AccessOutputMeta.Exception.ErrorGettingFields
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/648b9c0278bbd09d.
Report an issue: GitHub.
Appendix: source
Thrown at plugins/engine-configuration/impl/src/main/java/org/pentaho/di/engine/ui/RunConfigurationDelegate.java:330
private void moveToGlobalInternal( RunConfigurationService manager, RunConfiguration runConfiguration ) {
moveCopy( manager, runConfiguration, spoonSupplier.get().getGlobalManagementBowl(), true );
}
public void moveToProject( RunConfigurationService manager, RunConfiguration runConfiguration ) {
executeWithSessionRetry( () -> moveToProjectInternal( manager, runConfiguration ), "Error moving to project" );
}
private void moveToProjectInternal( RunConfigurationService manager, RunConfiguration runConfiguration ) {
moveCopy( manager, runConfiguration, spoonSupplier.get().getManagementBowl(), true );
}
private void moveCopy( RunConfigurationService srcManager, RunConfiguration runConfiguration, Bowl targetBowl,
boolean deleteSource ) {
RunConfigurationService targetManager;
try {
targetManager = targetBowl.getManager( RunConfigurationService.class );
} catch ( KettleException e ) {
throw new IllegalStateException( "Unable to access run configuration manager", e );
}
if ( targetManager.getNames().stream().anyMatch( element -> element.equalsIgnoreCase( runConfiguration.getName() ) ) ) {
if ( !shouldOverwrite( BaseMessages.getString( PKG, "RunConfigurationDialog.OverwriteRunConfigurationYN",
runConfiguration.getName() ) ) ) {
return;
} else {
targetManager.delete( runConfiguration.getName() );
}
}
targetManager.save( runConfiguration );
if ( deleteSource ) {
srcManager.delete( runConfiguration.getName() );
}
refreshTree();
}
protected boolean shouldOverwrite( String message ) {
MessageBox mb = new MessageBox( spoonSupplier.get().getShell(), SWT.YES | SWT.NO | SWT.ICON_QUESTION );View on GitHub (pinned to f3058517a1)