svn commit: r1355460 - in /ofbiz/trunk/framework/base: dtd/ofbiz-component.xsd dtd/ofbiz-containers.xsd src/org/ofbiz/base/container/ContainerConfig.java src/org/ofbiz/base/container/ContainerLoader.java

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

svn commit: r1355460 - in /ofbiz/trunk/framework/base: dtd/ofbiz-component.xsd dtd/ofbiz-containers.xsd src/org/ofbiz/base/container/ContainerConfig.java src/org/ofbiz/base/container/ContainerLoader.java

jacopoc
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();