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) {

http://dive4elements.wald.intevation.org