Mercurial > dive4elements > river
comparison flys-backend/src/main/java/de/intevation/flys/importer/ImportWst.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 | 5d920695a7f0 |
children | 3a99d0295006 |
comparison
equal
deleted
inserted
replaced
477:0addc2663a4d | 478:db430bd9e0e0 |
---|---|
1 package de.intevation.flys.importer; | 1 package de.intevation.flys.importer; |
2 | 2 |
3 import de.intevation.flys.model.Wst; | 3 import de.intevation.flys.model.Wst; |
4 import de.intevation.flys.model.WstColumnValue; | |
4 import de.intevation.flys.model.River; | 5 import de.intevation.flys.model.River; |
5 | 6 |
7 import de.intevation.flys.backend.SessionFactoryProvider; | |
8 | |
9 import org.apache.log4j.Logger; | |
10 | |
6 import org.hibernate.Session; | 11 import org.hibernate.Session; |
12 import org.hibernate.SessionFactory; | |
7 import org.hibernate.Query; | 13 import org.hibernate.Query; |
8 | 14 |
15 import java.util.ArrayList; | |
16 import java.util.HashMap; | |
9 import java.util.List; | 17 import java.util.List; |
10 import java.util.Map; | 18 import java.util.Map; |
11 import java.util.ArrayList; | |
12 | 19 |
13 public class ImportWst | 20 public class ImportWst |
14 { | 21 { |
22 private static Logger logger = Logger.getLogger(ImportWst.class); | |
23 | |
15 protected String description; | 24 protected String description; |
16 | 25 |
17 protected Integer kind; | 26 protected Integer kind; |
18 | 27 |
19 //protected Map<String, ImportWstColumn> columns; | 28 //protected Map<String, ImportWstColumn> columns; |
20 protected List<ImportWstColumn> columns; | 29 protected List<ImportWstColumn> columns; |
21 | 30 |
31 protected Map<WstColumnValueKey, WstColumnValue> wstCache; | |
32 | |
22 protected Wst peer; | 33 protected Wst peer; |
23 | 34 |
24 public ImportWst() { | 35 public ImportWst() { |
25 kind = 0; | 36 kind = 0; |
26 columns = new ArrayList<ImportWstColumn>(); | 37 columns = new ArrayList<ImportWstColumn>(); |
38 | |
39 // This cache is used to avoid db queries for each WstColumnValue later | |
40 wstCache = getWstColumnValueCache(); | |
27 } | 41 } |
28 | 42 |
29 public ImportWst(String description) { | 43 public ImportWst(String description) { |
30 this(); | 44 this(); |
31 this.description = description; | 45 this.description = description; |
39 this.description = description; | 53 this.description = description; |
40 } | 54 } |
41 | 55 |
42 public void setNumberColumns(int numColumns) { | 56 public void setNumberColumns(int numColumns) { |
43 for (int i = 0; i < numColumns; ++i) { | 57 for (int i = 0; i < numColumns; ++i) { |
44 columns.add(new ImportWstColumn(this, null, null, i)); | 58 columns.add(new ImportWstColumn(this, null, null, i, wstCache)); |
45 } | 59 } |
46 } | 60 } |
47 | 61 |
48 public int getNumberColumns() { | 62 public int getNumberColumns() { |
49 return columns.size(); | 63 return columns.size(); |
56 public void storeDependencies(River river) { | 70 public void storeDependencies(River river) { |
57 Wst wst = getPeer(river); | 71 Wst wst = getPeer(river); |
58 | 72 |
59 for (ImportWstColumn column: columns) { | 73 for (ImportWstColumn column: columns) { |
60 column.storeDependencies(river); | 74 column.storeDependencies(river); |
75 } | |
76 } | |
77 | |
78 | |
79 public Map<WstColumnValueKey, WstColumnValue> getWstColumnValueCache() { | |
80 SessionFactory sessionFactory = | |
81 SessionFactoryProvider.createSessionFactory(); | |
82 | |
83 Session session = sessionFactory.openSession(); | |
84 | |
85 Importer.sessionHolder.set(session); | |
86 | |
87 try { | |
88 Query query = session.createQuery("from WstColumnValue"); | |
89 | |
90 List<WstColumnValue> values = query.list(); | |
91 Map<WstColumnValueKey, WstColumnValue> cache = | |
92 new HashMap<WstColumnValueKey, WstColumnValue>(); | |
93 | |
94 for (WstColumnValue value: values) { | |
95 cache.put( | |
96 new WstColumnValueKey(value), | |
97 value); | |
98 } | |
99 | |
100 logger.info("++++++++++++++++++++++++++++++++++++++++++++++++++++"); | |
101 logger.info(cache.size() + " WstColumnValue objects in WST cache."); | |
102 logger.info("++++++++++++++++++++++++++++++++++++++++++++++++++++"); | |
103 | |
104 return cache; | |
105 } | |
106 finally { | |
107 session.close(); | |
108 Importer.sessionHolder.remove(); | |
61 } | 109 } |
62 } | 110 } |
63 | 111 |
64 public Wst getPeer(River river) { | 112 public Wst getPeer(River river) { |
65 if (peer == null) { | 113 if (peer == null) { |