/[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 2151 - (show annotations) (download)
Wed May 7 07:59:03 2014 UTC (10 years ago) by torben
File size: 4775 byte(s)
First step is clearing the output table
1 package dk.daoas.fulddaekning;
2
3 import java.io.File;
4 import java.io.FileReader;
5 import java.io.IOException;
6 import java.sql.Connection;
7 import java.sql.DriverManager;
8 import java.sql.SQLException;
9 import java.util.ArrayList;
10 import java.util.List;
11 import java.util.Map;
12 import java.util.Properties;
13 import java.util.Queue;
14 import java.util.concurrent.ConcurrentHashMap;
15 import java.util.logging.Level;
16 import java.util.logging.Logger;
17
18 import dk.daoas.fulddaekning.BoundingBox.BoundingBoxException;
19
20 public class Lookup {
21 static int max_workers;
22 static boolean verbose;
23
24 static Properties conf;
25 static Logger logger = Logger.getLogger( Lookup.class.toString() );
26
27 int postnr;
28 Database db;
29
30 ArrayList<Adresse> daekkedeAdresser;
31 Queue<Adresse> queue;
32
33 Map<Integer, LookupWorker> workers = new ConcurrentHashMap<Integer, LookupWorker>();
34
35
36
37 public Lookup(int postnr, Database db) {
38 this.postnr = postnr;
39 this.db = db;
40 }
41
42
43
44 public void doLookup() throws BoundingBoxException {
45 logger.info("Starting for postnr=" + postnr);
46
47 int queueSize=-1;
48
49 long start1 = System.currentTimeMillis();
50 long start2 = 0;
51
52 try {
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 logger.info("Henter _ikke_ daekkede adresser i " + postnr);
64 queue = db.hentIkkedaekkedeAdresser(postnr);
65 queueSize = queue.size();
66
67
68 logger.info("Starter beregning for " + postnr);
69 start2 = System.currentTimeMillis();
70
71 for (int i =0; i<max_workers; i++) {
72 LookupWorker worker = new LookupWorker(i, this);
73 Thread t = new Thread(worker);
74 t.start();
75
76 workers.put(i, worker);
77 }
78
79 while (workers.size() > 0) {
80 Thread.sleep(10);//wait for worker threads
81 }
82
83
84 } catch(Exception e) {
85 logger.log(Level.WARNING, "Exception during lookup", e);
86
87 if (e instanceof BoundingBoxException) {
88 logger.severe( e.getMessage() );
89 System.exit(1);
90 }
91
92 }
93 long now = System.currentTimeMillis();
94
95 logger.info("Antal daekkede:" + daekkedeAdresser.size() );
96 logger.info("Antal ikke-daekkede:" + queueSize );
97
98 logger.info("Done! elapsed=" + (now-start1) + "/" + (now-start2) );
99 }
100
101 public void shutdownWorker(int workerid) {
102 logger.info("Shutting down worker: " + workerid);
103 workers.remove(workerid);
104 }
105
106 // Getters and setters
107
108 ///////////////////////////
109 public Database getDb() {
110 return db;
111 }
112
113
114
115 public ArrayList<Adresse> getDaekkedeAdresser() {
116 return daekkedeAdresser;
117 }
118
119 public Queue<Adresse> getQueue() {
120 return queue;
121 }
122
123
124
125
126
127
128 /////////////////////////////
129 // Static functions
130
131
132
133
134 public static void main(String[] args) throws Exception {
135
136 File confFile = new File("fulddaekning.properties");
137 if (! confFile.exists() ) {
138 logger.warning("Config file not found");
139 System.exit(1);
140 }
141
142 conf = new Properties();
143 conf.load( new FileReader(confFile) );
144
145 max_workers = Integer.parseInt( conf.getProperty("MAX_WORKERS") );
146 logger.info("Starting with MAX_WORKERS:" + max_workers);
147
148 verbose = Boolean.parseBoolean( conf.getProperty("VERBOSE") );
149 logger.info("Starting with VERBOSE:" + verbose);
150
151 Connection conn = getConnection();
152 Database db = new Database(conn);
153
154 db.resetResultTable();
155
156
157
158
159
160 long start = System.currentTimeMillis();
161
162 logger.info("Finder postnumre");
163 List<Integer> postnumre = db.hentPostnumre();
164
165 for(Integer postnr : postnumre) {
166 Lookup lookup = new Lookup(postnr, db);
167 lookup.doLookup();
168 }
169
170 long now = System.currentTimeMillis();
171
172 logger.info("Fuld load done : " + (now-start) );
173
174
175 //Lookup lookup = new Lookup(7400, db);
176 //lookup.doLookup();
177 }
178
179 public static Connection getConnection() throws SQLException, IOException {
180
181 String db_host = conf.getProperty("DB_HOST");
182 String db_user = conf.getProperty("DB_USER");
183 String db_pass = conf.getProperty("DB_PASS");
184
185
186
187
188 Connection conn = null;
189 Properties connectionProps = new Properties();
190 connectionProps.put("user", db_user);
191 connectionProps.put("password", db_pass);
192
193 conn = DriverManager.getConnection(
194 "jdbc:mysql://" +
195 db_host +
196 ":3306/",
197 connectionProps);
198 logger.info("Connected to database");
199 return conn;
200 }
201
202 }

  ViewVC Help
Powered by ViewVC 1.1.20