pentaho/pentaho-kettle · error · RuntimeException

Properties, Kettle systems settings, not initialised!

Error message

Properties, Kettle systems settings, not initialised!

What it means

Props.getInstance() returns the global Kettle properties singleton and throws RuntimeException if Props.init() was never called in this JVM. Kettle requires explicit, single initialization before any code reads properties.

Solutions

  1. Call KettleEnvironment.init() or Props.init(type) before any use of Props.getInstance()
  2. Fix initialization ordering so the bootstrap runs before dependent code
  3. In tests, add an @BeforeClass that initializes Kettle environment once
  4. Centralize access behind your own lazy initializer that calls init if needed (guarded)

Example fix

// before
Props props = Props.getInstance();
// after
if (!Props.isInitialized()) {
  Props.init(Props.TYPE_PROPERTIES_KETTLE);
}
Props props = Props.getInstance();
Defensive patterns

Strategy: validation

Validate before calling

public static Props propsSafe() {
  if (!Props.isInitialized()) {
    Props.init(Props.TYPE_PROPERTIES_KETTLE);
  }
  return Props.getInstance();
}

Try / catch

try {
  Props props = Props.getInstance();
} catch (RuntimeException e) {
  Props.init(Props.TYPE_PROPERTIES_KETTLE);
  Props props = Props.getInstance();
}

Prevention

When it happens

Trigger: Calling Props.getInstance() before any Props.init(...) call — e.g. using Kettle environment constants/props in a standalone tool or test without bootstrapping KettleEnvironment first.

Common situations: Unit tests accessing Props without calling KettleEnvironment.init(), embedding PDI code in a library where the host app never initializes Props, code paths executing before the bootstrap finishes (ordering bug).

Related errors


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

Appendix: source

Thrown at core/src/main/java/org/pentaho/di/core/Props.java:215

      throw new RuntimeException( "The properties systems settings are already initialised!" );
    }
  }

  /**
   * Check to see whether the Kettle properties where loaded.
   *
   * @return true if the Kettle properties where loaded.
   */
  public static boolean isInitialized() {
    return props != null;
  }

  public static Props getInstance() {
    if ( props != null ) {
      return props;
    }

    throw new RuntimeException( "Properties, Kettle systems settings, not initialised!" );
  }

  protected Props() {
    init();
  }

  protected Props( int t ) {
    type = t;
    filename = getFilename();
    init();
  }

  protected void init() {
    createLogChannel();
    properties = new Properties();
    pluginHistory = new ArrayList<ObjectUsageCount>();

    loadProps();

View on GitHub (pinned to f3058517a1)