{"record":{"id":"54058482cf07072d","repo":"pentaho/pentaho-kettle","slug":"unable-to-save-job-entry-of-type-dtdvalidator-to-the","errorCode":null,"errorMessage":"Unable to save job entry of type 'DTDvalidator' to the repository for id_job=${id_job}","messagePattern":"Unable to save job entry of type 'DTDvalidator' to the repository for id_job=(.+?)","errorType":"exception","errorClass":"KettleException","httpStatus":null,"severity":"error","filePath":"plugins/xml/core/src/main/java/org/pentaho/di/job/entries/dtdvalidator/JobEntryDTDValidator.java","lineNumber":124,"sourceCode":"      List<SlaveServer> slaveServers ) throws KettleException {\n    try {\n      xmlfilename = rep.getJobEntryAttributeString( id_jobentry, \"xmlfilename\" );\n      dtdfilename = rep.getJobEntryAttributeString( id_jobentry, \"dtdfilename\" );\n      dtdintern = rep.getJobEntryAttributeBoolean( id_jobentry, \"dtdintern\" );\n\n    } catch ( KettleException dbe ) {\n      throw new KettleException( \"Unable to load job entry of type 'DTDvalidator' from the repository for id_jobentry=\"\n          + id_jobentry, dbe );\n    }\n  }\n\n  public void saveRep( Repository rep, IMetaStore metaStore, ObjectId id_job ) throws KettleException {\n    try {\n      rep.saveJobEntryAttribute( id_job, getObjectId(), \"xmlfilename\", xmlfilename );\n      rep.saveJobEntryAttribute( id_job, getObjectId(), \"dtdfilename\", dtdfilename );\n      rep.saveJobEntryAttribute( id_job, getObjectId(), \"dtdintern\", dtdintern );\n    } catch ( KettleDatabaseException dbe ) {\n      throw new KettleException( \"Unable to save job entry of type 'DTDvalidator' to the repository for id_job=\"\n          + id_job, dbe );\n    }\n  }\n\n  public String getRealxmlfilename() {\n    return environmentSubstitute( xmlfilename );\n  }\n\n  public String getRealDTDfilename() {\n    return environmentSubstitute( dtdfilename );\n  }\n\n  public Result execute( Result previousResult, int nr ) {\n    Result result = previousResult;\n    result.setResult( true );\n\n    String realxmlfilename = getRealxmlfilename();\n    String realDTDfilename = getRealDTDfilename();","sourceCodeStart":106,"sourceCodeEnd":142,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/plugins/xml/core/src/main/java/org/pentaho/di/job/entries/dtdvalidator/JobEntryDTDValidator.java#L106-L142","documentation":"JobEntryDTDValidator.saveRep() failed while persisting the entry's attributes (xmlfilename, dtdfilename, dtdintern) to the repository for id_job. The wrapped KettleDatabaseException means the repository insert/update failed at the database level.","triggerScenarios":"saveRep() calls rep.saveJobEntryAttribute(...) for id_job and the repository throws KettleDatabaseException — connection loss, constraint violation, read-only repository, or oversized attribute values.","commonSituations":"Repository database offline or connection dropped mid-save; user lacks write permissions on repository tables; repository storage full; concurrent edits causing lock contention.","solutions":["Check repository database connectivity and error details in the wrapped KettleDatabaseException","Verify the repository user has INSERT/UPDATE privileges on the repository tables","Check for locks or concurrent modifications and retry the save","Verify repository database has free space and is writable"],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":"// pre-check repository write access\nif ( !rep.getSecurityProvider().isReadOnly() ) { /* proceed */ } else { throw new KettleException( \"Repository is read-only\" ); }","typeGuard":null,"tryCatchPattern":"try {\n  saveJobToRepository( rep, metaStore, jobId );\n} catch ( KettleException e ) {\n  if ( e.getMessage().contains( \"Unable to save job entry\" ) ) {\n    logError( \"Repository write failed, cause: \" + e.getCause() );\n  } else { throw e; }\n}","preventionTips":["Confirm repository user has write privileges before committing saves","Monitor repository DB connectivity during long editing sessions","Avoid concurrent edits of the same job by multiple users","Keep the repository database from running out of space"],"tags":["kettle","repository","job-entry","database-write","persistence"],"backgroundTag":"database-write-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"}