@Test public void testTransStoppedListenersConcurrentModification() throws InterruptedException { CountDownLatch start = new CountDownLatch( 1 ); TransStoppedCaller stopper = new TransStoppedCaller( trans, start ); TransStopListenerAdder adder = new TransStopListenerAdder( trans, start ); startThreads( stopper, adder, start ); assertEquals( "All transformation stop listeners is added", count, adder.c ); assertEquals( "All stop call success", count, stopper.c ); }
public void startThreads() throws KettleException { nrOfFinishedSteps = 0; nrOfActiveSteps = 0; ExtensionPointHandler.callExtensionPoint( log, KettleExtensionPoint.TransformationStartThreads.id, this ); fireTransStartedListeners(); for ( int i = 0; i < steps.size(); i++ ) { final StepMetaDataCombi sid = steps.get( i ); sid.step.markStart(); sid.step.initBeforeStart(); StepListener stepListener = new StepListener() { @Override public void stepActive( Trans trans, StepMeta stepMeta, StepInterface step ) { nrOfActiveSteps++; if ( nrOfActiveSteps == 1 ) { synchronized ( transListeners ) { for ( TransListener listener : transListeners ) { listener.transActive( Trans.this ); } } } } @Override public void stepFinished( Trans trans, StepMeta stepMeta, StepInterface step ) { synchronized ( Trans.this ) { nrOfFinishedSteps++; if ( nrOfFinishedSteps >= steps.size() ) { setFinished( true ); addStepPerformanceSnapShot(); try { fireTransFinishedListeners(); } catch ( Exception e ) { step.setErrors( step.getErrors() + 1L ); log.logError( getName() + " : " + BaseMessages.getString( PKG, "Trans.Log.UnexpectedErrorAtTransformationEnd" ), e ); } } if ( step.getErrors() > 0 ) { log.logMinimal( BaseMessages.getString( PKG, "Trans.Log.TransformationDetectedErrors" ) ); log.logMinimal( BaseMessages.getString( PKG, "Trans.Log.TransformationIsKillingTheOtherSteps" ) ); killAllNoWait(); } } } }; if ( sid.step instanceof BaseStep ) { ( (BaseStep) sid.step ).getStepListeners().add( 0, stepListener ); } else { sid.step.addStepListener( stepListener ); } } if ( transMeta.isCapturingStepPerformanceSnapShots() ) { stepPerformanceSnapshotSeqNr = new AtomicInteger( 0 ); stepPerformanceSnapShots = new ConcurrentHashMap<>(); String limitString = environmentSubstitute( transMeta.getStepPerformanceCapturingSizeLimit() ); if ( Utils.isEmpty( limitString ) ) { limitString = EnvUtil.getSystemProperty( Const.KETTLE_STEP_PERFORMANCE_SNAPSHOT_LIMIT ); } stepPerformanceSnapshotSizeLimit = Const.toInt( limitString, 0 ); stepPerformanceSnapShotTimer = new Timer( "stepPerformanceSnapShot Timer: " + transMeta.getName() ); TimerTask timerTask = new TimerTask() { @Override public void run() { if ( !isFinished() ) { addStepPerformanceSnapShot(); } } }; stepPerformanceSnapShotTimer.schedule( timerTask, 100, transMeta.getStepPerformanceCapturingDelay() ); } setFinished( false ); setPaused( false ); setStopped( false ); transFinishedBlockingQueue = new ArrayBlockingQueue<>( 10 ); TransListener transListener = new TransAdapter() { @Override public void transFinished( Trans trans ) { try { shutdownHeartbeat( trans != null ? trans.heartbeat : null ); ExtensionPointHandler.callExtensionPoint( log, KettleExtensionPoint.TransformationFinish.id, trans ); } catch ( KettleException e ) { throw new RuntimeException( "Error calling extension point at end of transformation", e ); } if ( transMeta.isCapturingStepPerformanceSnapShots() && stepPerformanceSnapShotTimer != null ) { stepPerformanceSnapShotTimer.cancel(); } transMeta.disposeEmbeddedMetastoreProvider(); setFinished( true ); setRunning( false ); log.snap( Metrics.METRIC_TRANSFORMATION_EXECUTION_STOP ); MetricsLogTable metricsLogTable = transMeta.getMetricsLogTable(); if ( metricsLogTable.isDefined() ) { try { writeMetricsInformation(); } catch ( Exception e ) { log.logError( "Error writing metrics information", e ); errors.incrementAndGet(); } } if ( transMeta.isUsingUniqueConnections() ) { trans.closeUniqueDatabaseConnections( getResult() ); } } }; transListeners.add( 0, transListener ); setRunning( true ); switch ( transMeta.getTransformationType() ) { case Normal: for ( int i = 0; i < steps.size(); i++ ) { final StepMetaDataCombi combi = steps.get( i ); RunThread runThread = new RunThread( combi ); Thread thread = new Thread( runThread ); thread.setName( getName() + " - " + combi.stepname ); ExtensionPointHandler.callExtensionPoint( log, KettleExtensionPoint.StepBeforeStart.id, combi ); combi.step.addStepListener( new StepAdapter() { @Override public void stepFinished( Trans trans, StepMeta stepMeta, StepInterface step ) { try { ExtensionPointHandler.callExtensionPoint( log, KettleExtensionPoint.StepFinished.id, combi ); } catch ( KettleException e ) { throw new RuntimeException( "Unexpected error in calling extension point upon step finish", e ); } } } ); thread.start(); } break; case SerialSingleThreaded: new Thread( new Runnable() { @Override public void run() { try { for ( StepMetaDataCombi combi : steps ) { combi.step.setUsingThreadPriorityManagment( false ); } Collections.sort( steps, new Comparator<StepMetaDataCombi>() { @Override public int compare( StepMetaDataCombi c1, StepMetaDataCombi c2 ) { boolean c1BeforeC2 = transMeta.findPrevious( c2.stepMeta, c1.stepMeta ); if ( c1BeforeC2 ) { return -1; } else { return 1; } } } ); boolean[] stepDone = new boolean[steps.size()]; int nrDone = 0; while ( nrDone < steps.size() && !isStopped() ) { for ( int i = 0; i < steps.size() && !isStopped(); i++ ) { StepMetaDataCombi combi = steps.get( i ); if ( !stepDone[i] ) { boolean cont = combi.step.processRow( combi.meta, combi.data ); if ( !cont ) { stepDone[i] = true; nrDone++; } } } } } catch ( Exception e ) { errors.addAndGet( 1 ); log.logError( "Error executing single threaded", e ); } finally { for ( int i = 0; i < steps.size(); i++ ) { StepMetaDataCombi combi = steps.get( i ); combi.step.dispose( combi.meta, combi.data ); combi.step.markStop(); } } } } ).start(); break; case SingleThreaded: break; default: break; } ExtensionPointHandler.callExtensionPoint( log, KettleExtensionPoint.TransformationStart.id, this ); heartbeat = startHeartbeat( getHeartbeatIntervalInSeconds() ); if ( steps.isEmpty() ) { fireTransFinishedListeners(); } if ( log.isDetailed() ) { log.logDetailed( BaseMessages.getString( PKG, "Trans.Log.TransformationHasAllocated", String.valueOf( steps .size() ), String.valueOf( rowsets.size() ) ) ); } }
Trans implements VariableSpace, NamedParams, HasLogChannelInterface, LoggingObjectInterface,
    ExecutorInterface, ExtensionDataInterface { public void startThreads() throws KettleException { nrOfFinishedSteps = 0; nrOfActiveSteps = 0; ExtensionPointHandler.callExtensionPoint( log, KettleExtensionPoint.TransformationStartThreads.id, this ); fireTransStartedListeners(); for ( int i = 0; i < steps.size(); i++ ) { final StepMetaDataCombi sid = steps.get( i ); sid.step.markStart(); sid.step.initBeforeStart(); StepListener stepListener = new StepListener() { @Override public void stepActive( Trans trans, StepMeta stepMeta, StepInterface step ) { nrOfActiveSteps++; if ( nrOfActiveSteps == 1 ) { synchronized ( transListeners ) { for ( TransListener listener : transListeners ) { listener.transActive( Trans.this ); } } } } @Override public void stepFinished( Trans trans, StepMeta stepMeta, StepInterface step ) { synchronized ( Trans.this ) { nrOfFinishedSteps++; if ( nrOfFinishedSteps >= steps.size() ) { setFinished( true ); addStepPerformanceSnapShot(); try { fireTransFinishedListeners(); } catch ( Exception e ) { step.setErrors( step.getErrors() + 1L ); log.logError( getName() + " : " + BaseMessages.getString( PKG, "Trans.Log.UnexpectedErrorAtTransformationEnd" ), e ); } } if ( step.getErrors() > 0 ) { log.logMinimal( BaseMessages.getString( PKG, "Trans.Log.TransformationDetectedErrors" ) ); log.logMinimal( BaseMessages.getString( PKG, "Trans.Log.TransformationIsKillingTheOtherSteps" ) ); killAllNoWait(); } } } }; if ( sid.step instanceof BaseStep ) { ( (BaseStep) sid.step ).getStepListeners().add( 0, stepListener ); } else { sid.step.addStepListener( stepListener ); } } if ( transMeta.isCapturingStepPerformanceSnapShots() ) { stepPerformanceSnapshotSeqNr = new AtomicInteger( 0 ); stepPerformanceSnapShots = new ConcurrentHashMap<>(); String limitString = environmentSubstitute( transMeta.getStepPerformanceCapturingSizeLimit() ); if ( Utils.isEmpty( limitString ) ) { limitString = EnvUtil.getSystemProperty( Const.KETTLE_STEP_PERFORMANCE_SNAPSHOT_LIMIT ); } stepPerformanceSnapshotSizeLimit = Const.toInt( limitString, 0 ); stepPerformanceSnapShotTimer = new Timer( "stepPerformanceSnapShot Timer: " + transMeta.getName() ); TimerTask timerTask = new TimerTask() { @Override public void run() { if ( !isFinished() ) { addStepPerformanceSnapShot(); } } }; stepPerformanceSnapShotTimer.schedule( timerTask, 100, transMeta.getStepPerformanceCapturingDelay() ); } setFinished( false ); setPaused( false ); setStopped( false ); transFinishedBlockingQueue = new ArrayBlockingQueue<>( 10 ); TransListener transListener = new TransAdapter() { @Override public void transFinished( Trans trans ) { try { shutdownHeartbeat( trans != null ? trans.heartbeat : null ); ExtensionPointHandler.callExtensionPoint( log, KettleExtensionPoint.TransformationFinish.id, trans ); } catch ( KettleException e ) { throw new RuntimeException( "Error calling extension point at end of transformation", e ); } if ( transMeta.isCapturingStepPerformanceSnapShots() && stepPerformanceSnapShotTimer != null ) { stepPerformanceSnapShotTimer.cancel(); } transMeta.disposeEmbeddedMetastoreProvider(); setFinished( true ); setRunning( false ); log.snap( Metrics.METRIC_TRANSFORMATION_EXECUTION_STOP ); MetricsLogTable metricsLogTable = transMeta.getMetricsLogTable(); if ( metricsLogTable.isDefined() ) { try { writeMetricsInformation(); } catch ( Exception e ) { log.logError( "Error writing metrics information", e ); errors.incrementAndGet(); } } if ( transMeta.isUsingUniqueConnections() ) { trans.closeUniqueDatabaseConnections( getResult() ); } } }; transListeners.add( 0, transListener ); setRunning( true ); switch ( transMeta.getTransformationType() ) { case Normal: for ( int i = 0; i < steps.size(); i++ ) { final StepMetaDataCombi combi = steps.get( i ); RunThread runThread = new RunThread( combi ); Thread thread = new Thread( runThread ); thread.setName( getName() + " - " + combi.stepname ); ExtensionPointHandler.callExtensionPoint( log, KettleExtensionPoint.StepBeforeStart.id, combi ); combi.step.addStepListener( new StepAdapter() { @Override public void stepFinished( Trans trans, StepMeta stepMeta, StepInterface step ) { try { ExtensionPointHandler.callExtensionPoint( log, KettleExtensionPoint.StepFinished.id, combi ); } catch ( KettleException e ) { throw new RuntimeException( "Unexpected error in calling extension point upon step finish", e ); } } } ); thread.start(); } break; case SerialSingleThreaded: new Thread( new Runnable() { @Override public void run() { try { for ( StepMetaDataCombi combi : steps ) { combi.step.setUsingThreadPriorityManagment( false ); } Collections.sort( steps, new Comparator<StepMetaDataCombi>() { @Override public int compare( StepMetaDataCombi c1, StepMetaDataCombi c2 ) { boolean c1BeforeC2 = transMeta.findPrevious( c2.stepMeta, c1.stepMeta ); if ( c1BeforeC2 ) { return -1; } else { return 1; } } } ); boolean[] stepDone = new boolean[steps.size()]; int nrDone = 0; while ( nrDone < steps.size() && !isStopped() ) { for ( int i = 0; i < steps.size() && !isStopped(); i++ ) { StepMetaDataCombi combi = steps.get( i ); if ( !stepDone[i] ) { boolean cont = combi.step.processRow( combi.meta, combi.data ); if ( !cont ) { stepDone[i] = true; nrDone++; } } } } } catch ( Exception e ) { errors.addAndGet( 1 ); log.logError( "Error executing single threaded", e ); } finally { for ( int i = 0; i < steps.size(); i++ ) { StepMetaDataCombi combi = steps.get( i ); combi.step.dispose( combi.meta, combi.data ); combi.step.markStop(); } } } } ).start(); break; case SingleThreaded: break; default: break; } ExtensionPointHandler.callExtensionPoint( log, KettleExtensionPoint.TransformationStart.id, this ); heartbeat = startHeartbeat( getHeartbeatIntervalInSeconds() ); if ( steps.isEmpty() ) { fireTransFinishedListeners(); } if ( log.isDetailed() ) { log.logDetailed( BaseMessages.getString( PKG, "Trans.Log.TransformationHasAllocated", String.valueOf( steps .size() ), String.valueOf( rowsets.size() ) ) ); } } }
