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

  1. Verify the ObjectId exists in the repository database (check R_REPOSITORY_LOG / the corresponding object table).
  2. Confirm the repository database connection is alive and credentials are correct before calling.
  3. Run the repository upgrade/repair so the schema matches the current Pentaho version.
  4. 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

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


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)