1 package mircoders.global;
10 public class ProducerEngine {
11 private Map producers;
12 private JobQueue producerJobQueue;
13 private Thread queueThread;
14 private PrintWriter log;
16 protected ProducerEngine() {
17 producers = MirGlobal.localizer().producers().factories();
18 producerJobQueue = new JobQueue();
20 log = new PrintWriter(new FileWriter(new File("/tmp/producer.log")));
23 throw new ProducerEngineRuntimeExc("Creating PrintWriter log failed",e);
25 queueThread = new Thread(new ProducerJobQueueThread());
29 public void addJob(String aProducerFactory, String aVerb) {
30 producerJobQueue.appendJob(new ProducerJob(aProducerFactory, aVerb));
31 log.println(aProducerFactory+"."+aVerb+" added to queue");
35 public void printQueueStatus(PrintWriter aWriter) {
39 private void produceNow(String aProducerFactory, String aVerb, PrintWriter aLogger) {
44 startTime = System.currentTimeMillis();
46 aLogger.println("Producing (" + aProducerFactory + "," + aVerb + ")<br>");
48 if (producers == null)
49 aLogger.println("??<br>");
51 ProducerFactory factory = (ProducerFactory) producers.get(aProducerFactory);
54 throw new Exception("No producer factory '"+aProducerFactory+"' present.");
56 Producer producer = factory.makeProducer(aVerb);
58 producer.produce(aLogger);
60 endTime = System.currentTimeMillis();
62 aLogger.println("Time: " + (endTime-startTime) + " ms<br>");
66 aLogger.println("exception occurred:<br>");
67 aLogger.println(e.getMessage());
68 e.printStackTrace(aLogger);
75 private class ProducerJob {
76 private String factoryName;
79 public ProducerJob(String aFactory, String aVerb) {
80 factoryName = aFactory;
84 public void execute() {
85 ProducerFactory factory;
90 startTime = System.currentTimeMillis();
91 log.println("Producing job: "+factoryName+"."+verb);
94 factory = (ProducerFactory) producers.get(factoryName);
97 synchronized(factory) {
98 producer = factory.makeProducer(verb);
100 if (producer!=null) {
101 producer.produce(log);
105 catch (Throwable t) {
106 log.println(" exception "+t.getMessage());
107 t.printStackTrace(log);
109 log.println("Done producing job: "+factoryName+"."+verb);
110 endTime = System.currentTimeMillis();
112 log.println("Time: " + (endTime-startTime) + " ms");
117 private class ProducerJobQueueThread implements Runnable {
119 log.println("starting ProducerJobQueueThread");
123 ProducerJob job = (ProducerJob) producerJobQueue.acquirePendingJob();
126 producerJobQueue.flagOffJob(job);
133 catch (InterruptedException e) {
141 public static class ProducerEngineRuntimeExc extends Failure {
142 public ProducerEngineRuntimeExc(String msg, Exception cause){