Mercurial > dive4elements > river
comparison flys-backend/src/main/java/de/intevation/flys/importer/ImportWstColumnValue.java @ 478:db430bd9e0e0
Implemented a WstColumnValue cache to speed up inserting WST files into database.
flys-backend/trunk@1734 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Ingo Weinzierl <ingo.weinzierl@intevation.de> |
---|---|
date | Wed, 20 Apr 2011 07:21:03 +0000 |
parents | 29a408f80a89 |
children | 67fd63e4ef66 |
comparison
equal
deleted
inserted
replaced
477:0addc2663a4d | 478:db430bd9e0e0 |
---|---|
4 import de.intevation.flys.model.WstColumn; | 4 import de.intevation.flys.model.WstColumn; |
5 import de.intevation.flys.model.River; | 5 import de.intevation.flys.model.River; |
6 | 6 |
7 import java.math.BigDecimal; | 7 import java.math.BigDecimal; |
8 | 8 |
9 import org.apache.log4j.Logger; | |
10 | |
9 import org.hibernate.Session; | 11 import org.hibernate.Session; |
10 import org.hibernate.Query; | |
11 | 12 |
12 import java.util.List; | 13 import java.util.Map; |
14 | |
13 | 15 |
14 public class ImportWstColumnValue | 16 public class ImportWstColumnValue |
15 { | 17 { |
18 protected Logger logger = Logger.getLogger(ImportWstColumnValue.class); | |
19 | |
16 protected BigDecimal position; | 20 protected BigDecimal position; |
17 protected BigDecimal w; | 21 protected BigDecimal w; |
18 protected ImportWstColumn wstColumn; | 22 protected ImportWstColumn wstColumn; |
23 | |
24 protected Map<WstColumnValueKey, WstColumnValue> cache; | |
19 | 25 |
20 protected WstColumnValue peer; | 26 protected WstColumnValue peer; |
21 | 27 |
22 public ImportWstColumnValue() { | 28 public ImportWstColumnValue() { |
23 } | 29 } |
24 | 30 |
25 public ImportWstColumnValue( | 31 public ImportWstColumnValue( |
26 ImportWstColumn wstColumn, | 32 ImportWstColumn wstColumn, |
27 BigDecimal position, | 33 BigDecimal position, |
28 BigDecimal w | 34 BigDecimal w, |
35 Map<WstColumnValueKey, WstColumnValue> cache | |
29 ) { | 36 ) { |
30 this.wstColumn = wstColumn; | 37 this.wstColumn = wstColumn; |
31 this.position = position; | 38 this.position = position; |
32 this.w = w; | 39 this.w = w; |
40 this.cache = cache; | |
33 } | 41 } |
34 | 42 |
35 public BigDecimal getPosition() { | 43 public BigDecimal getPosition() { |
36 return position; | 44 return position; |
37 } | 45 } |
57 } | 65 } |
58 | 66 |
59 public WstColumnValue getPeer(River river) { | 67 public WstColumnValue getPeer(River river) { |
60 if (peer == null) { | 68 if (peer == null) { |
61 WstColumn c = wstColumn.getPeer(river); | 69 WstColumn c = wstColumn.getPeer(river); |
70 | |
71 // check the cache before we fire a db query | |
72 WstColumnValue value = cache.get(new WstColumnValueKey( | |
73 c.getId(), | |
74 position.doubleValue(), | |
75 w.doubleValue())); | |
76 | |
77 if (value != null) { | |
78 peer = value; | |
79 return peer; | |
80 } | |
81 | |
62 Session session = Importer.sessionHolder.get(); | 82 Session session = Importer.sessionHolder.get(); |
63 Query query = session.createQuery( | 83 peer = new WstColumnValue(c, position, w); |
64 "from WstColumnValue where " + | 84 session.save(peer); |
65 "wstColumn=:c and position=:p and w=:w"); | 85 |
66 query.setParameter("c", c); | 86 cache.put(new WstColumnValueKey(peer), peer); |
67 query.setParameter("p", position); | |
68 query.setParameter("w", w); | |
69 List<WstColumnValue> values = query.list(); | |
70 if (values.isEmpty()) { | |
71 peer = new WstColumnValue(c, position, w); | |
72 session.save(peer); | |
73 } | |
74 else { | |
75 peer = values.get(0); | |
76 } | |
77 } | 87 } |
88 | |
78 return peer; | 89 return peer; |
79 } | 90 } |
80 } | 91 } |
81 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : | 92 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : |