/[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 2145 - (show annotations) (download)
Wed Apr 30 08:15:48 2014 UTC (10 years ago) by torben
File size: 4745 byte(s)
Initial import.
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
155
156
157
158 long start = System.currentTimeMillis();
159
160 logger.info("Finder postnumre");
161 List<Integer> postnumre = db.hentPostnumre();
162
163 for(Integer postnr : postnumre) {
164 Lookup lookup = new Lookup(postnr, db);
165 lookup.doLookup();
166 }
167
168 long now = System.currentTimeMillis();
169
170 logger.info("Fuld load done : " + (now-start) );
171
172
173 //Lookup lookup = new Lookup(7400, db);
174 //lookup.doLookup();
175 }
176
177 public static Connection getConnection() throws SQLException, IOException {
178
179 String db_host = conf.getProperty("DB_HOST");
180 String db_user = conf.getProperty("DB_USER");
181 String db_pass = conf.getProperty("DB_PASS");
182
183
184
185
186 Connection conn = null;
187 Properties connectionProps = new Properties();
188 connectionProps.put("user", db_user);
189 connectionProps.put("password", db_pass);
190
191 conn = DriverManager.getConnection(
192 "jdbc:mysql://" +
193 db_host +
194 ":3306/",
195 connectionProps);
196 logger.info("Connected to database");
197 return conn;
198 }
199
200 }

  ViewVC Help
Powered by ViewVC 1.1.20