Trans implements VariableSpace, NamedParams, HasLogChannelInterface, LoggingObjectInterface,
    ExecutorInterface, ExtensionDataInterface { public void startThreads() throws KettleException { nrOfFinishedSteps = 0; nrOfActiveSteps = 0; ExtensionPointHandler.callExtensionPoint( log, KettleExtensionPoint.TransformationStartThreads.id, this ); fireTransStartedListeners(); for ( int i = 0; i < steps.size(); i++ ) { final StepMetaDataCombi sid = steps.get( i ); sid.step.markStart(); sid.step.initBeforeStart(); StepListener stepListener = new StepListener() { @Override public void stepActive( Trans trans, StepMeta stepMeta, StepInterface step ) { nrOfActiveSteps++; if ( nrOfActiveSteps == 1 ) { synchronized ( transListeners ) { for ( TransListener listener : transListeners ) { listener.transActive( Trans.this ); } } } } @Override public void stepFinished( Trans trans, StepMeta stepMeta, StepInterface step ) { synchronized ( Trans.this ) { nrOfFinishedSteps++; if ( nrOfFinishedSteps >= steps.size() ) { setFinished( true ); addStepPerformanceSnapShot(); try { fireTransFinishedListeners(); } catch ( Exception e ) { step.setErrors( step.getErrors() + 1L ); log.logError( getName() + " : " + BaseMessages.getString( PKG, "Trans.Log.UnexpectedErrorAtTransformationEnd" ), e ); } } if ( step.getErrors() > 0 ) { log.logMinimal( BaseMessages.getString( PKG, "Trans.Log.TransformationDetectedErrors" ) ); log.logMinimal( BaseMessages.getString( PKG, "Trans.Log.TransformationIsKillingTheOtherSteps" ) ); killAllNoWait(); } } } }; if ( sid.step instanceof BaseStep ) { ( (BaseStep) sid.step ).getStepListeners().add( 0, stepListener ); } else { sid.step.addStepListener( stepListener ); } } if ( transMeta.isCapturingStepPerformanceSnapShots() ) { stepPerformanceSnapshotSeqNr = new AtomicInteger( 0 ); stepPerformanceSnapShots = new ConcurrentHashMap<>(); String limitString = environmentSubstitute( transMeta.getStepPerformanceCapturingSizeLimit() ); if ( Utils.isEmpty( limitString ) ) { limitString = EnvUtil.getSystemProperty( Const.KETTLE_STEP_PERFORMANCE_SNAPSHOT_LIMIT ); } stepPerformanceSnapshotSizeLimit = Const.toInt( limitString, 0 ); stepPerformanceSnapShotTimer = new Timer( "stepPerformanceSnapShot Timer: " + transMeta.getName() ); TimerTask timerTask = new TimerTask() { @Override public void run() { if ( !isFinished() ) { addStepPerformanceSnapShot(); } } }; stepPerformanceSnapShotTimer.schedule( timerTask, 100, transMeta.getStepPerformanceCapturingDelay() ); } setFinished( false ); setPaused( false ); setStopped( false ); transFinishedBlockingQueue = new ArrayBlockingQueue<>( 10 ); TransListener transListener = new TransAdapter() { @Override public void transFinished( Trans trans ) { try { shutdownHeartbeat( trans != null ? trans.heartbeat : null ); ExtensionPointHandler.callExtensionPoint( log, KettleExtensionPoint.TransformationFinish.id, trans ); } catch ( KettleException e ) { throw new RuntimeException( "Error calling extension point at end of transformation", e ); } if ( transMeta.isCapturingStepPerformanceSnapShots() && stepPerformanceSnapShotTimer != null ) { stepPerformanceSnapShotTimer.cancel(); } transMeta.disposeEmbeddedMetastoreProvider(); setFinished( true ); setRunning( false ); log.snap( Metrics.METRIC_TRANSFORMATION_EXECUTION_STOP ); MetricsLogTable metricsLogTable = transMeta.getMetricsLogTable(); if ( metricsLogTable.isDefined() ) { try { writeMetricsInformation(); } catch ( Exception e ) { log.logError( "Error writing metrics information", e ); errors.incrementAndGet(); } } if ( transMeta.isUsingUniqueConnections() ) { trans.closeUniqueDatabaseConnections( getResult() ); } } }; transListeners.add( 0, transListener ); setRunning( true ); switch ( transMeta.getTransformationType() ) { case Normal: for ( int i = 0; i < steps.size(); i++ ) { final StepMetaDataCombi combi = steps.get( i ); RunThread runThread = new RunThread( combi ); Thread thread = new Thread( runThread ); thread.setName( getName() + " - " + combi.stepname ); ExtensionPointHandler.callExtensionPoint( log, KettleExtensionPoint.StepBeforeStart.id, combi ); combi.step.addStepListener( new StepAdapter() { @Override public void stepFinished( Trans trans, StepMeta stepMeta, StepInterface step ) { try { ExtensionPointHandler.callExtensionPoint( log, KettleExtensionPoint.StepFinished.id, combi ); } catch ( KettleException e ) { throw new RuntimeException( "Unexpected error in calling extension point upon step finish", e ); } } } ); thread.start(); } break; case SerialSingleThreaded: new Thread( new Runnable() { @Override public void run() { try { for ( StepMetaDataCombi combi : steps ) { combi.step.setUsingThreadPriorityManagment( false ); } Collections.sort( steps, new Comparator<StepMetaDataCombi>() { @Override public int compare( StepMetaDataCombi c1, StepMetaDataCombi c2 ) { boolean c1BeforeC2 = transMeta.findPrevious( c2.stepMeta, c1.stepMeta ); if ( c1BeforeC2 ) { return -1; } else { return 1; } } } ); boolean[] stepDone = new boolean[steps.size()]; int nrDone = 0; while ( nrDone < steps.size() && !isStopped() ) { for ( int i = 0; i < steps.size() && !isStopped(); i++ ) { StepMetaDataCombi combi = steps.get( i ); if ( !stepDone[i] ) { boolean cont = combi.step.processRow( combi.meta, combi.data ); if ( !cont ) { stepDone[i] = true; nrDone++; } } } } } catch ( Exception e ) { errors.addAndGet( 1 ); log.logError( "Error executing single threaded", e ); } finally { for ( int i = 0; i < steps.size(); i++ ) { StepMetaDataCombi combi = steps.get( i ); combi.step.dispose( combi.meta, combi.data ); combi.step.markStop(); } } } } ).start(); break; case SingleThreaded: break; default: break; } ExtensionPointHandler.callExtensionPoint( log, KettleExtensionPoint.TransformationStart.id, this ); heartbeat = startHeartbeat( getHeartbeatIntervalInSeconds() ); if ( steps.isEmpty() ) { fireTransFinishedListeners(); } if ( log.isDetailed() ) { log.logDetailed( BaseMessages.getString( PKG, "Trans.Log.TransformationHasAllocated", String.valueOf( steps .size() ), String.valueOf( rowsets.size() ) ) ); } } Trans();  Trans( TransMeta transMeta );  Trans( TransMeta transMeta, LoggingObjectInterface parent ); <Parent extends VariableSpace & NamedParams> Trans( Parent parent, Repository rep, String name, String dirname,
      String filename ); }
