pentaho/pentaho-kettle · error · KettleException
Unable to load job entry of type 'Msgbox Info' from the…
Error message
Unable to load job entry of type 'Msgbox Info' from the repository with id_jobentry=
What it means
JobEntryMsgBoxInfo.loadRep() wraps a KettleDatabaseException raised while reading the 'bodymessage' and 'titremessage' attributes for a given id_jobentry from the Kettle repository into a KettleException with this message (the id is appended). It means the repository database could not serve the stored attributes for this 'Msgbox Info' job entry row.
Solutions
- Check the nested KettleDatabaseException cause for the underlying SQL error and fix the DB connectivity/schema issue.
- Verify id_jobentry exists: SELECT from r_jobentry / r_jobentry_attribute for that id.
- Run the repository upgrade/repair scripts matching your Kettle version (e.g. via the repository connect wizard).
- Restore the repository database from backup or recreate the job entry and re-save it to the repository.
Example fix
// before: querying with a stale/deleted id
jobEntry.loadRep(rep, metaStore, staleId, databases, slaveServers);
// after: verify the row exists first
if (rep.getJobEntryAttributeInteger(staleId, "bodymessage") == 0 && !jobEntryExists(rep, staleId)) {
throw new KettleException("Job entry " + staleId + " not found in repository");
}
jobEntry.loadRep(rep, metaStore, staleId, databases, slaveServers); Defensive patterns
Strategy: try-catch
Validate before calling
// Java: verify the repository row exists before loadRep
ObjectId id = ...;
if (id == null || rep.getJobEntryAttributeString(id, "bodymessage") == null && !repJobEntryExists(rep, id)) {
throw new KettleException("id_jobentry " + id + " missing from repository");
}
// plus a cheap connectivity probe:
rep.getConnection(); Type guard
boolean jobEntryRowExists(Repository rep, ObjectId id) {
try (ResultSet rs = rep.getConnection().prepareStatement(
"SELECT 1 FROM r_jobentry WHERE ID_JOBENTRY = " + id).executeQuery()) {
return rs.next();
} catch (Exception e) { return false; }
} Try / catch
try {
jobEntry.loadRep(rep, metaStore, idJobEntry, databases, slaveServers);
} catch (KettleException e) {
if (e.getCause() instanceof KettleDatabaseException) {
logError("Repository DB failure loading Msgbox Info entry; check r_jobentry_attribute", e);
// retry once after reconnect
}
throw e;
} Prevention
- Keep the repository schema upgraded to match your Kettle/Pentaho version.
- Monitor repository DB connectivity and back up r_jobentry_attribute regularly.
- Avoid concurrent deletes of shared repository objects; use versioned jobs.
- Run repository health checks (connection test in Spoon) before batch loads.
When it happens
Trigger: Calling loadRep(rep, metaStore, id_jobentry, databases, slaveServers) when rep.getJobEntryAttributeString() throws KettleDatabaseException — e.g. the r_jobentry_attribute table is missing/corrupt, the connection is down, or id_jobentry references a deleted row.
Common situations: Repository database (R_DB) schema drifted from the Kettle version; DB credentials/network outage mid-load; shared repository where another user deleted the job entry; corrupt r_jobentry_attribute records after a failed upgrade.
Related errors
- Unable to save job entry of type 'Msgbox Info' to the…
- GetSequenceMeta.Exception.UnableToReadStepInfo
- GetSequenceMeta.Exception.UnableToSaveStepInfo
- JobCopyFiles.Error.Exception.UnableLoadRep
- JobEntryCheckFilesLocked.UnableToLoadFromRepo
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/107ae00ef0e98d1e.
Report an issue: GitHub.
Appendix: source
Thrown at plugins/msg-box-info/impl/src/main/java/org/pentaho/di/job/entries/msgboxinfo/JobEntryMsgBoxInfo.java:99
public void loadXML( Node entrynode, List<DatabaseMeta> databases, List<SlaveServer> slaveServers,
Repository rep, IMetaStore metaStore ) throws KettleXMLException {
try {
super.loadXML( entrynode, databases, slaveServers );
bodymessage = XMLHandler.getTagValue( entrynode, "bodymessage" );
titremessage = XMLHandler.getTagValue( entrynode, "titremessage" );
} catch ( Exception e ) {
throw new KettleXMLException( "Unable to load job entry of type 'Msgbox Info' from XML node", e );
}
}
public void loadRep( Repository rep, IMetaStore metaStore, ObjectId id_jobentry, List<DatabaseMeta> databases,
List<SlaveServer> slaveServers ) throws KettleException {
try {
bodymessage = rep.getJobEntryAttributeString( id_jobentry, "bodymessage" );
titremessage = rep.getJobEntryAttributeString( id_jobentry, "titremessage" );
} catch ( KettleDatabaseException dbe ) {
throw new KettleException(
"Unable to load job entry of type 'Msgbox Info' from the repository with id_jobentry=" + id_jobentry,
dbe );
}
}
// Save the attributes of this job entry
//
public void saveRep( Repository rep, IMetaStore metaStore, ObjectId id_job ) throws KettleException {
try {
rep.saveJobEntryAttribute( id_job, getObjectId(), "bodymessage", bodymessage );
rep.saveJobEntryAttribute( id_job, getObjectId(), "titremessage", titremessage );
} catch ( KettleDatabaseException dbe ) {
throw new KettleException( "Unable to save job entry of type 'Msgbox Info' to the repository for id_job="
+ id_job, dbe );
}
}
/**View on GitHub (pinned to f3058517a1)