pentaho/pentaho-kettle · error · KettleException
Unable to get object information for object with id=
Error message
Unable to get object information for object with id={objectId} What it means
KettleDatabaseRepository.getObjectInformation() wraps any failure while reading repository object metadata (name, directory, type, dates) by object id into this KettleException. It is a catch-all around loadRepositoryDirectoryTree().findDirectory() and RepositoryObject construction, so any JDBC or lookup failure surfaces here.
Solutions
- Verify the ObjectId exists in the repository database (check R_REPOSITORY_LOG / the corresponding object table).
- Confirm the repository database connection is alive and credentials are correct before calling.
- Run the repository upgrade/repair so the schema matches the current Pentaho version.
- Catch the KettleException and re-look-up the object by name/directory instead of a cached id.
Example fix
// before
RepositoryObject info = repo.getObjectInformation(staleId, RepositoryObjectType.JOB);
// after
RepositoryObject info;
try {
info = repo.getObjectInformation(staleId, RepositoryObjectType.JOB);
} catch (KettleException e) {
info = repo.getObjectInformation(name, repo.loadRepositoryDirectoryTree().findDirectory(dirPath), RepositoryObjectType.JOB);
} Defensive patterns
Strategy: try-catch
Validate before calling
// verify id resolves before use
boolean exists = repo.getObjectId(new RepositoryElementMetaLocator() { ... }) != null; // or query repository log table
if (objectId == null) throw new IllegalArgumentException("null objectId"); Type guard
boolean isValidObjectId(ObjectId id) { return id != null && id.getId() != null; } Try / catch
try {
RepositoryObject info = repo.getObjectInformation(id, RepositoryObjectType.JOB);
} catch (KettleException e) {
// log e, fall back to lookup by name/directory
} Prevention
- Do not cache ObjectIds across repositories or database rebuilds.
- Verify DB connectivity before repository calls.
- Keep the repository schema version matched to the Pentaho version.
- Handle loadJob/loadTransformation failures by re-resolving by name.
When it happens
Trigger: Calling getObjectInformation(idJob, RepositoryObjectType.JOB) or the transitive loadJob/loadTransformation with an ObjectId that does not exist in the repository tables, or when the underlying database connection fails while resolving the directory tree.
Common situations: Stale ObjectId saved from another repository/database; repository schema not upgraded after a Pentaho version change; database unreachable or credentials wrong so directory-tree loading throws.
Understand the failure class
Background: Database query failed: Internal Server Error 500s wrapping SQL, Prisma, and connection failures — what to check first — this error's family across 16 libraries.
Related errors
- AbortMeta.Exception.UnableToSaveStepInfoToRepository
- AccessInputMeta.Exception.ErrorReadingRepository
- AddSequenceMeta.Exception.UnableToReadStepInfo
- AggregateRowsMeta.Exception.UnexpectedErrorWhileReadingStepInfo
- An error occured loading the directory tree from the…
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/488a51729995729b.
Report an issue: GitHub.
Appendix: source
Thrown at engine/src/main/java/org/pentaho/di/repository/kdr/KettleDatabaseRepository.java:2035
case DATABASE: {
RowMetaAndData row = databaseDelegate.getDatabase( objectId );
name = row.getString( KettleDatabaseRepository.FIELD_DATABASE_NAME, null );
return new RepositoryObject(
objectId, name, null, null, null, objectType, null, false );
}
default:
throw new KettleException( "Object type "
+ objectType.getTypeDescription()
+ " was specified. Only information from transformations, jobs and databases can be retrieved at this time." );
// Nothing matches, return null
}
boolean isDeleted = ( name == null );
directory = loadRepositoryDirectoryTree().findDirectory( new LongObjectId( dirId ) );
return new RepositoryObject(
objectId, name, directory, modifiedUser, modifiedDate, objectType, description, isDeleted );
} catch ( Exception e ) {
throw new KettleException( "Unable to get object information for object with id=" + objectId, e );
}
}
public JobMeta loadJob( ObjectId idJob, String versionLabel ) throws KettleException {
RepositoryObject jobInfo = getObjectInformation( idJob, RepositoryObjectType.JOB );
return loadJob( jobInfo.getName(), jobInfo.getRepositoryDirectory(), null, versionLabel );
}
public TransMeta loadTransformation( ObjectId idTransformation, String versionLabel ) throws KettleException {
RepositoryObject jobInfo = getObjectInformation( idTransformation, RepositoryObjectType.TRANSFORMATION );
return loadTransformation( jobInfo.getName(), jobInfo.getRepositoryDirectory(), null, true, versionLabel );
}
public String getConnectMessage() {
return null;
}
public IRepositoryExporter getExporter() {View on GitHub (pinned to f3058517a1)