pentaho/pentaho-kettle · error · KettleJobException

Couldn't find starting point in this job.

Error message

Couldn't find starting point in this job.

What it means

Thrown during Job.execute when the job's starting point cannot be located. Kettle looks for the special 'Start' job entry (JobMeta.STRING_SPECIAL_START) in the job metadata, or uses the provided startJobEntryCopy; if both are null, execution cannot begin and a KettleJobException is thrown.

Solutions

  1. Add a Start job entry to the JobMeta (jobMeta.createJobEntryCopy with STRING_SPECIAL_START) before executing
  2. Check that the job loaded from file/repository actually contains a Start entry
  3. If starting at a specific entry, set startJobEntryCopy explicitly before run()
  4. Re-export/fix the job definition if the Start entry is missing in the source artifact

Example fix

// before
JobMeta jm = new JobMeta(); jm.addJobEntry(myEntry);
// after
JobMeta jm = new JobMeta();
JobEntryCopy start = jm.createJobEntryCopy(startEntry); start.setStarting(true); jm.addJobEntryCopy(start);
Defensive patterns

Strategy: validation

Validate before calling

JobEntryCopy start = jobMeta.findJobEntry(JobMeta.STRING_SPECIAL_START, 0, false);
if (start == null && startJobEntryCopy == null) {
  throw new IllegalStateException("Job has no Start entry and no explicit start entry set");
}

Try / catch

try {
  job.run();
} catch (KettleJobException e) {
  if (e.getMessage().contains("starting point")) {
    log.error("JobMeta is missing its Start job entry: " + jobMeta.getName());
  }
}

Prevention

When it happens

Trigger: Calling Job.execute (via run()) on a JobMeta that has no Start job entry and no explicit start entry copy was set.

Common situations: Programmatically built JobMeta missing the special Start entry; a job XML/repo definition where the Start entry was deleted or renamed; loading a job from a repository where the entry id didn't match.

Understand the failure class

Background: 'Could not be found', 'does not exist', 'not found in database': the resource-not-found family when an ID, slug, key, or URI lookup comes back empty — this error's family across 20 libraries.

Related errors


AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13). Data as JSON: /api/errors/a0a369f69f1a64e9. Report an issue: GitHub.

Appendix: source

Thrown at engine/src/main/java/org/pentaho/di/job/Job.java:522

      Object syncObject = this;
      if ( parentJob != null ) {
        syncObject = parentJob; // parallel execution in a job
      }

      synchronized ( syncObject ) {
        beginProcessing();
      }

      Result res = null;

      if ( startJobEntryCopy == null ) {
        startpoint = jobMeta.findJobEntry( JobMeta.STRING_SPECIAL_START, 0, false );
      } else {
        startpoint = startJobEntryCopy;
        res = startJobEntryResult;
      }
      if ( startpoint == null ) {
        throw new KettleJobException( BaseMessages.getString( PKG, "Job.Log.CounldNotFindStartingPoint" ) );
      }

      JobEntryResult jerEnd = null;

      if ( startpoint.isStart() ) {
        // Perform optional looping in the special Start job entry...
        //
        // long iteration = 0;

        boolean isFirst = true;
        JobEntrySpecial jes = (JobEntrySpecial) startpoint.getEntry();
        while ( ( jes.isRepeat() || isFirst ) && !isStopped() ) {
          isFirst = false;
          res = execute( 0, null, startpoint, null, BaseMessages.getString( PKG, "Job.Reason.Started" ) );

          //
          // if (iteration > 0 && (iteration % 500) == 0) {
          // System.out.println("other 500 iterations: " + iteration);

View on GitHub (pinned to f3058517a1)