pentaho/pentaho-kettle · error · KettleException
JobEntrySimple.Error.Exception.UnableLoadRep
JobEntrySimple.Error.Exception.UnableLoadRep
Error message
JobEntrySimple.Error.Exception.UnableLoadRep
What it means
JobEntrySimpleEval.loadRep wraps any KettleException raised while reading the job entry's attributes ('fieldname', 'successnumbercondition', 'successbooleancondition', 'successwhenvarset', etc.) from the repository and rethrows it as a KettleException with the UnableLoadRep message plus the id_jobentry. It indicates the persisted metadata for this 'simple evaluation' job entry could not be read from the repository database.
Solutions
- Verify the repository database connection (test connection, credentials, network) and retry opening the job.
- Check that the job and job entry rows (id_jobentry) exist and are intact in the repository tables (R_JOBENTRY, R_JOBENTRY_ATTRIBUTE).
- Re-save/recreate the job entry in Spoon to rewrite its repository attributes.
- Inspect the chained cause (dbe) for the underlying SQL error and fix the schema/driver mismatch.
Example fix
// before
JobEntrySimpleEval entry = new JobEntrySimpleEval();
entry.loadRep(rep, metaStore, idJobEntry, databases, slaveServers); // throws if repo read fails
// after
try {
entry.loadRep(rep, metaStore, idJobEntry, databases, slaveServers);
} catch (KettleException e) {
logError("Failed to load JobEntrySimpleEval id=" + idJobEntry + ": " + e.getCause(), e);
} Defensive patterns
Strategy: try-catch
Validate before calling
if (!rep.connect().equals(...)) { /* test repository connectivity before load */ } Try / catch
try {
entry.loadRep(rep, metaStore, idJobEntry, databases, slaveServers);
} catch (KettleException e) {
logger.error("JobEntrySimpleEval load failed for id=" + idJobEntry, e);
// fall back to defaults or abort job load
} Prevention
- Test the repository connection before opening jobs.
- Avoid direct DB edits to repository tables.
- Keep repository schema at the version matching your Pentaho release.
- Catch the chained cause to distinguish connectivity vs corruption.
When it happens
Trigger: Calling loadRep on a JobEntrySimpleEval when Repository.getJobEntryAttributeString/getJobEntryAttributeBoolean throws KettleException - typically a broken repository DB connection, missing table rows, or a corrupt/locked repository.
Common situations: Repository database is down or credentials changed while opening a job; the job entry row was deleted or corrupted; schema mismatch after a Pentaho version upgrade; network interruption mid-load.
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
- JobEntryMSAccessBulkLoad.Meta.UnableSave
- JobFoldersCompare.Meta.UnableLoadRep
- JobFoldersCompare.Meta.UnableSaveRep
- JobMoveFiles.Error.Exception.UnableSaveRep
- JobXMLWellFormed.Error.Exception.UnableSaveRep + id_job
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/838b253e497fed3c.
Report an issue: GitHub.
Appendix: source
Thrown at engine/src/main/java/org/pentaho/di/job/entries/simpleeval/JobEntrySimpleEval.java:390
fieldname = rep.getJobEntryAttributeString( id_jobentry, "fieldname" );
variablename = rep.getJobEntryAttributeString( id_jobentry, "variablename" );
fieldtype = getFieldTypeByCode( Const.NVL( rep.getJobEntryAttributeString( id_jobentry, "fieldtype" ), "" ) );
mask = rep.getJobEntryAttributeString( id_jobentry, "mask" );
comparevalue = rep.getJobEntryAttributeString( id_jobentry, "comparevalue" );
minvalue = rep.getJobEntryAttributeString( id_jobentry, "minvalue" );
maxvalue = rep.getJobEntryAttributeString( id_jobentry, "maxvalue" );
successcondition =
getSuccessConditionByCode( Const.NVL(
rep.getJobEntryAttributeString( id_jobentry, "successcondition" ), "" ) );
successnumbercondition =
getSuccessNumberConditionByCode( Const.NVL( rep.getJobEntryAttributeString(
id_jobentry, "successnumbercondition" ), "" ) );
successbooleancondition =
getSuccessBooleanConditionByCode( Const.NVL( rep.getJobEntryAttributeString(
id_jobentry, "successbooleancondition" ), "" ) );
successwhenvarset = rep.getJobEntryAttributeBoolean( id_jobentry, "successwhenvarset" );
} catch ( KettleException dbe ) {
throw new KettleException( BaseMessages.getString( PKG, "JobEntrySimple.Error.Exception.UnableLoadRep" )
+ id_jobentry, dbe );
}
}
@Override
public void saveRep( Repository rep, IMetaStore metaStore, ObjectId id_job ) throws KettleException {
try {
rep.saveJobEntryAttribute( id_job, getObjectId(), "valuetype", getValueTypeCode( valuetype ) );
rep.saveJobEntryAttribute( id_job, getObjectId(), "fieldname", fieldname );
rep.saveJobEntryAttribute( id_job, getObjectId(), "variablename", variablename );
rep.saveJobEntryAttribute( id_job, getObjectId(), "fieldtype", getFieldTypeCode( fieldtype ) );
rep.saveJobEntryAttribute( id_job, getObjectId(), "mask", mask );
rep.saveJobEntryAttribute( id_job, getObjectId(), "comparevalue", comparevalue );
rep.saveJobEntryAttribute( id_job, getObjectId(), "minvalue", minvalue );
rep.saveJobEntryAttribute( id_job, getObjectId(), "maxvalue", maxvalue );
rep.saveJobEntryAttribute(
id_job, getObjectId(), "successcondition", getSuccessConditionCode( successcondition ) );
repView on GitHub (pinned to f3058517a1)