1 package mircoders.global;
8 public class ProducerEngine {
10 private JobQueue producerJobQueue;
11 private Thread queueThread;
12 private PrintWriter log;
14 protected ProducerEngine() {
15 producers = MirGlobal.localizer().producers().factories();
16 producerJobQueue = new JobQueue();
18 log = new PrintWriter(new FileWriter(new File("/tmp/producer.log")));
21 throw new RuntimeException(e.getMessage());
24 queueThread = new Thread(new ProducerJobQueueThread());
28 public void addJob(String aProducerFactory, String aVerb) {
29 producerJobQueue.appendJob(new ProducerJob(aProducerFactory, aVerb));
30 log.println(aProducerFactory+"."+aVerb+" added to queue");
34 public void printQueueStatus(PrintWriter aWriter) {
38 private void produceNow(String aProducerFactory, String aVerb, PrintWriter aLogger) {
43 startTime = System.currentTimeMillis();
45 aLogger.println("Producing (" + aProducerFactory + "," + aVerb + ")<br>");
47 if (producers == null)
48 aLogger.println("??<br>");
50 ProducerFactory factory = (ProducerFactory) producers.get(aProducerFactory);
53 throw new Exception("No producer factory '"+aProducerFactory+"' present.");
55 Producer producer = factory.makeProducer(aVerb);
57 producer.produce(aLogger);
59 endTime = System.currentTimeMillis();
61 aLogger.println("Time: " + (endTime-startTime) + " ms<br>");
65 aLogger.println("exception occurred:<br>");
66 aLogger.println(e.getMessage());
67 e.printStackTrace(aLogger);
74 private class ProducerJob {
75 private String factoryName;
78 public ProducerJob(String aFactory, String aVerb) {
79 factoryName = aFactory;
83 public void execute() {
84 ProducerFactory factory;
89 startTime = System.currentTimeMillis();
90 log.println("Producing job: "+factoryName+"."+verb);
93 factory = (ProducerFactory) producers.get(factoryName);
96 synchronized(factory) {
97 producer = factory.makeProducer(verb);
100 producer.produce(log);
104 catch (Throwable t) {
105 log.println(" exception "+t.getMessage());
106 t.printStackTrace(log);
108 log.println("Done producing job: "+factoryName+"."+verb);
109 endTime = System.currentTimeMillis();
111 log.println("Time: " + (endTime-startTime) + " ms");
116 private class ProducerJobQueueThread implements Runnable {
118 log.println("starting ProducerJobQueueThread");
122 ProducerJob job = (ProducerJob) producerJobQueue.acquirePendingJob();
125 producerJobQueue.flagOffJob(job);
132 catch (InterruptedException e) {