Author: bpoussin Date: 2013-02-22 23:14:26 +0100 (Fri, 22 Feb 2013) New Revision: 313 Url: http://chorem.org/projects/chorem/repository/revisions/313 Log: modif pour reellement supporter le multi-domain sur la meme instance Modified: trunk/chorem-entities/src/main/java/org/chorem/ChoremClient.java trunk/chorem-entities/src/main/java/org/chorem/ChoremConfig.java Modified: trunk/chorem-entities/src/main/java/org/chorem/ChoremClient.java =================================================================== --- trunk/chorem-entities/src/main/java/org/chorem/ChoremClient.java 2013-02-22 22:13:13 UTC (rev 312) +++ trunk/chorem-entities/src/main/java/org/chorem/ChoremClient.java 2013-02-22 22:14:26 UTC (rev 313) @@ -46,7 +46,9 @@ import org.nuiton.wikitty.query.WikittyQueryResult; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; /** * Proxy pour l'application. Certaines methodes specifiques pour l'application @@ -54,7 +56,7 @@ */ public class ChoremClient extends WikittyClient { - static protected WikittyService ws = null; + static protected Map<String, WikittyService> ws = new HashMap<String, WikittyService>(); protected ChoremClient(ApplicationConfig config, WikittyService ws) { super(config, ws); @@ -146,10 +148,13 @@ * @return WikittyService instance */ static protected WikittyService getWikittyService(ApplicationConfig config) { - if (ws == null) { - synchronized(ChoremClient.class) { - if (ws == null) { - ws = WikittyServiceFactory.buildWikittyService(config); + String domain = config.getOption(ChoremConfigOption.CHOREM_DOMAIN.getKey()); + WikittyService result = ws.get(domain); + if (result == null) { + synchronized(ws) { + result = ws.get(domain); + if (result == null) { + result = WikittyServiceFactory.buildWikittyService(config); // register last entity versions in database List<WikittyExtension> exts = new ArrayList<WikittyExtension>(); @@ -217,12 +222,13 @@ e.getFieldType("parent").addTagValue("help", "La catégorie Parente de celle-ci (ex: dépense pour Loyer)"); e.getFieldType("parent").addTagValue("allowed", "Category"); - ws.storeExtension(null, exts); + result.storeExtension(null, exts); + ws.put(domain, result); } } } - return ws; + return result; } /** Modified: trunk/chorem-entities/src/main/java/org/chorem/ChoremConfig.java =================================================================== --- trunk/chorem-entities/src/main/java/org/chorem/ChoremConfig.java 2013-02-22 22:13:13 UTC (rev 312) +++ trunk/chorem-entities/src/main/java/org/chorem/ChoremConfig.java 2013-02-22 22:14:26 UTC (rev 313) @@ -22,6 +22,8 @@ */ package org.chorem; +import java.util.HashMap; +import java.util.Map; import org.apache.commons.lang.UnhandledException; import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; @@ -37,7 +39,7 @@ /** to use log facility, just put in your code: log.info(\"...\"); */ static private Log log = LogFactory.getLog(ChoremConfig.class); - static protected ApplicationConfig config = null; + static protected Map<String, ApplicationConfig> config = new HashMap<String, ApplicationConfig>(); /** * constructeur public seulement pour pouvoir mettre une variable de ce @@ -55,34 +57,37 @@ * @return */ public static ApplicationConfig getConfig(String domain, String... args) { - if (config == null) { - synchronized (ChoremConfig.class) { - if (config == null) { + ApplicationConfig result = config.get(domain); + if (result == null) { + synchronized (config) { + result = config.get(domain); + if (result == null) { try { - config = new ApplicationConfig( + result = new ApplicationConfig( ChoremConfigOption.CONFIG_FILE.getDefaultValue()); // Load wikitty options - config.loadDefaultOptions(WikittyConfigOption.values()); + result.loadDefaultOptions(WikittyConfigOption.values()); // Load chorem options - config.loadDefaultOptions(ChoremConfigOption.values()); + result.loadDefaultOptions(ChoremConfigOption.values()); // Load chorem action - config.loadActions(ChoremConfigAction.values()); + result.loadActions(ChoremConfigAction.values()); // set domain before parse command line but after load default if (StringUtils.isNotBlank(domain)) { - config.setOption( + result.setOption( ChoremConfigOption.CHOREM_DOMAIN.getKey(), domain); } // Parse args - config.parse(args); + result.parse(args); // on fait toutes les actions - config.doAllAction(); + result.doAllAction(); + config.put(domain, result); } catch (Exception eee) { log.error("Can't create chorem configuration", eee); throw new UnhandledException(eee); @@ -90,7 +95,7 @@ } } } - return config; + return result; } }