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