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
- Call Props.init only once per JVM; rely on Props.getInstance() afterwards
- Guard calls with a check: if not yet initialized, wrap in try-catch and ignore the second initialization
- Test-only: reset the singleton via reflection or restructure code so init happens in one bootstrap location
- 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
- Call Props.init exactly once, from one bootstrap location
- Prefer Props.getInstance() for all subsequent access
- In shared-JVM test suites, guard init with a static flag or @BeforeClass once-per-suite
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
- Properties, Kettle systems settings, not initialised!
- The properties systems settings are already initialised!
- Central Log Store is not initialized!!!
- Error initializing JNDI
- Error invoking lifecycle listener
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)