pentaho/pentaho-kettle · error · KettleException

Unable to load job entry for type file exists from the…

Error message

Unable to load job entry for type file exists from the repository for id_jobentry=<id_jobentry>

What it means

loadRep loads the File Exists job entry attributes (source/target directory, wildcard) from a Kettle repository. If any repository read throws a KettleException, it is wrapped with this message including the id_jobentry. It signals the repository could not deliver the stored job entry attributes.

Solutions

  1. Verify the repository database connection and credentials
  2. Check the repository table (R_JOBENTRY_ATTRIBUTE) contains rows for the given id_jobentry
  3. Confirm DB user has SELECT rights on the repository schema
  4. Inspect the wrapped cause (dbe) for the underlying SQL error
Defensive patterns

Strategy: try-catch

Validate before calling

// check repository reachability before loading
if (!rep.connect(...)) throw new IllegalStateException("Repository unavailable");

Try / catch

try { jobEntry.loadRep(rep, idJobentry, databases, slaveServers); } catch (KettleException e) { logger.error("loadRep failed for id_jobentry=" + idJobentry, e); }

Prevention

When it happens

Trigger: Calling loadRep with an id_jobentry whose attributes are missing/inaccessible, or when the repository connection fails during rep.getJobEntryAttributeString calls.

Common situations: Repository database unavailable or dropped tables; stale id_jobentry after repository migration; insufficient DB user permissions on repository tables.

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/445c5c4d593326f0. Report an issue: GitHub.

Appendix: source

Thrown at plugins/dummy/core/src/main/java/org/pentaho/di/pdi/jobentry/dummy/JobEntryDummy.java:122

      super.loadXML( entrynode, databases, slaveServers );
      sourceDirectory = XMLHandler.getTagValue( entrynode, SOURCEDIRECTORY );
      targetDirectory = XMLHandler.getTagValue( entrynode, TARGETDIRECTORY );
      wildcard = XMLHandler.getTagValue( entrynode, WILDCARD );
    } catch ( KettleXMLException xe ) {
      throw new KettleXMLException( "Unable to load file exists job entry from XML node",
          xe );
    }
  }

  @Override
  public void loadRep( Repository rep, ObjectId id_jobentry, List<DatabaseMeta> databases, List<SlaveServer> slaveServers ) throws KettleException {
    try {
      super.loadRep( rep, id_jobentry, databases, slaveServers );
      sourceDirectory = rep.getJobEntryAttributeString( id_jobentry, SOURCEDIRECTORY );
      targetDirectory = rep.getJobEntryAttributeString( id_jobentry, TARGETDIRECTORY );
      wildcard = rep.getJobEntryAttributeString( id_jobentry, WILDCARD );
    } catch ( KettleException dbe ) {
      throw new KettleException(
          "Unable to load job entry for type file exists from the repository for id_jobentry="
              + id_jobentry, dbe );
    }
  }

  @Override
  public void saveRep( Repository rep, ObjectId id_job ) throws KettleException {
    try {
      super.saveRep( rep, id_job );

      rep.saveJobEntryAttribute( id_job, getObjectId(), SOURCEDIRECTORY, sourceDirectory );
      rep.saveJobEntryAttribute( id_job, getObjectId(), TARGETDIRECTORY, targetDirectory );
      rep.saveJobEntryAttribute( id_job, getObjectId(), WILDCARD, wildcard );
    } catch ( KettleDatabaseException dbe ) {
      throw new KettleException(
          "unable to save jobentry of type 'file exists' to the repository for id_job="
              + id_job, dbe );
    }

View on GitHub (pinned to f3058517a1)