blob: ae64d7a433f80a0c0459aa9490d19895b5a0e05f [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. The ASF licenses this file to You
* under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License. For additional information regarding
* copyright in this work, please see the NOTICE file in the top level
* directory of this distribution.
*/
package org.apache.roller.weblogger.business.runnable;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.roller.weblogger.business.Weblogger;
import org.apache.roller.weblogger.business.WebloggerFactory;
/**
* A generic worker thread that knows how execute a Job.
*/
public class WorkerThread extends Thread {
private static Log log = LogFactory.getLog(WorkerThread.class);
String id = null;
Job job = null;
/**
* A simple worker.
*/
public WorkerThread(String id) {
super(id);
this.id = id;
}
/**
* Start off with a job to do.
*/
public WorkerThread(String id, Job job) {
super(id);
this.id = id;
this.job = job;
}
/**
* Thread execution.
*
* We just execute the job we were given if it's non-null.
*/
@Override
public void run() {
// we only run once
if (this.job != null) {
// process job
try {
this.job.execute();
} catch(Exception e) {
// oops
log.error("Error executing job. "+
"Worker = "+this.id+", "+
"Job = "+this.job.getClass().getName(), e);
} finally {
// since this is a thread we have to make sure that we tidy up ourselves
Weblogger roller = WebloggerFactory.getWeblogger();
roller.release();
}
}
}
/**
* Set the job for this worker.
*/
public void setJob(Job newJob) {
log.debug("NEW JOB: "+newJob.getClass().getName());
// set the job
this.job = newJob;
}
}