import multex.Failure;
public class ProducerEngine {
- private Map producers;
+// private Map producers;
private JobQueue producerJobQueue;
private Thread queueThread;
private PrintWriter log;
protected ProducerEngine() {
- producers = MirGlobal.localizer().producers().factories();
+// producers = MirGlobal.localizer().producers().factories();
producerJobQueue = new JobQueue();
try {
- log = new PrintWriter(new FileWriter( (new RandomAccessFile(MirGlobal.getConfigProperty("Home") + "/" + MirGlobal.getConfigProperty("Producer.Logfile"), "rw")).getFD()));
+ RandomAccessFile raFile = (new RandomAccessFile(MirGlobal.getConfigProperty("Home") + "/" + MirGlobal.getConfigProperty("Producer.Logfile"), "rw"));
+ raFile.seek(raFile.length());
+ log = new PrintWriter(new FileWriter( raFile.getFD()));
}
catch (Exception e) {
// throw new ProducerEngineRuntimeExc("Creating PrintWriter log failed",e);
}
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) {
try {
- long startTime;
- long endTime;
+ long startTime;
+ long endTime;
+ Map startingMap = new HashMap();
- startTime = System.currentTimeMillis();
+ startTime = System.currentTimeMillis();
- aLogger.println("Producing (" + aProducerFactory + "," + aVerb + ")<br>");
+ aLogger.println("Producing (" + aProducerFactory + "," + aVerb + ")");
- if (producers == null)
- aLogger.println("??<br>");
-
- ProducerFactory factory = (ProducerFactory) producers.get(aProducerFactory);
+ ProducerFactory factory = (ProducerFactory) MirGlobal.localizer().producers().factories().get(aProducerFactory);
if (factory == null )
throw new Exception("No producer factory '"+aProducerFactory+"' present.");
- Producer producer = factory.makeProducer(aVerb);
+ MirGlobal.localizer().producerAssistant().initializeGenerationValueSet(startingMap);
+ Producer producer = factory.makeProducer(aVerb, startingMap);
producer.produce(aLogger);
- endTime = System.currentTimeMillis();
+ endTime = System.currentTimeMillis();
- aLogger.println("Time: " + (endTime-startTime) + " ms<br>");
+ aLogger.println("Time: " + (endTime-startTime) + " ms<br>");
}
catch (Throwable e) {
try {
public void execute() {
ProducerFactory factory;
Producer producer;
- long startTime;
- long endTime;
+ long startTime;
+ long endTime;
+ Map startingMap = new HashMap();
- startTime = System.currentTimeMillis();
+ startTime = System.currentTimeMillis();
log.println("Producing job: "+factoryName+"."+verb);
try {
- factory = (ProducerFactory) producers.get(factoryName);
+ factory = (ProducerFactory) MirGlobal.localizer().producers().factories().get( factoryName );
if (factory!=null) {
+ MirGlobal.localizer().producerAssistant().initializeGenerationValueSet(startingMap);
+
synchronized(factory) {
- producer = factory.makeProducer(verb);
+ producer = factory.makeProducer(verb, startingMap);
}
if (producer!=null) {
producer.produce(log);
t.printStackTrace(log);
}
log.println("Done producing job: "+factoryName+"."+verb);
- endTime = System.currentTimeMillis();
+ endTime = System.currentTimeMillis();
- log.println("Time: " + (endTime-startTime) + " ms");
- log.flush();
+ log.println("Time: " + (endTime-startTime) + " ms");
+ log.flush();
}
}