{"record":{"id":"9d7334a5b63685ae","repo":"pentaho/pentaho-kettle","slug":"purrepository-error-0003-job-not-found","errorCode":"PurRepository.ERROR_0003_JOB_NOT_FOUND","errorMessage":"PurRepository.ERROR_0003_JOB_NOT_FOUND (localized, takes jobname)","messagePattern":"PurRepository\\.ERROR_0003_JOB_NOT_FOUND \\(localized, takes jobname\\)","errorType":"exception","errorClass":"KettleFileException","httpStatus":null,"severity":"error","filePath":"plugins/pur/core/src/main/java/org/pentaho/di/repository/pur/PurRepository.java","lineNumber":2585,"sourceCode":"    }\n    return transformations;\n  }\n\n  @Override\n  public JobMeta loadJob( String jobname, RepositoryDirectoryInterface parentDir, ProgressMonitorListener monitor,\n                          String versionId ) throws KettleException {\n    return loadJob( jobname, parentDir, monitor, versionId, null );\n  }\n\n  @Override\n  public JobMeta loadJob( String jobname, RepositoryDirectoryInterface parentDir, ProgressMonitorListener monitor,\n                          String versionId, VariableSpace parent ) throws KettleException {\n    String absPath = null;\n    try {\n      absPath = getPath( jobname, parentDir, RepositoryObjectType.JOB );\n      if ( absPath == null ) {\n        // Couldn't resolve path, throw an exception\n        throw new KettleFileException(\n          BaseMessages.getString( PKG, \"PurRepository.ERROR_0003_JOB_NOT_FOUND\", jobname ) );\n      }\n\n      readWriteLock.readLock().lock();\n      RepositoryFile file;\n      NodeRepositoryFileData data = null;\n      ObjectRevision revision = null;\n      try {\n        file = pur.getFile( absPath );\n        if ( versionId != null ) {\n          // need to go back to server to get versioned info\n          file = pur.getFileAtVersion( file.getId(), versionId );\n        }\n\n        data = pur.getDataAtVersionForRead( file.getId(), versionId, NodeRepositoryFileData.class );\n      } finally {\n        readWriteLock.readLock().unlock();\n      }","sourceCodeStart":2567,"sourceCodeEnd":2603,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/plugins/pur/core/src/main/java/org/pentaho/di/repository/pur/PurRepository.java#L2567-L2603","documentation":"PurRepository throws ERROR_0003_JOB_NOT_FOUND when loadJob(jobname/path) cannot resolve the given job name to an absolute repository path (getPath() returned null). The localized message includes the job name supplied by the caller.","triggerScenarios":"Calling PurRepository.loadJob(String jobname, RepositoryDirectoryInterface parentDir, String versionId, VariableSpace parent) where getPath(jobname, parentDir, RepositoryObjectType.JOB) returns null — the job does not exist under the given directory or the name/directory combination cannot be resolved.","commonSituations":"Job renamed/deleted in the repository; passing null or wrong RepositoryDirectory as parent; job lives in another repository; case-sensitivity or leading/trailing slash issues in the job name; resolving with an empty VariableSpace where relative paths were expected.","solutions":["Check the job exists: repository.exists(jobPath, RepositoryObjectType.JOB) before loading","Pass the correct RepositoryDirectoryInterface for the job's folder (or use findDirectory(\"/path\"))","Refresh the repository directory cache (reconnect) if the job was recently moved/renamed","Verify repository connectivity and that you are pointed at the intended repository"],"exampleFix":"// before\nJobMeta jm = repo.loadJob(\"nightly_etl\", null, null, null);\n// after\nRepositoryDirectoryInterface dir = repo.findDirectory(\"/jobs\");\nif (repo.exists(\"nightly_etl\", dir, RepositoryObjectType.JOB)) {\n  JobMeta jm = repo.loadJob(\"nightly_etl\", dir, null, null);\n} else {\n  throw new KettleException(\"Job not found in /jobs\");\n}","handlingStrategy":"validation","validationCode":"RepositoryDirectoryInterface dir = repo.findDirectory(\"/jobs\");\nif (!repo.exists(\"nightly_etl\", dir, RepositoryObjectType.JOB)) {\n  throw new KettleException(\"Job not found under /jobs\");\n}","typeGuard":"boolean jobExists(Repository repo, String name, RepositoryDirectoryInterface dir) throws KettleException {\n  return name != null && dir != null\n      && repo.exists(name, dir, RepositoryObjectType.JOB);\n}","tryCatchPattern":"try {\n  JobMeta jm = repo.loadJob(jobname, dir, null, null);\n} catch (KettleFileException e) {\n  // ERROR_0003: path could not be resolved — prompt user to pick a job from repo.getJobObjects(dir)\n}","preventionTips":["Pass an explicit RepositoryDirectoryInterface instead of relying on name-only lookup","Verify with exists() before load","Reconnect to refresh directory cache after external changes","Confirm target repository matches where the job was saved"],"tags":["pentaho-kettle","repository","job","path-resolution"],"backgroundTag":"file-not-found","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"}