package dk.daoas.fulddaekning; import java.io.File; import java.io.FileReader; import java.util.Map; import java.util.Properties; import java.util.concurrent.ConcurrentHashMap; import java.util.logging.Level; import java.util.logging.Logger; import dk.daoas.fulddaekning.BoundingBox.BoundingBoxException; public class Lookup { static int max_workers; static boolean verbose; static Properties conf; static Logger logger = Logger.getLogger( Lookup.class.toString() ); Database db; WorkSet workset; Map workers = new ConcurrentHashMap(); public Lookup(WorkSet workset, Database db) { this.db = db; this.workset = workset; } public void doLookup() throws BoundingBoxException { logger.info("Starting for postnr=" + workset.postnr); long start1 = System.currentTimeMillis(); long start2 = 0; try { logger.info("Starter beregning for " + workset.postnr); start2 = System.currentTimeMillis(); for (int i =0; i 0) { Thread.sleep(10);//wait for worker threads } } catch(Exception e) { logger.log(Level.WARNING, "Exception during lookup", e); if (e instanceof BoundingBoxException) { logger.severe( e.getMessage() ); System.exit(1); } } long now = System.currentTimeMillis(); logger.info("Antal daekkede:" + workset.daekkedeAdresser.size() ); logger.info("Antal ikke-daekkede:" + workset.queueSize ); logger.info("Done! elapsed=" + (now-start1) + "/" + (now-start2) ); } public void shutdownWorker(int workerid) { logger.info("Shutting down worker: " + workerid); workers.remove(workerid); } // Getters and setters /////////////////////////// public Database getDb() { return db; } public WorkSet getWorkSet() { return workset; } ///////////////////////////// // Static functions public static void main(String[] args) throws Exception { File confFile = new File("fulddaekning.properties"); if (! confFile.exists() ) { logger.warning("Config file not found"); System.exit(1); } conf = new Properties(); conf.load( new FileReader(confFile) ); max_workers = Integer.parseInt( conf.getProperty("MAX_WORKERS") ); logger.info("Starting with MAX_WORKERS:" + max_workers); verbose = Boolean.parseBoolean( conf.getProperty("VERBOSE") ); logger.info("Starting with VERBOSE:" + verbose); Database db = new Database(conf); db.resetResultTable(); InputWorker inputWorker = new InputWorker(db); Thread inputThread = new Thread(inputWorker); inputThread.start(); long start = System.currentTimeMillis(); boolean doContinue = true; while (inputWorker.queue.isEmpty() == true) { Thread.sleep(3); //Vent indtil at første arbejds sæt er på plads } while ( doContinue == true ) { WorkSet set = inputWorker.queue.poll(); if (set != null) { Lookup lookup = new Lookup(set, db); lookup.doLookup(); } else { System.out.println("Buffer underrun"); Thread.sleep(100); } if ( inputWorker.isDone == true && inputWorker.queue.isEmpty() == true) doContinue = false; } /*logger.info("Finder postnumre"); List postnumre = db.hentPostnumre(); for(Integer postnr : postnumre) { Lookup lookup = new Lookup(postnr, db); lookup.doLookup(); }*/ long now = System.currentTimeMillis(); logger.info("Largest workset: " + inputWorker.largestWorkSetPostnr + "=" + inputWorker.largestWorkSetCount); logger.info("Fuld load done : " + (now-start) ); //Lookup lookup = new Lookup(7400, db); //lookup.doLookup(); } }