Mercurial > dive4elements > river
diff 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 |
line wrap: on
line diff
--- a/flys-backend/src/main/java/de/intevation/flys/importer/ImportWst.java Mon Apr 18 17:01:00 2011 +0000 +++ b/flys-backend/src/main/java/de/intevation/flys/importer/ImportWst.java Wed Apr 20 07:21:03 2011 +0000 @@ -1,17 +1,26 @@ package de.intevation.flys.importer; import de.intevation.flys.model.Wst; +import de.intevation.flys.model.WstColumnValue; import de.intevation.flys.model.River; +import de.intevation.flys.backend.SessionFactoryProvider; + +import org.apache.log4j.Logger; + import org.hibernate.Session; +import org.hibernate.SessionFactory; import org.hibernate.Query; +import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.ArrayList; public class ImportWst { + private static Logger logger = Logger.getLogger(ImportWst.class); + protected String description; protected Integer kind; @@ -19,11 +28,16 @@ //protected Map<String, ImportWstColumn> columns; protected List<ImportWstColumn> columns; + protected Map<WstColumnValueKey, WstColumnValue> wstCache; + protected Wst peer; public ImportWst() { kind = 0; columns = new ArrayList<ImportWstColumn>(); + + // This cache is used to avoid db queries for each WstColumnValue later + wstCache = getWstColumnValueCache(); } public ImportWst(String description) { @@ -41,7 +55,7 @@ public void setNumberColumns(int numColumns) { for (int i = 0; i < numColumns; ++i) { - columns.add(new ImportWstColumn(this, null, null, i)); + columns.add(new ImportWstColumn(this, null, null, i, wstCache)); } } @@ -61,6 +75,40 @@ } } + + public Map<WstColumnValueKey, WstColumnValue> getWstColumnValueCache() { + SessionFactory sessionFactory = + SessionFactoryProvider.createSessionFactory(); + + Session session = sessionFactory.openSession(); + + Importer.sessionHolder.set(session); + + try { + Query query = session.createQuery("from WstColumnValue"); + + List<WstColumnValue> values = query.list(); + Map<WstColumnValueKey, WstColumnValue> cache = + new HashMap<WstColumnValueKey, WstColumnValue>(); + + for (WstColumnValue value: values) { + cache.put( + new WstColumnValueKey(value), + value); + } + + logger.info("++++++++++++++++++++++++++++++++++++++++++++++++++++"); + logger.info(cache.size() + " WstColumnValue objects in WST cache."); + logger.info("++++++++++++++++++++++++++++++++++++++++++++++++++++"); + + return cache; + } + finally { + session.close(); + Importer.sessionHolder.remove(); + } + } + public Wst getPeer(River river) { if (peer == null) { Session session = Importer.sessionHolder.get();