Trans implements VariableSpace, NamedParams, HasLogChannelInterface, LoggingObjectInterface,
    ExecutorInterface, ExtensionDataInterface { public void startThreads() throws KettleException { nrOfFinishedSteps = 0; nrOfActiveSteps = 0; ExtensionPointHandler.callExtensionPoint( log, KettleExtensionPoint.TransformationStartThreads.id, this ); fireTransStartedListeners(); for ( int i = 0; i < steps.size(); i++ ) { final StepMetaDataCombi sid = steps.get( i ); sid.step.markStart(); sid.step.initBeforeStart(); StepListener stepListener = new StepListener() { @Override public void stepActive( Trans trans, StepMeta stepMeta, StepInterface step ) { nrOfActiveSteps++; if ( nrOfActiveSteps == 1 ) { synchronized ( transListeners ) { for ( TransListener listener : transListeners ) { listener.transActive( Trans.this ); } } } } @Override public void stepFinished( Trans trans, StepMeta stepMeta, StepInterface step ) { synchronized ( Trans.this ) { nrOfFinishedSteps++; if ( nrOfFinishedSteps >= steps.size() ) { setFinished( true ); addStepPerformanceSnapShot(); try { fireTransFinishedListeners(); } catch ( Exception e ) { step.setErrors( step.getErrors() + 1L ); log.logError( getName() + " : " + BaseMessages.getString( PKG, "Trans.Log.UnexpectedErrorAtTransformationEnd" ), e ); } } if ( step.getErrors() > 0 ) { log.logMinimal( BaseMessages.getString( PKG, "Trans.Log.TransformationDetectedErrors" ) ); log.logMinimal( BaseMessages.getString( PKG, "Trans.Log.TransformationIsKillingTheOtherSteps" ) ); killAllNoWait(); } } } }; if ( sid.step instanceof BaseStep ) { ( (BaseStep) sid.step ).getStepListeners().add( 0, stepListener ); } else { sid.step.addStepListener( stepListener ); } } if ( transMeta.isCapturingStepPerformanceSnapShots() ) { stepPerformanceSnapshotSeqNr = new AtomicInteger( 0 ); stepPerformanceSnapShots = new ConcurrentHashMap<>(); String limitString = environmentSubstitute( transMeta.getStepPerformanceCapturingSizeLimit() ); if ( Utils.isEmpty( limitString ) ) { limitString = EnvUtil.getSystemProperty( Const.KETTLE_STEP_PERFORMANCE_SNAPSHOT_LIMIT ); } stepPerformanceSnapshotSizeLimit = Const.toInt( limitString, 0 ); stepPerformanceSnapShotTimer = new Timer( "stepPerformanceSnapShot Timer: " + transMeta.getName() ); TimerTask timerTask = new TimerTask() { @Override public void run() { if ( !isFinished() ) { addStepPerformanceSnapShot(); } } }; stepPerformanceSnapShotTimer.schedule( timerTask, 100, transMeta.getStepPerformanceCapturingDelay() ); } setFinished( false ); setPaused( false ); setStopped( false ); transFinishedBlockingQueue = new ArrayBlockingQueue<>( 10 ); TransListener transListener = new TransAdapter() { @Override public void transFinished( Trans trans ) { try { shutdownHeartbeat( trans != null ? trans.heartbeat : null ); ExtensionPointHandler.callExtensionPoint( log, KettleExtensionPoint.TransformationFinish.id, trans ); } catch ( KettleException e ) { throw new RuntimeException( "Error calling extension point at end of transformation", e ); } if ( transMeta.isCapturingStepPerformanceSnapShots() && stepPerformanceSnapShotTimer != null ) { stepPerformanceSnapShotTimer.cancel(); } transMeta.disposeEmbeddedMetastoreProvider(); setFinished( true ); setRunning( false ); log.snap( Metrics.METRIC_TRANSFORMATION_EXECUTION_STOP ); MetricsLogTable metricsLogTable = transMeta.getMetricsLogTable(); if ( metricsLogTable.isDefined() ) { try { writeMetricsInformation(); } catch ( Exception e ) { log.logError( "Error writing metrics information", e ); errors.incrementAndGet(); } } if ( transMeta.isUsingUniqueConnections() ) { trans.closeUniqueDatabaseConnections( getResult() ); } } }; transListeners.add( 0, transListener ); setRunning( true ); switch ( transMeta.getTransformationType() ) { case Normal: for ( int i = 0; i < steps.size(); i++ ) { final StepMetaDataCombi combi = steps.get( i ); RunThread runThread = new RunThread( combi ); Thread thread = new Thread( runThread ); thread.setName( getName() + " - " + combi.stepname ); ExtensionPointHandler.callExtensionPoint( log, KettleExtensionPoint.StepBeforeStart.id, combi ); combi.step.addStepListener( new StepAdapter() { @Override public void stepFinished( Trans trans, StepMeta stepMeta, StepInterface step ) { try { ExtensionPointHandler.callExtensionPoint( log, KettleExtensionPoint.StepFinished.id, combi ); } catch ( KettleException e ) { throw new RuntimeException( "Unexpected error in calling extension point upon step finish", e ); } } } ); thread.start(); } break; case SerialSingleThreaded: new Thread( new Runnable() { @Override public void run() { try { for ( StepMetaDataCombi combi : steps ) { combi.step.setUsingThreadPriorityManagment( false ); } Collections.sort( steps, new Comparator<StepMetaDataCombi>() { @Override public int compare( StepMetaDataCombi c1, StepMetaDataCombi c2 ) { boolean c1BeforeC2 = transMeta.findPrevious( c2.stepMeta, c1.stepMeta ); if ( c1BeforeC2 ) { return -1; } else { return 1; } } } ); boolean[] stepDone = new boolean[steps.size()]; int nrDone = 0; while ( nrDone < steps.size() && !isStopped() ) { for ( int i = 0; i < steps.size() && !isStopped(); i++ ) { StepMetaDataCombi combi = steps.get( i ); if ( !stepDone[i] ) { boolean cont = combi.step.processRow( combi.meta, combi.data ); if ( !cont ) { stepDone[i] = true; nrDone++; } } } } } catch ( Exception e ) { errors.addAndGet( 1 ); log.logError( "Error executing single threaded", e ); } finally { for ( int i = 0; i < steps.size(); i++ ) { StepMetaDataCombi combi = steps.get( i ); combi.step.dispose( combi.meta, combi.data ); combi.step.markStop(); } } } } ).start(); break; case SingleThreaded: break; default: break; } ExtensionPointHandler.callExtensionPoint( log, KettleExtensionPoint.TransformationStart.id, this ); heartbeat = startHeartbeat( getHeartbeatIntervalInSeconds() ); if ( steps.isEmpty() ) { fireTransFinishedListeners(); } if ( log.isDetailed() ) { log.logDetailed( BaseMessages.getString( PKG, "Trans.Log.TransformationHasAllocated", String.valueOf( steps .size() ), String.valueOf( rowsets.size() ) ) ); } } Trans();  Trans( TransMeta transMeta );  Trans( TransMeta transMeta, LoggingObjectInterface parent ); <Parent extends VariableSpace & NamedParams> Trans( Parent parent, Repository rep, String name, String dirname,
      String filename ); void setParent( LoggingObjectInterface parent ); @Override LogChannelInterface getLogChannel(); void setLog( LogChannelInterface log ); String getName(); void execute( String[] arguments ); void prepareExecution( String[] arguments ); void startThreads(); void cleanup(); void logSummary( StepInterface si ); void waitUntilFinished(); int getErrors(); int getEnded(); boolean isFinished(); boolean isFinishedOrStopped(); @Deprecated void killAll(); void printStats( int seconds ); long getLastProcessed(); RowSet findRowSet( String rowsetname ); RowSet findRowSet( String from, int fromcopy, String to, int tocopy ); boolean hasStepStarted( String sname, int copy ); void stopAll(); int nrSteps(); int nrActiveSteps(); boolean[] getTransStepIsRunningLookup(); StepExecutionStatus[] getTransStepExecutionStatusLookup(); StepInterface getRunThread( int i ); StepInterface getRunThread( String name, int copy ); void calculateBatchIdAndDateRange(); void beginProcessing(); Result getResult(); StepInterface findRunThread( String stepname ); List<StepInterface> findBaseSteps( String stepname ); StepInterface findStepInterface( String stepname, int copyNr ); List<StepInterface> findStepInterfaces( String stepname ); StepDataInterface findDataInterface( String name ); Date getStartDate(); Date getEndDate(); boolean isMonitored(); void setMonitored( boolean monitored ); TransMeta getTransMeta(); void setTransMeta( TransMeta transMeta ); Date getCurrentDate(); Date getDepDate(); Date getLogDate(); List<RowSet> getRowsets(); List<StepMetaDataCombi> getSteps(); @Override String toString(); MappingInput[] findMappingInput(); MappingOutput[] findMappingOutput(); StepInterface getStepInterface( String stepname, int copy ); Date getReplayDate(); void setReplayDate( Date replayDate ); void setSafeModeEnabled( boolean safeModeEnabled ); boolean isSafeModeEnabled(); RowProducer addRowProducer( String stepname, int copynr ); Job getParentJob(); void setParentJob( Job parentJob ); StepDataInterface getStepDataInterface( String stepname, int stepcopy ); boolean hasHaltedSteps(); Date getJobStartDate(); Date getJobEndDate(); void setJobEndDate( Date jobEndDate ); void setJobStartDate( Date jobStartDate ); long getPassedBatchId(); void setPassedBatchId( long jobBatchId ); long getBatchId(); void setBatchId( long batchId ); @Deprecated String getThreadName(); @Deprecated void setThreadName( String threadName ); String getStatus(); boolean isInitializing(); void setInitializing( boolean initializing ); boolean isPreparing(); void setPreparing( boolean preparing ); boolean isRunning(); void setRunning( boolean running ); static TransSplitter executeClustered( final TransMeta transMeta,
      final TransExecutionConfiguration executionConfiguration ); static void executeClustered( final TransSplitter transSplitter,
      final TransExecutionConfiguration executionConfiguration ); static final long monitorClusteredTransformation( LogChannelInterface log, TransSplitter transSplitter,
      Job parentJob ); static final long monitorClusteredTransformation( LogChannelInterface log, TransSplitter transSplitter,
      Job parentJob, int sleepTimeSeconds ); static int cleanupCluster( LogChannelInterface log, TransSplitter transSplitter ); static void cleanupSlaveServer( TransSplitter transSplitter, SlaveServer slaveServer,
      TransMeta slaveTransMeta ); static final Result getClusteredTransformationResult( LogChannelInterface log, TransSplitter transSplitter,
      Job parentJob ); static final Result getClusteredTransformationResult( LogChannelInterface log, TransSplitter transSplitter,
      Job parentJob, boolean loggingRemoteWork ); static String sendToSlaveServer( TransMeta transMeta, TransExecutionConfiguration executionConfiguration,
      Repository repository, IMetaStore metaStore ); boolean isReadyToStart(); void setInternalKettleVariables( VariableSpace var ); @Override void copyVariablesFrom( VariableSpace space ); @Override String environmentSubstitute( String aString ); @Override String[] environmentSubstitute( String[] aString ); @Override String fieldSubstitute( String aString, RowMetaInterface rowMeta, Object[] rowData ); @Override VariableSpace getParentVariableSpace(); @Override void setParentVariableSpace( VariableSpace parent ); @Override String getVariable( String variableName, String defaultValue ); @Override String getVariable( String variableName ); @Override boolean getBooleanValueOfVariable( String variableName, boolean defaultValue ); @Override void initializeVariablesFrom( VariableSpace parent ); @Override String[] listVariables(); @Override void setVariable( String variableName, String variableValue ); @Override void shareVariablesWith( VariableSpace space ); @Override void injectVariables( Map<String, String> prop ); void pauseRunning(); void resumeRunning(); boolean isPreview(); void setPreview( boolean preview ); Repository getRepository(); void setRepository( Repository repository ); Map<String, List<StepPerformanceSnapShot>> getStepPerformanceSnapShots(); void setStepPerformanceSnapShots( Map<String, List<StepPerformanceSnapShot>> stepPerformanceSnapShots ); List<TransListener> getTransListeners(); void setTransListeners( List<TransListener> transListeners ); void addTransListener( TransListener transListener ); void setTransStoppedListeners( List<TransStoppedListener> transStoppedListeners ); List<TransStoppedListener> getTransStoppedListeners(); void addTransStoppedListener( TransStoppedListener transStoppedListener ); boolean isPaused(); void setPaused( boolean paused ); boolean isStopped(); void setStopped( boolean stopped ); static void monitorRemoteTransformation( LogChannelInterface log, String carteObjectId, String transName,
      SlaveServer remoteSlaveServer ); static void monitorRemoteTransformation( LogChannelInterface log, String carteObjectId, String transName,
      SlaveServer remoteSlaveServer, int sleepTimeSeconds ); @Override void addParameterDefinition( String key, String defValue, String description ); @Override String getParameterDefault( String key ); @Override String getParameterDescription( String key ); @Override String getParameterValue( String key ); @Override String[] listParameters(); @Override void setParameterValue( String key, String value ); @Override void eraseParameters(); @Override void clearParameters(); @Override void activateParameters(); @Override void copyParametersFrom( NamedParams params ); Trans getParentTrans(); void setParentTrans( Trans parentTrans ); String getMappingStepName(); void setMappingStepName( String mappingStepName ); void setSocketRepository( SocketRepository socketRepository ); SocketRepository getSocketRepository(); @Override String getObjectName(); @Override String getObjectCopy(); @Override String getFilename(); @Override String getLogChannelId(); @Override ObjectId getObjectId(); @Override ObjectRevision getObjectRevision(); @Override LoggingObjectType getObjectType(); @Override LoggingObjectInterface getParent(); @Override RepositoryDirectoryInterface getRepositoryDirectory(); @Override LogLevel getLogLevel(); void setLogLevel( LogLevel logLevel ); List<LoggingHierarchy> getLoggingHierarchy(); @Deprecated Map<String, Trans> getActiveSubtransformations(); void addActiveSubTransformation( final String subTransName, Trans subTrans ); Trans removeActiveSubTransformation( final String subTransName ); Trans getActiveSubTransformation( final String subTransName ); Map<String, Job> getActiveSubjobs(); @Override String getContainerObjectId(); void setContainerObjectId( String containerObjectId ); @Override Date getRegistrationDate(); void setServletPrintWriter( PrintWriter servletPrintWriter ); PrintWriter getServletPrintWriter(); @Override String getExecutingServer(); @Override void setExecutingServer( String executingServer ); @Override String getExecutingUser(); @Override void setExecutingUser( String executingUser ); @Override boolean isGatheringMetrics(); @Override void setGatheringMetrics( boolean gatheringMetrics ); @Override boolean isForcingSeparateLogging(); @Override void setForcingSeparateLogging( boolean forcingSeparateLogging ); List<ResultFile> getResultFiles(); void setResultFiles( List<ResultFile> resultFiles ); List<RowMetaAndData> getResultRows(); void setResultRows( List<RowMetaAndData> resultRows ); Result getPreviousResult(); void setPreviousResult( Result previousResult ); Hashtable<String, Counter> getCounters(); void setCounters( Hashtable<String, Counter> counters ); String[] getArguments(); void setArguments( String[] arguments ); void clearError(); String getTransactionId(); void setTransactionId( String transactionId ); String calculateTransactionId(); IMetaStore getMetaStore(); void setMetaStore( IMetaStore metaStore ); void setServletReponse( HttpServletResponse response ); HttpServletResponse getServletResponse(); void setServletRequest( HttpServletRequest request ); HttpServletRequest getServletRequest(); List<DelegationListener> getDelegationListeners(); void setDelegationListeners( List<DelegationListener> delegationListeners ); void addDelegationListener( DelegationListener delegationListener ); synchronized void doTopologySortOfSteps(); @Override Map<String, Object> getExtensionDataMap(); }
