pentaho/pentaho-kettle · error · RuntimeException

The properties systems settings are already initialised!

Error message

The properties systems settings are already initialised!

What it means

Props.init(String filename) initializes Kettle's global properties from a specific file. It throws RuntimeException if Props was already initialized, protecting the process-wide singleton from being loaded twice with different files.

Solutions

  1. Choose one init path per JVM (either default init(int) or init(String)) and call it exactly once
  2. Check initialization state before calling; catch RuntimeException for idempotent behavior
  3. Pass the custom file via the supported configuration mechanism instead of a second init call
  4. If the custom file must win, ensure it is the only init call in the process bootstrap

Example fix

// before
Props.init(Props.TYPE_PROPERTIES_KETTLE);
Props.init("/custom/kettle.properties"); // throws
// after
Props.init("/custom/kettle.properties"); // single init only
Defensive patterns

Strategy: try-catch

Validate before calling

public static synchronized void initPropsFromFile(String filename) {
  try { Props.init(filename); } catch (RuntimeException already) { /* ignore */ }
}

Try / catch

try {
  Props.init("/custom/kettle.properties");
} catch (RuntimeException e) {
  // Props already initialized elsewhere; proceed with existing instance
}

Prevention

When it happens

Trigger: Calling Props.init(filename) after any prior Props.init(...) or after Props.getInstance() created the default instance — e.g. loading kettle.properties then attempting to load a custom properties file.

Common situations: Applications wanting a custom kettle.properties path but calling the default init first, test suites running multiple init calls, framework code initializing Props before application code does.

Understand the failure class

Background: "Invalid state transition" errors: "status must be X, actually Y", "already rejected/charging/uninstalled", "cannot ... while running" — what they mean when a library rejects your call — this error's family across 31 libraries.

Related errors


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

Appendix: source

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

    } else {
      throw new RuntimeException( "The Properties systems settings are already initialised!" );
    }
  }

  /**
   * Initialize the properties: load from disk.
   *
   * @param display
   *          The Display
   * @param filename
   *          the filename to use
   */
  public static final void init( String filename ) {
    if ( props == null ) {
      props = new Props( filename );

    } else {
      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!" );

View on GitHub (pinned to f3058517a1)