{"record":{"id":"a5365acb8c6968bd","repo":"pentaho/pentaho-kettle","slug":"executejobservlet-error-unabletofindrepository","errorCode":"ExecuteJobServlet.Error.UnableToFindRepository","errorMessage":"ExecuteJobServlet.Error.UnableToFindRepository","messagePattern":"ExecuteJobServlet\\.Error\\.UnableToFindRepository","errorType":"exception","errorClass":"KettleRepositoryNotFoundException","httpStatus":null,"severity":"error","filePath":"engine/src/main/java/org/pentaho/di/www/ExecuteJobServlet.java","lineNumber":382,"sourceCode":"      }\n      JobMeta jobMeta = repository.loadJob( jobID, null, parentVariableSpace );\n      return jobMeta;\n    }\n  }\n\n  @VisibleForTesting\n  Repository openRepository( String repositoryName, String user, String pass ) throws KettleException {\n\n    if ( Utils.isEmpty( repositoryName ) ) {\n      return null;\n    }\n\n    RepositoriesMeta repositoriesMeta = new RepositoriesMeta();\n    repositoriesMeta.readData();\n    RepositoryMeta repositoryMeta = repositoriesMeta.findRepository( repositoryName );\n    if ( repositoryMeta == null ) {\n      String message = BaseMessages.getString( PKG, \"ExecuteJobServlet.Error.UnableToFindRepository\", repositoryName );\n      throw new KettleRepositoryNotFoundException( message );\n    }\n    PluginRegistry registry = PluginRegistry.getInstance();\n    Repository repository = registry.loadClass( RepositoryPluginType.class, repositoryMeta, Repository.class );\n    repository.init( repositoryMeta );\n    repository.connect( user, pass );\n    return repository;\n  }\n\n  public String toString() {\n    return \"Start job\";\n  }\n\n  public String getService() {\n    return CONTEXT_PATH + \" (\" + toString() + \")\";\n  }\n\n  protected void runJob( Job job ) {\n    // Execute the job...","sourceCodeStart":364,"sourceCodeEnd":400,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/engine/src/main/java/org/pentaho/di/www/ExecuteJobServlet.java#L364-L400","documentation":"KettleRepositoryNotFoundException thrown by ExecuteJobServlet.openRepository when repositoriesMeta.findRepository(repositoryName) returns null — the repository name supplied in the request does not exist among the repositories defined in the local repositories.xml (or .kettle/repositories.xml). The servlet cannot open a repository by that name.","triggerScenarios":"HTTP GET /kettle/executeJob/ with a rep parameter naming a repository absent from RepositoriesMeta.readData() results — i.e. not defined in the Carte server's .kettle/repositories.xml.","commonSituations":"repositories.xml missing on the Carte server host; repository renamed in the XML; typo in rep parameter; Carte running under a different user/home dir so .kettle/repositories.xml isn't found; multi-node setup where only some nodes have the repo defined.","solutions":["Add or correct the repository definition in ~/.kettle/repositories.xml on the Carte server","Fix the rep parameter in the request to match the repository name exactly","Verify Carte's KETTLE_HOME / user home points at the directory containing repositories.xml","Restart Carte after editing repositories.xml","Compare repository names via Spoon's repository connection dialog on the same host"],"exampleFix":"// before\nString url = \"...&rep=prod_repo&user=u&pass=p&...\"; // not in repositories.xml\n// after\n// add to ~/.kettle/repositories.xml:\n// <repository><id>1</id><name>prod_repo</name>...</repository>\nString url = \"...&rep=prod_repo&user=u&pass=p&...\";","handlingStrategy":"validation","validationCode":"RepositoriesMeta meta = new RepositoriesMeta();\nmeta.readData();\nif ( meta.findRepository( repositoryName ) == null ) {\n  throw new IllegalStateException( \"Repository not defined: \" + repositoryName );\n}","typeGuard":null,"tryCatchPattern":"try {\n  // executeJob request\n} catch ( KettleRepositoryNotFoundException e ) {\n  LOG.error( \"Unknown repository '\" + repName + \"'; check ~/.kettle/repositories.xml on server\", e );\n}","preventionTips":["Keep repositories.xml in sync across Carte nodes via config management","Confirm KETTLE_HOME points where repositories.xml lives","Match rep parameter exactly to the repository name in the XML","Restart Carte after repository definition changes"],"tags":["repository","configuration","servlet","pdi"],"backgroundTag":"config-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"}