|
Author: jacopoc
Date: Fri Jun 29 16:33:22 2012 New Revision: 1355460 URL: http://svn.apache.org/viewvc?rev=1355460&view=rev Log: Added ability to define "loaders" for loading selectively specific containers defined in components. Modified: ofbiz/trunk/framework/base/dtd/ofbiz-component.xsd ofbiz/trunk/framework/base/dtd/ofbiz-containers.xsd ofbiz/trunk/framework/base/src/org/ofbiz/base/container/ContainerConfig.java ofbiz/trunk/framework/base/src/org/ofbiz/base/container/ContainerLoader.java Modified: ofbiz/trunk/framework/base/dtd/ofbiz-component.xsd URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/base/dtd/ofbiz-component.xsd?rev=1355460&r1=1355459&r2=1355460&view=diff ============================================================================== --- ofbiz/trunk/framework/base/dtd/ofbiz-component.xsd (original) +++ ofbiz/trunk/framework/base/dtd/ofbiz-component.xsd Fri Jun 29 16:33:22 2012 @@ -255,6 +255,7 @@ under the License. <xs:attributeGroup name="attlist.container"> <xs:attribute type="xs:string" name="name" use="required"/> <xs:attribute type="xs:string" name="class" use="required"/> + <xs:attribute type="xs:string" name="loaders"/> </xs:attributeGroup> <xs:element name="property"> <xs:complexType> Modified: ofbiz/trunk/framework/base/dtd/ofbiz-containers.xsd URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/base/dtd/ofbiz-containers.xsd?rev=1355460&r1=1355459&r2=1355460&view=diff ============================================================================== --- ofbiz/trunk/framework/base/dtd/ofbiz-containers.xsd (original) +++ ofbiz/trunk/framework/base/dtd/ofbiz-containers.xsd Fri Jun 29 16:33:22 2012 @@ -21,10 +21,19 @@ under the License. <xs:element name="ofbiz-containers"> <xs:complexType> <xs:sequence> + <xs:element minOccurs="0" maxOccurs="unbounded" ref="loader"/> <xs:element maxOccurs="unbounded" ref="container"/> </xs:sequence> </xs:complexType> </xs:element> + <xs:element name="loader"> + <xs:complexType> + <xs:attributeGroup ref="attlist.loader"/> + </xs:complexType> + </xs:element> + <xs:attributeGroup name="attlist.loader"> + <xs:attribute type="xs:string" name="name" use="required"/> + </xs:attributeGroup> <xs:element name="container"> <xs:complexType> <xs:sequence> @@ -36,6 +45,7 @@ under the License. <xs:attributeGroup name="attlist.container"> <xs:attribute type="xs:string" name="name" use="required"/> <xs:attribute type="xs:string" name="class" use="required"/> + <xs:attribute type="xs:string" name="loaders"/> </xs:attributeGroup> <xs:element name="property"> <xs:complexType> Modified: ofbiz/trunk/framework/base/src/org/ofbiz/base/container/ContainerConfig.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/base/src/org/ofbiz/base/container/ContainerConfig.java?rev=1355460&r1=1355459&r2=1355460&view=diff ============================================================================== --- ofbiz/trunk/framework/base/src/org/ofbiz/base/container/ContainerConfig.java (original) +++ ofbiz/trunk/framework/base/src/org/ofbiz/base/container/ContainerConfig.java Fri Jun 29 16:33:22 2012 @@ -30,6 +30,7 @@ import java.util.Map; import javax.xml.parsers.ParserConfigurationException; import org.ofbiz.base.lang.LockedBy; +import org.ofbiz.base.util.StringUtil; import org.ofbiz.base.util.UtilURL; import org.ofbiz.base.util.UtilValidate; import org.ofbiz.base.util.UtilXml; @@ -48,6 +49,29 @@ public class ContainerConfig { @LockedBy("ContainerConfig.class") private static Map<String, Container> containers = new LinkedHashMap<String, Container>(); + public static List<String> getLoaders(String configFile) throws ContainerException { + URL xmlUrl = UtilURL.fromResource(configFile); + if (xmlUrl == null) { + throw new ContainerException("Could not find container config file " + configFile); + } + Document containerDocument = null; + try { + containerDocument = UtilXml.readXmlDocument(xmlUrl, true); + } catch (SAXException e) { + throw new ContainerException("Error reading the container config file: " + xmlUrl, e); + } catch (ParserConfigurationException e) { + throw new ContainerException("Error reading the container config file: " + xmlUrl, e); + } catch (IOException e) { + throw new ContainerException("Error reading the container config file: " + xmlUrl, e); + } + Element root = containerDocument.getDocumentElement(); + List<String> result = new ArrayList<String>(); + for (Element curElement: UtilXml.childElementList(root, "loader")) { + result.add(curElement.getAttribute("name")); + } + return result; + } + public static Container getContainer(String containerName, String configFile) throws ContainerException { Container container = containers.get(containerName); if (container == null) { @@ -172,13 +196,15 @@ public class ContainerConfig { } public static class Container { - public String name; - public String className; - public Map<String, Property> properties; + public final String name; + public final String className; + public final List<String> loaders; + public final Map<String, Property> properties; public Container(Element element) { this.name = element.getAttribute("name"); this.className = element.getAttribute("class"); + this.loaders = StringUtil.split(element.getAttribute("loaders"), ","); properties = new LinkedHashMap<String, Property>(); for (Element curElement: UtilXml.childElementList(element, "property")) { Modified: ofbiz/trunk/framework/base/src/org/ofbiz/base/container/ContainerLoader.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/base/src/org/ofbiz/base/container/ContainerLoader.java?rev=1355460&r1=1355459&r2=1355460&view=diff ============================================================================== --- ofbiz/trunk/framework/base/src/org/ofbiz/base/container/ContainerLoader.java (original) +++ ofbiz/trunk/framework/base/src/org/ofbiz/base/container/ContainerLoader.java Fri Jun 29 16:33:22 2012 @@ -34,6 +34,7 @@ import org.ofbiz.base.start.StartupExcep import org.ofbiz.base.start.StartupLoader; import org.ofbiz.base.util.Debug; import org.ofbiz.base.util.UtilValidate; +import org.ofbiz.base.util.UtilXml; /** * An object that loads containers (background processes). @@ -75,10 +76,10 @@ public class ContainerLoader implements if (this.loaded || this.unloading) { return; } - Debug.logInfo("[Startup] Loading containers...", module); this.loadedContainers.clear(); // get this loader's configuration file this.configFile = config.containerConfig; + Debug.logInfo("[Startup] Loading containers from " + configFile, module); Collection<ContainerConfig.Container> containers = null; try { containers = ContainerConfig.getContainers(configFile); @@ -92,6 +93,7 @@ public class ContainerLoader implements if (this.unloading) { return; } + Debug.logInfo("Loading container: " + containerCfg.name, module); Container tmpContainer = loadContainer(containerCfg, args); this.loadedContainers.add(tmpContainer); containerMap.put(containerCfg.name, tmpContainer); @@ -119,11 +121,32 @@ public class ContainerLoader implements if (this.unloading) { return; } + + List<String> loaders = null; + try { + loaders = ContainerConfig.getLoaders(configFile); + } catch (ContainerException e) { + throw new StartupException(e); + } List<ContainerConfig.Container> containersDefinedInComponents = ComponentConfig.getAllContainers(); for (ContainerConfig.Container containerCfg: containersDefinedInComponents) { - Container tmpContainer = loadContainer(containerCfg, args); - this.loadedContainers.add(tmpContainer); - containerMap.put(containerCfg.name, tmpContainer); + boolean matchingLoaderFound = false; + if (UtilValidate.isEmpty(containerCfg.loaders) && UtilValidate.isEmpty(loaders)) { + matchingLoaderFound = true; + } else { + for (String loader: loaders) { + if (UtilValidate.isEmpty(containerCfg.loaders) || containerCfg.loaders.contains(loader)) { + matchingLoaderFound = true; + break; + } + } + } + if (matchingLoaderFound) { + Debug.logInfo("Loading component's container: " + containerCfg.name, module); + Container tmpContainer = loadContainer(containerCfg, args); + this.loadedContainers.add(tmpContainer); + containerMap.put(containerCfg.name, tmpContainer); + } } // Get hot-deploy container configuration files ClassLoader loader = Thread.currentThread().getContextClassLoader(); |
| Free forum by Nabble | Edit this page |
