{"record":{"id":"7485b75c13b058f8","repo":"pentaho/pentaho-kettle","slug":"unable-to-load-job-entry-of-type-special-from-the-repository","errorCode":null,"errorMessage":"Unable to load job entry of type 'special' from the repository for id_jobentry=","messagePattern":"Unable to load job entry of type 'special' from the repository for id_jobentry=","errorType":"exception","errorClass":"KettleException","httpStatus":null,"severity":"error","filePath":"engine/src/main/java/org/pentaho/di/job/entries/special/JobEntrySpecial.java","lineNumber":132,"sourceCode":"      throw new KettleXMLException( \"Unable to load job entry of type 'special' 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      start = rep.getJobEntryAttributeBoolean( id_jobentry, \"start\" );\n      dummy = rep.getJobEntryAttributeBoolean( id_jobentry, \"dummy\" );\n      repeat = rep.getJobEntryAttributeBoolean( id_jobentry, \"repeat\" );\n      schedulerType = (int) rep.getJobEntryAttributeInteger( id_jobentry, \"schedulerType\" );\n      intervalSeconds = (int) rep.getJobEntryAttributeInteger( id_jobentry, \"intervalSeconds\" );\n      intervalMinutes = (int) rep.getJobEntryAttributeInteger( id_jobentry, \"intervalMinutes\" );\n      hour = (int) rep.getJobEntryAttributeInteger( id_jobentry, \"hour\" );\n      minutes = (int) rep.getJobEntryAttributeInteger( id_jobentry, \"minutes\" );\n      weekDay = (int) rep.getJobEntryAttributeInteger( id_jobentry, \"weekDay\" );\n      dayOfMonth = (int) rep.getJobEntryAttributeInteger( id_jobentry, \"dayOfMonth\" );\n    } catch ( KettleDatabaseException dbe ) {\n      throw new KettleException( \"Unable to load job entry of type 'special' from the repository for id_jobentry=\"\n        + id_jobentry, 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(), \"start\", start );\n      rep.saveJobEntryAttribute( id_job, getObjectId(), \"dummy\", dummy );\n      rep.saveJobEntryAttribute( id_job, getObjectId(), \"repeat\", repeat );\n      rep.saveJobEntryAttribute( id_job, getObjectId(), \"schedulerType\", schedulerType );\n      rep.saveJobEntryAttribute( id_job, getObjectId(), \"intervalSeconds\", intervalSeconds );\n      rep.saveJobEntryAttribute( id_job, getObjectId(), \"intervalMinutes\", intervalMinutes );\n      rep.saveJobEntryAttribute( id_job, getObjectId(), \"hour\", hour );\n      rep.saveJobEntryAttribute( id_job, getObjectId(), \"minutes\", minutes );\n      rep.saveJobEntryAttribute( id_job, getObjectId(), \"weekDay\", weekDay );\n      rep.saveJobEntryAttribute( id_job, getObjectId(), \"dayOfMonth\", dayOfMonth );","sourceCodeStart":114,"sourceCodeEnd":150,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/engine/src/main/java/org/pentaho/di/job/entries/special/JobEntrySpecial.java#L114-L150","documentation":"KettleException thrown by JobEntrySpecial.loadRep when reading the 'special' job entry's schedule attributes (intervalMinutes, hour, minutes, weekDay, dayOfMonth) from the repository fails with a KettleDatabaseException. It wraps the low-level database error and identifies the job entry by id_jobentry so the corrupt/unreadable record can be located.","triggerScenarios":"Calling loadRep for a 'special' job entry (Start job entry) against a repository where the KettleDatabaseException can be raised by getJobEntryAttributeInteger: repository connection down, missing R_JOBENTRY_ATTRIBUTE rows, schema mismatch, or corrupt attribute values.","commonSituations":"Repository database unavailable or network dropped mid-load; loading a job exported from a different Pentaho version where attribute columns changed; the special entry's attributes were deleted manually from R_JOBENTRY_ATTRIBUTE.","solutions":["Verify the repository database is reachable and credentials are valid (test the repository connection).","Check R_JOBENTRY_ATTRIBUTE rows exist for the given id_jobentry with the attributes intervalMinutes/hour/minutes/weekDay/dayOfMonth.","Reopen and re-save the job entry in Spoon to regenerate the attribute rows.","Inspect the wrapped KettleDatabaseException cause for the actual SQL/database error."],"exampleFix":"// before\nJobEntrySpecial special = (JobEntrySpecial) jobMeta.findJobEntry(\"Start\").getEntry();\nspecial.loadRep(rep, metaStore, idJobentry, databases, slaveServers);\n// after\nif (rep != null && idJobentry != null) {\n  try {\n    special.loadRep(rep, metaStore, idJobentry, databases, slaveServers);\n  } catch (KettleException e) {\n    logError(\"Failed loading special entry \" + idJobentry + \": \" + e.getCause(), e);\n  }\n}","handlingStrategy":"try-catch","validationCode":"if (rep == null || idJobentry == null) throw new IllegalArgumentException(\"Repository and idJobentry are required\");\n// optionally verify connectivity: rep.connect(...) beforehand\n","typeGuard":null,"tryCatchPattern":"try {\n  special.loadRep(rep, metaStore, idJobentry, databases, slaveServers);\n} catch (KettleException e) {\n  logError(\"Load failed for id_jobentry=\" + idJobentry + \" cause=\" + e.getCause(), e);\n}","preventionTips":["Keep the repository database reachable and credentials valid","Never delete R_JOBENTRY_ATTRIBUTE rows manually","Keep repository schema in sync with the Pentaho version","Log the wrapped cause for diagnosis"],"tags":["repository","pdi","job-entry","database"],"backgroundTag":"database-query-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"}