/[projects]/dao/FuldDaekningWorker/src/dk/daoas/fulddaekning/Lookup.java
ViewVC logotype

Contents of /dao/FuldDaekningWorker/src/dk/daoas/fulddaekning/Lookup.java

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2241 - (show annotations) (download)
Wed Dec 10 09:50:33 2014 UTC (9 years, 5 months ago) by torben
File size: 3111 byte(s)
Move main() to it's own class
1 package dk.daoas.fulddaekning;
2
3 import java.util.Map;
4 import java.util.Queue;
5 import java.util.concurrent.ConcurrentHashMap;
6 import java.util.logging.Level;
7 import java.util.logging.Logger;
8
9 import dk.daoas.fulddaekning.BoundingBox.BoundingBoxException;
10
11 public class Lookup {
12
13
14
15 final static Logger logger = Logger.getLogger( Lookup.class.toString() );
16
17 String postnr;
18 Database db;
19
20 Adresse daekkedeAdresser[];
21 Queue<Adresse> queue;
22
23 Map<Integer, LookupWorker> workers = new ConcurrentHashMap<Integer, LookupWorker>();
24
25
26
27
28
29 public Lookup(String postnr, Database db) {
30 this.postnr = postnr;
31 this.db = db;
32 }
33
34
35
36 public void doLookup() throws BoundingBoxException {
37 logger.info("Starting for postnr=" + postnr);
38
39 Statistik stat = new Statistik();
40
41 long start1 = System.currentTimeMillis();
42 long start2 = 0;
43
44 try {
45
46 logger.info("Henter _ikke_ daekkede adresser i " + postnr);
47 queue = db.hentIkkedaekkedeAdresser(postnr);
48 if (queue.size() == 0) {
49 logger.info("Fandt ikke nogen _ikke_ daekkede adresser i " + postnr);
50 return;
51 }
52
53 BoundingBox bbox = db.getBoundingbox(postnr);
54 bbox.validateBbox();
55
56 logger.info("Bbox=" + bbox);
57 bbox.adjustToMargin();
58 logger.info("Bbox Adjusted=" + bbox);
59
60 logger.info("Henter daekkede adresser i " + postnr);
61 daekkedeAdresser = db.hentDaekkedeAdresser(bbox);
62
63 stat.postnr = postnr;
64 stat.antalDaekkede = daekkedeAdresser.length;
65 stat.antalIkkeDaekkede = queue.size();
66 stat.totalDataset = stat.antalDaekkede * stat.antalIkkeDaekkede;
67
68
69 logger.info("Starter beregning for " + postnr);
70 start2 = System.currentTimeMillis();
71
72 for (int i =0; i < LookupMain.max_workers; i++) {
73 LookupWorker worker = new LookupWorker(i, this);
74 Thread t = new Thread(worker);
75 t.start();
76
77 workers.put(i, worker);
78 }
79
80 while (workers.size() > 0) {
81 Thread.sleep(10);//wait for worker threads
82 }
83
84 db.saveBatch();//Save any unsaved rows
85
86
87 } catch(Exception e) {
88 logger.log(Level.WARNING, "Exception during lookup", e);
89
90 if (e instanceof BoundingBoxException) {
91 logger.severe( e.getMessage() );
92 System.exit(1);
93 }
94
95 }
96 long now = System.currentTimeMillis();
97
98 stat.forbrugtTid = (now-start1);
99 LookupMain.saveStatistics(stat);
100
101 logger.info( stat.toString() );
102 logger.info("Done! elapsed=" + (now-start1) + "/" + (now-start2) + " postnr=" + postnr);
103 }
104
105 public void shutdownWorker(int workerid) {
106 //logger.info("Shutting down worker: " + workerid);
107 LookupWorker key = workers.remove(workerid);
108
109 if (key == null) {
110 System.out.println("Error removing worker from set " + workerid);
111 System.exit(0);
112 }
113 }
114
115 // Getters and setters
116
117 ///////////////////////////
118 public Database getDb() {
119 return db;
120 }
121
122
123
124 public Adresse[] getDaekkedeAdresser() {
125 return daekkedeAdresser;
126 }
127
128 public Queue<Adresse> getQueue() {
129 return queue;
130 }
131
132
133 }

  ViewVC Help
Powered by ViewVC 1.1.20