pentaho/pentaho-kettle · error · KettleException

Unable to load job entry of type 'get pop' exists from the…

Error message

Unable to load job entry of type 'get pop' exists from the repository for idJobEntry=<idJobEntry>

What it means

JobEntryGetPOP's repository-loading constructor wraps any KettleException from reading the job entry's attributes into 'Unable to load job entry of type 'get pop' exists from the repository for idJobEntry=<idJobEntry>'. It means the POP/IMAP job entry's stored settings could not be read from the repository database.

Solutions

  1. Check repository database connectivity and that the job entry rows exist for the given idJobEntry
  2. Re-save the job entry from Spoon to regenerate its repository attributes
  3. Verify Pentaho and repository schema versions are compatible
Defensive patterns

Strategy: try-catch

Validate before calling

// before loading the job from repository:
SELECT COUNT(*) FROM r_jobentry_attribute WHERE id_jobentry = ?;

Try / catch

try { jobEntry.loadRep(rep, metaStore, idJobEntry, databases, metaStore); } catch (KettleException e) {
  log.error("Load from repository failed (idJobEntry=" + idJobEntry + "): " + e.getMessage(), e);
  // re-save the entry or fall back to a .kjb export
}

Prevention

When it happens

Trigger: JobEntryGetPOP (public) loadRep called with an idJobEntry: rep.getJobEntryAttributeString/Boolean throws (DB connection failure, missing rows, bad schema) while reading tags like AFTER_GET_IMAP or USE_PROXY.

Common situations: Repository database unavailable or migrated, r_jobentry_attribute rows missing/corrupt, loading a job from a repository written by an incompatible Pentaho version.

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/172261152758f1c3. Report an issue: GitHub.

Appendix: source

Thrown at plugins/email-messages/impl/src/main/java/org/pentaho/di/job/entries/getpop/JobEntryGetPOP.java:504

      bodySearch = rep.getJobEntryAttributeString( idJobEntry, TAG_BODY_SEARCH );
      notTermBodySearch = rep.getJobEntryAttributeBoolean( idJobEntry, TAG_NOT_TERM_BODY_SEARCH );
      conditionReceivedDate = MailConnectionMeta.getConditionByCode( Const.NVL( rep.getJobEntryAttributeString(
          idJobEntry, TAG_CONDITION_RECEIVED_DATE ), "" ) );
      notTermReceivedDateSearch = rep.getJobEntryAttributeBoolean( idJobEntry, TAG_NOT_TERM_RECEIVED_DATE_SEARCH );
      receivedDate1 = rep.getJobEntryAttributeString( idJobEntry, TAG_RECEIVED_DATE_1 );
      receivedDate2 = rep.getJobEntryAttributeString( idJobEntry, TAG_RECEIVED_DATE_2 );
      actiontype = MailConnectionMeta.getActionTypeByCode( Const.NVL( rep.getJobEntryAttributeString(
          idJobEntry, TAG_ACTION_TYPE ), "" ) );
      moveToIMAPFolder = rep.getJobEntryAttributeString( idJobEntry, TAG_MOVE_TO_IMAP_FOLDER );
      createMoveToFolder = rep.getJobEntryAttributeBoolean( idJobEntry, TAG_CREATE_MOVE_TO_FOLDER );
      createLocalFolder = rep.getJobEntryAttributeBoolean( idJobEntry, TAG_CREATE_LOCAL_FOLDER );
      aftergetimap = MailConnectionMeta.getAfterGetIMAPByCode( Const.NVL( rep.getJobEntryAttributeString(
          idJobEntry, TAG_AFTER_GET_IMAP ), "" ) );
      includeSubfolders = rep.getJobEntryAttributeBoolean( idJobEntry, TAG_INCLUDE_SUBFOLDERS );
      useProxy = rep.getJobEntryAttributeBoolean( idJobEntry, TAG_USE_PROXY );
      proxyUserName = rep.getJobEntryAttributeString( idJobEntry, TAG_PROXY_USER_NAME );
    } catch ( KettleException dbe ) {
      throw new KettleException(
        "Unable to load job entry of type 'get pop' exists from the repository for idJobEntry=" + idJobEntry,
        dbe );
    }
  }

  @Override
  public void saveRep( Repository rep, IMetaStore metaStore, ObjectId id_job ) throws KettleException {
    try {
      rep.saveJobEntryAttribute( id_job, getObjectId(), TAG_SERVERNAME, serverName );
      rep.saveJobEntryAttribute( id_job, getObjectId(), TAG_USERNAME, userName );
      rep.saveJobEntryAttribute( id_job, getObjectId(), TAG_PASSWORD,
        Encr.encryptPasswordIfNotUsingVariables( password ) );
      rep.saveJobEntryAttribute( id_job, getObjectId(), TAG_USE_SSL, useSsl );
      rep.saveJobEntryAttribute( id_job, getObjectId(), TAG_SSL_PORT, sslPort );
      rep.saveJobEntryAttribute( id_job, getObjectId(), TAG_OUTPUT_DIRECTORY, outputDirectory );
      rep.saveJobEntryAttribute( id_job, getObjectId(), TAG_FILENAME_PATTERN, filenamePattern );
      rep.saveJobEntryAttribute( id_job, getObjectId(), TAG_RETRIEVE_MAILS, retrieveMails );
      rep.saveJobEntryAttribute( id_job, getObjectId(), TAG_FIRST_MAILS, firstMails );

View on GitHub (pinned to f3058517a1)