pentaho/pentaho-kettle · error · InvocationTargetException

GetDatabaseInfoProgressDialog.Error.GettingInfoTable

Error message

GetDatabaseInfoProgressDialog.Error.GettingInfoTable

What it means

While the GetDatabaseInfoProgressDialog runs, it calls DatabaseMetaInformation.getData() to collect table/schema metadata from the connected database. Any exception thrown during that retrieval is rethrown as an InvocationTargetException whose message is the localized 'GetDatabaseInfoProgressDialog.Error.GettingInfoTable' text plus the underlying exception's toString().

Solutions

  1. Read the cause of the InvocationTargetException for the real JDBC error and fix the connection (network, credentials, URL).
  2. Re-test the connection (DatabaseMeta.testConnection) and verify the database is reachable before opening the dialog.
  3. Grant the database user permission to read metadata catalogs (e.g. SELECT on system tables).
  4. Retry after fixing driver/classpath issues (correct JDBC driver jar on the classpath).

Example fix

// before
new GetDatabaseInfoProgressDialog( shell, loggingObject, dbMeta ).open();
// after
if ( dbMeta.testConnection( loggingObject ).length == 0 ) {
  new GetDatabaseInfoProgressDialog( shell, loggingObject, dbMeta ).open();
} else {
  MessageBox mb = new MessageBox( shell );
  mb.setMessage( "Connection failed; cannot get table info" );
  mb.open();
}
Defensive patterns

Strategy: try-catch

Validate before calling

// verify connection before collecting metadata
String[] problems = dbMeta.testConnection( loggingObject );
boolean ok = ( problems == null || problems.length == 0 );

Try / catch

try {
  new GetDatabaseInfoProgressDialog( shell, loggingObject, dbMeta ).open();
} catch ( InvocationTargetException e ) {
  Throwable cause = e.getCause();
  logError( "Failed to get database table info: " + cause, cause );
}

Prevention

When it happens

Trigger: Calling new GetDatabaseInfoProgressDialog(shell, loggingObject, dbMeta).open() when dmi.getData(...) throws — e.g. the connection dropped, the user lacks metadata privileges, or the driver fails while listing tables/columns.

Common situations: Exploring database tables in Spoon after the connection was closed or timed out; connecting with an account lacking SELECT permission on system catalogs; JDBC driver quirks (e.g. Oracle dictionary access denied).

Understand the failure class

Background: Database query failed: Internal Server Error 500s wrapping SQL, Prisma, and connection failures — what to check first — this error's family across 16 libraries.

Related errors


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

Appendix: source

Thrown at ui/src/main/java/org/pentaho/di/ui/core/database/dialog/GetDatabaseInfoProgressDialog.java:91

  }

  private void notifyDatabaseProgress( IProgressMonitor progressMonitor ) {
    listeners.forEach( listener -> listener.databaseInfoProgressFinished( progressMonitor ) );
  }

  @VisibleForTesting
  protected ProgressMonitorDialog newProgressMonitorDialog() {
    return new ProgressMonitorDialog( shell );
  }

  public DatabaseMetaInformation open() {
    final DatabaseMetaInformation dmi = new DatabaseMetaInformation( dbInfo );
    IRunnableWithProgress op = new IRunnableWithProgress() {
      public void run( IProgressMonitor monitor ) throws InvocationTargetException, InterruptedException {
        try {
          dmi.getData( Spoon.loggingObject, new ProgressMonitorAdapter( monitor ) );
        } catch ( Exception e ) {
          throw new InvocationTargetException( e, BaseMessages.getString(
            PKG, "GetDatabaseInfoProgressDialog.Error.GettingInfoTable", e.toString() ) );
        }
      }
    };

    try {
      ProgressMonitorDialog pmd = newProgressMonitorDialog();
      pmd.run( true, true, op );
      notifyDatabaseProgress( pmd.getProgressMonitor() );
    } catch ( InvocationTargetException e ) {
      showErrorDialog( e );
      return null;
    } catch ( InterruptedException e ) {
      showErrorDialog( e );
      return null;
    }

    return dmi;

View on GitHub (pinned to f3058517a1)