Trans implements VariableSpace, NamedParams, HasLogChannelInterface, LoggingObjectInterface,
    ExecutorInterface, ExtensionDataInterface { public void startThreads() throws KettleException { nrOfFinishedSteps = 0; nrOfActiveSteps = 0; ExtensionPointHandler.callExtensionPoint( log, KettleExtensionPoint.TransformationStartThreads.id, this ); fireTransStartedListeners(); for ( int i = 0; i < steps.size(); i++ ) { final StepMetaDataCombi sid = steps.get( i ); sid.step.markStart(); sid.step.initBeforeStart(); StepListener stepListener = new StepListener() { @Override public void stepActive( Trans trans, StepMeta stepMeta, StepInterface step ) { nrOfActiveSteps++; if ( nrOfActiveSteps == 1 ) { synchronized ( transListeners ) { for ( TransListener listener : transListeners ) { listener.transActive( Trans.this ); } } } } @Override public void stepFinished( Trans trans, StepMeta stepMeta, StepInterface step ) { synchronized ( Trans.this ) { nrOfFinishedSteps++; if ( nrOfFinishedSteps >= steps.size() ) { setFinished( true ); addStepPerformanceSnapShot(); try { fireTransFinishedListeners(); } catch ( Exception e ) { step.setErrors( step.getErrors() + 1L ); log.logError( getName() + " : " + BaseMessages.getString( PKG, "Trans.Log.UnexpectedErrorAtTransformationEnd" ), e ); } } if ( step.getErrors() > 0 ) { log.logMinimal( BaseMessages.getString( PKG, "Trans.Log.TransformationDetectedErrors" ) ); log.logMinimal( BaseMessages.getString( PKG, "Trans.Log.TransformationIsKillingTheOtherSteps" ) ); killAllNoWait(); } } } }; if ( sid.step instanceof BaseStep ) { ( (BaseStep) sid.step ).getStepListeners().add( 0, stepListener ); } else { sid.step.addStepListener( stepListener ); } } if ( transMeta.isCapturingStepPerformanceSnapShots() ) { stepPerformanceSnapshotSeqNr = new AtomicInteger( 0 ); stepPerformanceSnapShots = new ConcurrentHashMap<>(); String limitString = environmentSubstitute( transMeta.getStepPerformanceCapturingSizeLimit() ); if ( Utils.isEmpty( limitString ) ) { limitString = EnvUtil.getSystemProperty( Const.KETTLE_STEP_PERFORMANCE_SNAPSHOT_LIMIT ); } stepPerformanceSnapshotSizeLimit = Const.toInt( limitString, 0 ); stepPerformanceSnapShotTimer = new Timer( "stepPerformanceSnapShot Timer: " + transMeta.getName() ); TimerTask timerTask = new TimerTask() { @Override public void run() { if ( !isFinished() ) { addStepPerformanceSnapShot(); } } }; stepPerformanceSnapShotTimer.schedule( timerTask, 100, transMeta.getStepPerformanceCapturingDelay() ); } setFinished( false ); setPaused( false ); setStopped( false ); transFinishedBlockingQueue = new ArrayBlockingQueue<>( 10 ); TransListener transListener = new TransAdapter() { @Override public void transFinished( Trans trans ) { try { shutdownHeartbeat( trans != null ? trans.heartbeat : null ); ExtensionPointHandler.callExtensionPoint( log, KettleExtensionPoint.TransformationFinish.id, trans ); } catch ( KettleException e ) { throw new RuntimeException( "Error calling extension point at end of transformation", e ); } if ( transMeta.isCapturingStepPerformanceSnapShots() && stepPerformanceSnapShotTimer != null ) { stepPerformanceSnapShotTimer.cancel(); } transMeta.disposeEmbeddedMetastoreProvider(); setFinished( true ); setRunning( false ); log.snap( Metrics.METRIC_TRANSFORMATION_EXECUTION_STOP ); MetricsLogTable metricsLogTable = transMeta.getMetricsLogTable(); if ( metricsLogTable.isDefined() ) { try { writeMetricsInformation(); } catch ( Exception e ) { log.logError( "Error writing metrics information", e ); errors.incrementAndGet(); } } if ( transMeta.isUsingUniqueConnections() ) { trans.closeUniqueDatabaseConnections( getResult() ); } } }; transListeners.add( 0, transListener ); setRunning( true ); switch ( transMeta.getTransformationType() ) { case Normal: for ( int i = 0; i < steps.size(); i++ ) { final StepMetaDataCombi combi = steps.get( i ); RunThread runThread = new RunThread( combi ); Thread thread = new Thread( runThread ); thread.setName( getName() + " - " + combi.stepname ); ExtensionPointHandler.callExtensionPoint( log, KettleExtensionPoint.StepBeforeStart.id, combi ); combi.step.addStepListener( new StepAdapter() { @Override public void stepFinished( Trans trans, StepMeta stepMeta, StepInterface step ) { try { ExtensionPointHandler.callExtensionPoint( log, KettleExtensionPoint.StepFinished.id, combi ); } catch ( KettleException e ) { throw new RuntimeException( "Unexpected error in calling extension point upon step finish", e ); } } } ); thread.start(); } break; case SerialSingleThreaded: new Thread( new Runnable() { @Override public void run() { try { for ( StepMetaDataCombi combi : steps ) { combi.step.setUsingThreadPriorityManagment( false ); } Collections.sort( steps, new Comparator<StepMetaDataCombi>() { @Override public int compare( StepMetaDataCombi c1, StepMetaDataCombi c2 ) { boolean c1BeforeC2 = transMeta.findPrevious( c2.stepMeta, c1.stepMeta ); if ( c1BeforeC2 ) { return -1; } else { return 1; } } } ); boolean[] stepDone = new boolean[steps.size()]; int nrDone = 0; while ( nrDone < steps.size() && !isStopped() ) { for ( int i = 0; i < steps.size() && !isStopped(); i++ ) { StepMetaDataCombi combi = steps.get( i ); if ( !stepDone[i] ) { boolean cont = combi.step.processRow( combi.meta, combi.data ); if ( !cont ) { stepDone[i] = true; nrDone++; } } } } } catch ( Exception e ) { errors.addAndGet( 1 ); log.logError( "Error executing single threaded", e ); } finally { for ( int i = 0; i < steps.size(); i++ ) { StepMetaDataCombi combi = steps.get( i ); combi.step.dispose( combi.meta, combi.data ); combi.step.markStop(); } } } } ).start(); break; case SingleThreaded: break; default: break; } ExtensionPointHandler.callExtensionPoint( log, KettleExtensionPoint.TransformationStart.id, this ); heartbeat = startHeartbeat( getHeartbeatIntervalInSeconds() ); if ( steps.isEmpty() ) { fireTransFinishedListeners(); } if ( log.isDetailed() ) { log.logDetailed( BaseMessages.getString( PKG, "Trans.Log.TransformationHasAllocated", String.valueOf( steps .size() ), String.valueOf( rowsets.size() ) ) ); } } Trans();  Trans( TransMeta transMeta );  Trans( TransMeta transMeta, LoggingObjectInterface parent ); <Parent extends VariableSpace & NamedParams> Trans( Parent parent, Repository rep, String name, String dirname,
      String filename ); void setParent( LoggingObjectInterface parent ); @Override LogChannelInterface getLogChannel(); void setLog( LogChannelInterface log ); String getName(); void execute( String[] arguments ); void prepareExecution( String[] arguments ); void startThreads(); void cleanup(); void logSummary( StepInterface si ); void waitUntilFinished(); int getErrors(); int getEnded(); boolean isFinished(); boolean isFinishedOrStopped(); @Deprecated void killAll(); void printStats( int seconds ); long getLastProcessed(); RowSet findRowSet( String rowsetname ); RowSet findRowSet( String from, int fromcopy, String to, int tocopy ); boolean hasStepStarted( String sname, int copy ); void stopAll(); int nrSteps(); int nrActiveSteps(); boolean[] getTransStepIsRunningLookup(); StepExecutionStatus[] getTransStepExecutionStatusLookup(); StepInterface getRunThread( int i ); StepInterface getRunThread( String name, int copy ); void calculateBatchIdAndDateRange(); void beginProcessing(); Result getResult(); StepInterface findRunThread( String stepname ); List<StepInterface> findBaseSteps( String stepname ); StepInterface findStepInterface( String stepname, int copyNr ); List<StepInterface> findStepInterfaces( String stepname ); StepDataInterface findDataInterface( String name ); Date getStartDate(); Date getEndDate(); boolean isMonitored(); void setMonitored( boolean monitored ); TransMeta getTransMeta(); void setTransMeta( TransMeta transMeta ); Date getCurrentDate(); Date getDepDate(); Date getLogDate(); List<RowSet> getRowsets(); List<StepMetaDataCombi> getSteps(); @Override String toString(); MappingInput[] findMappingInput(); MappingOutput[] findMappingOutput(); StepInterface getStepInterface( String stepname, int copy ); Date getReplayDate(); void setReplayDate( Date replayDate ); void setSafeModeEnabled( boolean safeModeEnabled ); boolean isSafeModeEnabled(); RowProducer addRowProducer( String stepname, int copynr ); Job getParentJob(); void setParentJob( Job parentJob ); StepDataInterface getStepDataInterface( String stepname, int stepcopy ); boolean hasHaltedSteps(); Date getJobStartDate(); Date getJobEndDate(); void setJobEndDate( Date jobEndDate ); void setJobStartDate( Date jobStartDate ); long getPassedBatchId(); void setPassedBatchId( long jobBatchId ); long getBatchId(); void setBatchId( long batchId ); @Deprecated String getThreadName(); @Deprecated void setThreadName( String threadName ); String getStatus(); boolean isInitializing(); void setInitializing( boolean initializing ); boolean isPreparing(); void setPreparing( boolean preparing ); boolean isRunning(); void setRunning( boolean running ); static TransSplitter executeClustered( final TransMeta transMeta,
      final TransExecutionConfiguration executionConfiguration ); static void executeClustered( final TransSplitter transSplitter,
      final TransExecutionConfiguration executionConfiguration ); static final long monitorClusteredTransformation( LogChannelInterface log, TransSplitter transSplitter,
      Job parentJob ); static final long monitorClusteredTransformation( LogChannelInterface log, TransSplitter transSplitter,
      Job parentJob, int sleepTimeSeconds ); static int cleanupCluster( LogChannelInterface log, TransSplitter transSplitter ); static void cleanupSlaveServer( TransSplitter transSplitter, SlaveServer slaveServer,
      TransMeta slaveTransMeta ); static final Result getClusteredTransformationResult( LogChannelInterface log, TransSplitter transSplitter,
      Job parentJob ); static final Result getClusteredTransformationResult( LogChannelInterface log, TransSplitter transSplitter,
      Job parentJob, boolean loggingRemoteWork ); static String sendToSlaveServer( TransMeta transMeta, TransExecutionConfiguration executionConfiguration,
      Repository repository, IMetaStore metaStore ); boolean isReadyToStart(); void setInternalKettleVariables( VariableSpace var ); @Override void copyVariablesFrom( VariableSpace space ); @Override String environmentSubstitute( String aString ); @Override String[] environmentSubstitute( String[] aString ); @Override String fieldSubstitute( String aString, RowMetaInterface rowMeta, Object[] rowData ); @Override VariableSpace getParentVariableSpace(); @Override void setParentVariableSpace( VariableSpace parent ); @Override String getVariable( String variableName, String defaultValue ); @Override String getVariable( String variableName ); @Override boolean getBooleanValueOfVariable( String variableName, boolean defaultValue ); @Override void initializeVariablesFrom( VariableSpace parent ); @Override String[] listVariables(); @Override void setVariable( String variableName, String variableValue ); @Override void shareVariablesWith( VariableSpace space ); @Override void injectVariables( Map<String, String> prop ); void pauseRunning(); void resumeRunning(); boolean isPreview(); void setPreview( boolean preview ); Repository getRepository(); void setRepository( Repository repository ); Map<String, List<StepPerformanceSnapShot>> getStepPerformanceSnapShots(); void setStepPerformanceSnapShots( Map<String, List<StepPerformanceSnapShot>> stepPerformanceSnapShots ); List<TransListener> getTransListeners(); void setTransListeners( List<TransListener> transListeners ); void addTransListener( TransListener transListener ); void setTransStoppedListeners( List<TransStoppedListener> transStoppedListeners ); List<TransStoppedListener> getTransStoppedListeners(); void addTransStoppedListener( TransStoppedListener transStoppedListener ); boolean isPaused(); void setPaused( boolean paused ); boolean isStopped(); void setStopped( boolean stopped ); static void monitorRemoteTransformation( LogChannelInterface log, String carteObjectId, String transName,
      SlaveServer remoteSlaveServer ); static void monitorRemoteTransformation( LogChannelInterface log, String carteObjectId, String transName,
      SlaveServer remoteSlaveServer, int sleepTimeSeconds ); @Override void addParameterDefinition( String key, String defValue, String description ); @Override String getParameterDefault( String key ); @Override String getParameterDescription( String key ); @Override String getParameterValue( String key ); @Override String[] listParameters(); @Override void setParameterValue( String key, String value ); @Override void eraseParameters(); @Override void clearParameters(); @Override void activateParameters(); @Override void copyParametersFrom( NamedParams params ); Trans getParentTrans(); void setParentTrans( Trans parentTrans ); String getMappingStepName(); void setMappingStepName( String mappingStepName ); void setSocketRepository( SocketRepository socketRepository ); SocketRepository getSocketRepository(); @Override String getObjectName(); @Override String getObjectCopy(); @Override String getFilename(); @Override String getLogChannelId(); @Override ObjectId getObjectId(); @Override ObjectRevision getObjectRevision(); @Override LoggingObjectType getObjectType(); @Override LoggingObjectInterface getParent(); @Override RepositoryDirectoryInterface getRepositoryDirectory(); @Override LogLevel getLogLevel(); void setLogLevel( LogLevel logLevel ); List<LoggingHierarchy> getLoggingHierarchy(); @Deprecated Map<String, Trans> getActiveSubtransformations(); void addActiveSubTransformation( final String subTransName, Trans subTrans ); Trans removeActiveSubTransformation( final String subTransName ); Trans getActiveSubTransformation( final String subTransName ); Map<String, Job> getActiveSubjobs(); @Override String getContainerObjectId(); void setContainerObjectId( String containerObjectId ); @Override Date getRegistrationDate(); void setServletPrintWriter( PrintWriter servletPrintWriter ); PrintWriter getServletPrintWriter(); @Override String getExecutingServer(); @Override void setExecutingServer( String executingServer ); @Override String getExecutingUser(); @Override void setExecutingUser( String executingUser ); @Override boolean isGatheringMetrics(); @Override void setGatheringMetrics( boolean gatheringMetrics ); @Override boolean isForcingSeparateLogging(); @Override void setForcingSeparateLogging( boolean forcingSeparateLogging ); List<ResultFile> getResultFiles(); void setResultFiles( List<ResultFile> resultFiles ); List<RowMetaAndData> getResultRows(); void setResultRows( List<RowMetaAndData> resultRows ); Result getPreviousResult(); void setPreviousResult( Result previousResult ); Hashtable<String, Counter> getCounters(); void setCounters( Hashtable<String, Counter> counters ); String[] getArguments(); void setArguments( String[] arguments ); void clearError(); String getTransactionId(); void setTransactionId( String transactionId ); String calculateTransactionId(); IMetaStore getMetaStore(); void setMetaStore( IMetaStore metaStore ); void setServletReponse( HttpServletResponse response ); HttpServletResponse getServletResponse(); void setServletRequest( HttpServletRequest request ); HttpServletRequest getServletRequest(); List<DelegationListener> getDelegationListeners(); void setDelegationListeners( List<DelegationListener> delegationListeners ); void addDelegationListener( DelegationListener delegationListener ); synchronized void doTopologySortOfSteps(); @Override Map<String, Object> getExtensionDataMap(); static final String REPLAY_DATE_FORMAT; public List<RowSet> rowsets; public int class_nr; static final int TYPE_DISP_1_1; static final int TYPE_DISP_1_N; static final int TYPE_DISP_N_1; static final int TYPE_DISP_N_N; static final int TYPE_DISP_N_M; static final String STRING_FINISHED; static final String STRING_FINISHED_WITH_ERRORS; static final String STRING_RUNNING; static final String STRING_PAUSED; static final String STRING_PREPARING; static final String STRING_INITIALIZING; static final String STRING_WAITING; static final String STRING_STOPPED; static final String STRING_HALTING; static final String CONFIGURATION_IN_EXPORT_FILENAME; }