// important: objects passed as data must not be altered once put into a job
public class JobQueue {
- private List jobs;
+ private Vector jobs;
private Map dataToJob;
public static final int STATUS_PENDING = 0;
}
}
- public class Job {
+ public List makeJobListSnapshot() {
+ synchronized (jobs) {
+ return (List) jobs.clone();
+ }
+ }
+
+ public class Job implements Cloneable {
private Object data;
private int status;
- private int identifier;
- public Job(Object aData) {
+ public Job(Object aData, int aStatus) {
data = aData;
- status = STATUS_PENDING;
+ status = aStatus;
+ }
+
+ public Job(Object aData) {
+ this(aData, STATUS_PENDING);
}
public Object getData() {
}
}
- public boolean setProcessing() {
+ protected boolean setProcessing() {
return setStatus(STATUS_PENDING, STATUS_PROCESSING);
}
- public void setProcessed() {
+ protected void setProcessed() {
setStatus(STATUS_PROCESSING, STATUS_PROCESSED);
}
return getStatus() == STATUS_PROCESSED;
}
+ public boolean isProcessing() {
+ return getStatus() == STATUS_PROCESSING;
+ }
+
public boolean isPending() {
return getStatus() == STATUS_PENDING;
}
}
}
+ protected Object clone() {
+ synchronized(this) {
+ return new Job(data, status);
+ }
+ }
}
}
}
public void printQueueStatus(PrintWriter aWriter) {
-
+ Iterator iterator = producerJobQueue.makeJobListSnapshot().iterator();
+ producerJobQueue.cleanupJobs();
+ JobQueue.Job job;
+
+ while (iterator.hasNext()) {
+ job = (JobQueue.Job) iterator.next();
+ ProducerJob producerJob = (ProducerJob) job.getData();
+
+ aWriter.print(producerJob.factoryName + "." + producerJob.verb);
+ if (job.hasBeenProcessed())
+ aWriter.print(" processed");
+ else if (job.isProcessing())
+ aWriter.print(" processing");
+ else if (job.isPending())
+ aWriter.print(" pending");
+ else
+ aWriter.print(" unknown status");
+
+ aWriter.println("<br/>");
+ }
}
private void produceNow(String aProducerFactory, String aVerb, PrintWriter aLogger) {
String verbParam = req.getParameter("verb");
MirGlobal.producerEngine().addJob(producerParam, verbParam);
+ MirGlobal.producerEngine().printQueueStatus(out);
// ProducerFactory factory = (ProducerFactory) MirGlobal.localizer().producers().factories().get(producerParam);
// mir.producer.Producer producer = factory.makeProducer(verbParam);