You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by ad...@apache.org on 2015/04/30 15:46:47 UTC
svn commit: r1676985 -
/ofbiz/trunk/framework/base/src/org/ofbiz/base/container/ComponentContainer.java
Author: adrianc
Date: Thu Apr 30 13:46:46 2015
New Revision: 1676985
URL: http://svn.apache.org/r1676985
Log:
Some work on ComponentContainer.java:
1. Improved thread safety
2. Optimization
3. Code cleanup
4. Use String constant instead of hard-coded value
Modified:
ofbiz/trunk/framework/base/src/org/ofbiz/base/container/ComponentContainer.java
Modified: ofbiz/trunk/framework/base/src/org/ofbiz/base/container/ComponentContainer.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/base/src/org/ofbiz/base/container/ComponentContainer.java?rev=1676985&r1=1676984&r2=1676985&view=diff
==============================================================================
--- ofbiz/trunk/framework/base/src/org/ofbiz/base/container/ComponentContainer.java (original)
+++ ofbiz/trunk/framework/base/src/org/ofbiz/base/container/ComponentContainer.java Thu Apr 30 13:46:46 2015
@@ -24,8 +24,8 @@ import java.net.MalformedURLException;
import java.net.URL;
import java.util.Arrays;
import java.util.List;
+import java.util.concurrent.atomic.AtomicBoolean;
-import org.ofbiz.base.component.AlreadyLoadedException;
import org.ofbiz.base.component.ComponentConfig;
import org.ofbiz.base.component.ComponentException;
import org.ofbiz.base.component.ComponentLoaderConfig;
@@ -49,10 +49,13 @@ public class ComponentContainer implemen
protected String configFileLocation = null;
private String name;
- private boolean loaded = false;
+ private final AtomicBoolean loaded = new AtomicBoolean(false);
@Override
public void init(String[] args, String name, String configFile) throws ContainerException {
+ if (!loaded.compareAndSet(false, true)) {
+ throw new ContainerException("Components already loaded, cannot start");
+ }
this.name = name;
this.configFileLocation = configFile;
@@ -68,8 +71,6 @@ public class ComponentContainer implemen
// load the components
try {
loadComponents(loaderConfig);
- } catch (AlreadyLoadedException e) {
- throw new ContainerException(e);
} catch (ComponentException e) {
throw new ContainerException(e);
}
@@ -79,20 +80,12 @@ public class ComponentContainer implemen
* @see org.ofbiz.base.container.Container#start()
*/
public boolean start() throws ContainerException {
- return true;
+ return loaded.get();
}
- public synchronized void loadComponents(String loaderConfig) throws AlreadyLoadedException, ComponentException {
- // set the loaded list; and fail if already loaded
- if (!loaded) {
- loaded = true;
- } else {
- throw new AlreadyLoadedException("Components already loaded, cannot start");
- }
-
+ public void loadComponents(String loaderConfig) throws ComponentException {
// get the components to load
List<ComponentLoaderConfig.ComponentDef> components = ComponentLoaderConfig.getRootComponents(loaderConfig);
-
String parentPath;
try {
parentPath = FileUtil.getFile(System.getProperty("ofbiz.home")).getCanonicalFile().toString().replaceAll("\\\\", "/");
@@ -164,11 +157,11 @@ public class ComponentContainer implemen
Arrays.sort(fileNames);
for (String sub: fileNames) {
try {
- File componentPath = FileUtil.getFile(parentPath.getCanonicalPath() + "/" + sub);
+ File componentPath = FileUtil.getFile(parentPath.getCanonicalPath() + File.separator + sub);
if (componentPath.isDirectory() && !sub.equals("CVS") && !sub.equals(".svn")) {
// make sure we have a component configuration file
String componentLocation = componentPath.getCanonicalPath();
- File configFile = FileUtil.getFile(componentLocation + "/ofbiz-component.xml");
+ File configFile = FileUtil.getFile(componentLocation.concat(File.separator).concat(ComponentConfig.OFBIZ_COMPONENT_XML_FILENAME));
if (configFile.exists()) {
ComponentConfig config = null;
try {