{"record":{"id":"107ae00ef0e98d1e","repo":"pentaho/pentaho-kettle","slug":"unable-to-load-job-entry-of-type-msgbox-info-from-the","errorCode":null,"errorMessage":"Unable to load job entry of type 'Msgbox Info' from the repository with id_jobentry=","messagePattern":"Unable to load job entry of type 'Msgbox Info' from the repository with id_jobentry=","errorType":"exception","errorClass":"KettleException","httpStatus":null,"severity":"error","filePath":"plugins/msg-box-info/impl/src/main/java/org/pentaho/di/job/entries/msgboxinfo/JobEntryMsgBoxInfo.java","lineNumber":99,"sourceCode":"\n  public void loadXML( Node entrynode, List<DatabaseMeta> databases, List<SlaveServer> slaveServers,\n    Repository rep, IMetaStore metaStore ) throws KettleXMLException {\n    try {\n      super.loadXML( entrynode, databases, slaveServers );\n      bodymessage = XMLHandler.getTagValue( entrynode, \"bodymessage\" );\n      titremessage = XMLHandler.getTagValue( entrynode, \"titremessage\" );\n    } catch ( Exception e ) {\n      throw new KettleXMLException( \"Unable to load job entry of type 'Msgbox Info' from XML node\", e );\n    }\n  }\n\n  public void loadRep( Repository rep, IMetaStore metaStore, ObjectId id_jobentry, List<DatabaseMeta> databases,\n    List<SlaveServer> slaveServers ) throws KettleException {\n    try {\n      bodymessage = rep.getJobEntryAttributeString( id_jobentry, \"bodymessage\" );\n      titremessage = rep.getJobEntryAttributeString( id_jobentry, \"titremessage\" );\n    } catch ( KettleDatabaseException dbe ) {\n      throw new KettleException(\n        \"Unable to load job entry of type 'Msgbox Info' from the repository with id_jobentry=\" + id_jobentry,\n        dbe );\n    }\n  }\n\n  // Save the attributes of this job entry\n  //\n  public void saveRep( Repository rep, IMetaStore metaStore, ObjectId id_job ) throws KettleException {\n    try {\n      rep.saveJobEntryAttribute( id_job, getObjectId(), \"bodymessage\", bodymessage );\n      rep.saveJobEntryAttribute( id_job, getObjectId(), \"titremessage\", titremessage );\n    } catch ( KettleDatabaseException dbe ) {\n      throw new KettleException( \"Unable to save job entry of type 'Msgbox Info' to the repository for id_job=\"\n        + id_job, dbe );\n    }\n  }\n\n  /**","sourceCodeStart":81,"sourceCodeEnd":117,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/plugins/msg-box-info/impl/src/main/java/org/pentaho/di/job/entries/msgboxinfo/JobEntryMsgBoxInfo.java#L81-L117","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","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."],"exampleFix":"// before: querying with a stale/deleted id\njobEntry.loadRep(rep, metaStore, staleId, databases, slaveServers);\n// after: verify the row exists first\nif (rep.getJobEntryAttributeInteger(staleId, \"bodymessage\") == 0 && !jobEntryExists(rep, staleId)) {\n  throw new KettleException(\"Job entry \" + staleId + \" not found in repository\");\n}\njobEntry.loadRep(rep, metaStore, staleId, databases, slaveServers);","handlingStrategy":"try-catch","validationCode":"// Java: verify the repository row exists before loadRep\nObjectId id = ...;\nif (id == null || rep.getJobEntryAttributeString(id, \"bodymessage\") == null && !repJobEntryExists(rep, id)) {\n  throw new KettleException(\"id_jobentry \" + id + \" missing from repository\");\n}\n// plus a cheap connectivity probe:\nrep.getConnection();","typeGuard":"boolean jobEntryRowExists(Repository rep, ObjectId id) {\n  try (ResultSet rs = rep.getConnection().prepareStatement(\n      \"SELECT 1 FROM r_jobentry WHERE ID_JOBENTRY = \" + id).executeQuery()) {\n    return rs.next();\n  } catch (Exception e) { return false; }\n}","tryCatchPattern":"try {\n  jobEntry.loadRep(rep, metaStore, idJobEntry, databases, slaveServers);\n} catch (KettleException e) {\n  if (e.getCause() instanceof KettleDatabaseException) {\n    logError(\"Repository DB failure loading Msgbox Info entry; check r_jobentry_attribute\", e);\n    // retry once after reconnect\n  }\n  throw e;\n}","preventionTips":["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."],"tags":["database","pdi","repository","job-entry","kettle"],"backgroundTag":"database-read-failed","analyzedSha":"f3058517a153da500bf4551f46d79b91bf8ec552","analyzedAt":"2026-09-13T14:04:16.340Z","contentChangedAt":"2026-09-13T14:04:16.340Z","schemaVersion":2},"datasetVersion":"2026-09-20T23:17:15.980Z"}