import org.pentaho.di.core.logging.KettleLogStore; //导入方法依赖的package包/类
@GET
@Path( "/start/{id : .+}" )
@Produces( { MediaType.APPLICATION_JSON } )
public JobStatus startJob( @PathParam( "id" ) String id ) {
Job job = CarteResource.getJob( id );
CarteObjectEntry entry = CarteResource.getCarteObjectEntry( id );
try {
if ( job.isInitialized() && !job.isActive() ) {
// Re-create the job from the jobMeta
//
// We might need to re-connect to the repository
//
if ( job.getRep() != null && !job.getRep().isConnected() ) {
if ( job.getRep().getUserInfo() != null ) {
job.getRep().connect( job.getRep().getUserInfo().getLogin(), job.getRep().getUserInfo().getPassword() );
} else {
job.getRep().connect( null, null );
}
}
// Create a new job object to start from a sane state. Then replace
// the new job in the job map
//
synchronized ( this ) {
JobConfiguration jobConfiguration = CarteSingleton.getInstance().getJobMap().getConfiguration( entry );
String carteObjectId = UUID.randomUUID().toString();
SimpleLoggingObject servletLoggingObject =
new SimpleLoggingObject( getClass().getName(), LoggingObjectType.CARTE, null );
servletLoggingObject.setContainerObjectId( carteObjectId );
Job newJob = new Job( job.getRep(), job.getJobMeta(), servletLoggingObject );
newJob.setLogLevel( job.getLogLevel() );
// Discard old log lines from the old job
//
KettleLogStore.discardLines( job.getLogChannelId(), true );
CarteSingleton.getInstance().getJobMap().replaceJob( entry, newJob, jobConfiguration );
job = newJob;
}
}
job.start();
} catch ( KettleException e ) {
e.printStackTrace();
}
return getJobStatus( id );
}