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(int) is a one-shot static initializer for Kettle's global properties (kettle.properties). It throws RuntimeException if Props has already been initialized, because re-initializing would discard loaded settings.

Solutions

  1. Call Props.init only once per JVM; rely on Props.getInstance() afterwards
  2. Guard calls with a check: if not yet initialized, wrap in try-catch and ignore the second initialization
  3. Test-only: reset the singleton via reflection or restructure code so init happens in one bootstrap location
  4. Move initialization into a single shared bootstrap module used by all components

Example fix

// before
Props.init(Props.TYPE_PROPERTIES_KETTLE); // called in two places
// after
if (!Props.isInitialized()) {
  Props.init(Props.TYPE_PROPERTIES_KETTLE);
}
Defensive patterns

Strategy: try-catch

Validate before calling

// idempotent init helper
public static synchronized void initPropsOnce(int type) {
  try { Props.init(type); } catch (RuntimeException already) { /* ignore */ }
}

Try / catch

try {
  Props.init(Props.TYPE_PROPERTIES_KETTLE);
} catch (RuntimeException e) {
  // already initialized — safe to ignore, use Props.getInstance()
}

Prevention

When it happens

Trigger: Calling Props.init(type) twice in the same JVM — e.g. initializing in both a bootstrap class and a plugin, or re-running init after Props.getInstance() already created the instance.

Common situations: Embedding Pentaho in a long-lived application server where multiple components each call Props.init, unit tests initializing Props in a shared JVM, hot-reloading code that calls init again without resetting the singleton.

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/591c179bbdfba7b5. Report an issue: GitHub.

Appendix: source

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

  public static final int WIDGET_STYLE_NOTEPAD = 3;
  public static final int WIDGET_STYLE_GRAPH = 4;
  public static final int WIDGET_STYLE_TAB = 5;
  public static final int WIDGET_STYLE_TOOLBAR = 6;

  /**
   * Initialize the properties: load from disk.
   *
   * @param display
   *          The Display
   * @param t
   *          The type of properties file.
   */
  public static final void init( int t ) {
    if ( props == null ) {
      props = new Props( t );

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

View on GitHub (pinned to f3058517a1)