Mercurial > dive4elements > river
view flys-artifacts/src/main/java/de/intevation/flys/exports/ChartSection.java @ 5779:ebec12def170
Datacage: Add a pool of builders to make it multi threadable.
XML DOM is not thread safe. Therefore the old implementation only allowed one thread
to use the builder at a time. As the complexity of the configuration
has increased over time this has become a bottleneck of the whole application
because it took quiet some time to build a result. Furthermore the builder code path
is visited very frequent. So many concurrent requests were piled up
resulting in long waits for the users.
To mitigate this problem a round robin pool of builders is used now.
Each of the pooled builders has an independent copy of the XML template
and can be run in parallel.
The number of builders is determined by the system property
'flys.datacage.pool.size'. It defaults to 4.
author | Sascha L. Teichmann <teichmann@intevation.de> |
---|---|
date | Sun, 21 Apr 2013 12:48:09 +0200 |
parents | b7867c03760a |
children |
line wrap: on
line source
package de.intevation.flys.exports; import org.apache.log4j.Logger; /** * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a> */ public class ChartSection extends TypeSection { private static Logger logger = Logger.getLogger(ChartSection.class); public static final String TITLE_ATTR = "title"; public static final String SUBTITLE_ATTR = "subtitle"; public static final String DISPLAYGRID_ATTR = "display-grid"; public static final String DISPLAYLOGO_ATTR = "display-logo"; public static final String LOGOPLACEMENTH_ATTR = "logo-placeh"; public static final String LOGOPLACEMENTV_ATTR = "logo-placev"; public ChartSection() { super("chart"); } public void setTitle(String title) { setStringValue(TITLE_ATTR, title); } public String getTitle() { return getStringValue(TITLE_ATTR); } public void setSubtitle(String subtitle) { setStringValue(SUBTITLE_ATTR, subtitle); } public String getSubtitle() { return getStringValue(SUBTITLE_ATTR); } /** Get Property-value for display-logo property. */ public String getDisplayLogo() { return getStringValue(DISPLAYLOGO_ATTR); } /** Set Property-value for display-logo property. */ public void setDisplayLogo(String logo) { logger.debug("Setting Display logo string."); setChoiceStringValue(DISPLAYLOGO_ATTR, logo, "logo"); } /** Get Property-value for horizontal logo-placement property. */ public String getLogoHPlacement() { return getStringValue(LOGOPLACEMENTH_ATTR); } /** Set Property-value for horizontal logo-placement property. */ public void setLogoHPlacement(String place) { setChoiceStringValue(LOGOPLACEMENTH_ATTR, place, "placeh"); } /** Get Property-value for vertical logo-placement property. */ public String getLogoVPlacement() { return getStringValue(LOGOPLACEMENTV_ATTR); } /** Set Property-value for vertical logo-placement property. */ public void setLogoVPlacement(String place) { setChoiceStringValue(LOGOPLACEMENTV_ATTR, place, "placev"); } public void setDisplayGrid(boolean displayGrid) { setBooleanValue(DISPLAYGRID_ATTR, displayGrid); } public Boolean getDisplayGrid() { return getBooleanValue(DISPLAYGRID_ATTR); } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :