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 2013/06/08 13:55:12 UTC
svn commit: r1490965 - in /ofbiz/trunk/framework/entity/src/org/ofbiz/entity:
config/EntityConfigListener.java config/EntityConfigUtil.java
jdbc/ConnectionFactory.java transaction/TransactionFactory.java
Author: adrianc
Date: Sat Jun 8 11:55:12 2013
New Revision: 1490965
URL: http://svn.apache.org/r1490965
Log:
Removed some code I introduced in recent commits where I was hoping to support reloading the entityengine.xml file in a controlled manor, but it seems to be causing thread deadlocks.
https://issues.apache.org/jira/browse/OFBIZ-5216
Removed:
ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/EntityConfigListener.java
Modified:
ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/EntityConfigUtil.java
ofbiz/trunk/framework/entity/src/org/ofbiz/entity/jdbc/ConnectionFactory.java
ofbiz/trunk/framework/entity/src/org/ofbiz/entity/transaction/TransactionFactory.java
Modified: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/EntityConfigUtil.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/EntityConfigUtil.java?rev=1490965&r1=1490964&r2=1490965&view=diff
==============================================================================
--- ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/EntityConfigUtil.java (original)
+++ ofbiz/trunk/framework/entity/src/org/ofbiz/entity/config/EntityConfigUtil.java Sat Jun 8 11:55:12 2013
@@ -19,16 +19,14 @@
package org.ofbiz.entity.config;
import java.net.URL;
-import java.util.ArrayList;
-import java.util.List;
import java.util.Map;
+import java.util.concurrent.atomic.AtomicReference;
import org.ofbiz.base.util.Debug;
import org.ofbiz.base.util.UtilProperties;
import org.ofbiz.base.util.UtilURL;
import org.ofbiz.base.util.UtilValidate;
import org.ofbiz.base.util.UtilXml;
-import org.ofbiz.base.util.cache.UtilCache;
import org.ofbiz.entity.GenericEntityConfException;
import org.ofbiz.entity.config.model.Datasource;
import org.ofbiz.entity.config.model.DelegatorElement;
@@ -40,8 +38,6 @@ import org.ofbiz.entity.config.model.Ent
import org.ofbiz.entity.config.model.FieldType;
import org.ofbiz.entity.config.model.InlineJdbc;
import org.ofbiz.entity.config.model.ResourceLoader;
-import org.ofbiz.entity.jdbc.ConnectionFactory;
-import org.ofbiz.entity.transaction.TransactionFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
@@ -53,8 +49,7 @@ public final class EntityConfigUtil {
public static final String module = EntityConfigUtil.class.getName();
public static final String ENTITY_ENGINE_XML_FILENAME = "entityengine.xml";
- // Keep the EntityConfig instance in a cache - so the configuration can be reloaded at run-time. There will be only one EntityConfig instance in the cache.
- private static final UtilCache<String, EntityConfig> entityConfigCache = UtilCache.createUtilCache("entity.EntityConfig", 0, 0, false);
+ private static final AtomicReference<EntityConfig> configRef = new AtomicReference<EntityConfig>(null);
public static String createConfigFileLineNumberText(Element element) {
if (element.getUserData("startLine") != null) {
@@ -68,23 +63,12 @@ public final class EntityConfigUtil {
* @throws GenericEntityConfException
*/
public static EntityConfig getEntityConfig() throws GenericEntityConfException {
- EntityConfig instance = entityConfigCache.get("instance");
+ EntityConfig instance = configRef.get();
if (instance == null) {
- synchronized (EntityConfigUtil.class) {
- // Sync ensures resources are initialized properly - do not remove.
- Element entityConfigElement = getXmlDocument().getDocumentElement();
- instance = new EntityConfig(entityConfigElement);
- EntityConfig previousInstance = entityConfigCache.putIfAbsent("instance", instance);
- instance = entityConfigCache.get("instance");
- if (previousInstance == null) {
- for (EntityConfigListener listener : getConfigListeners()) {
- try {
- listener.onEntityConfigChange(instance);
- } catch (Exception e) {
- Debug.logError(e, "Exception thrown while notifying listener " + listener + ": ", module);
- }
- }
- }
+ Element entityConfigElement = getXmlDocument().getDocumentElement();
+ instance = new EntityConfig(entityConfigElement);
+ if (!configRef.compareAndSet(null, instance)) {
+ instance = configRef.get();
}
}
return instance;
@@ -102,15 +86,6 @@ public final class EntityConfigUtil {
}
}
- private static List<EntityConfigListener> getConfigListeners() {
- // TODO: Build a list of listeners. Listeners must be notified in a specific order
- // so resources can be deallocated/allocated properly and so dependencies can be followed.
- List<EntityConfigListener> configListeners = new ArrayList<EntityConfigListener>();
- configListeners.add(TransactionFactory.getConfigListener());
- configListeners.add(ConnectionFactory.getConfigListener());
- return configListeners;
- }
-
public static String getTxFactoryClass() throws GenericEntityConfException {
return getEntityConfig().getTransactionFactory().getClassName();
}
Modified: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/jdbc/ConnectionFactory.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/jdbc/ConnectionFactory.java?rev=1490965&r1=1490964&r2=1490965&view=diff
==============================================================================
--- ofbiz/trunk/framework/entity/src/org/ofbiz/entity/jdbc/ConnectionFactory.java (original)
+++ ofbiz/trunk/framework/entity/src/org/ofbiz/entity/jdbc/ConnectionFactory.java Sat Jun 8 11:55:12 2013
@@ -28,9 +28,7 @@ import java.util.concurrent.atomic.Atomi
import org.ofbiz.base.util.Debug;
import org.ofbiz.base.util.UtilValidate;
import org.ofbiz.entity.GenericEntityException;
-import org.ofbiz.entity.config.EntityConfigListener;
import org.ofbiz.entity.config.EntityConfigUtil;
-import org.ofbiz.entity.config.model.EntityConfig;
import org.ofbiz.entity.config.model.JdbcElement;
import org.ofbiz.entity.connection.ConnectionFactoryInterface;
import org.ofbiz.entity.datasource.GenericHelperInfo;
@@ -44,22 +42,6 @@ public class ConnectionFactory {
// Debug module name
public static final String module = ConnectionFactory.class.getName();
private static final AtomicReference<ConnectionFactoryInterface> connFactoryRef = new AtomicReference<ConnectionFactoryInterface>(null);
- private static final EntityConfigListener configListener = new EntityConfigListener() {
- @Override
- public void onEntityConfigChange(EntityConfig entityConfig) throws Exception {
- ConnectionFactoryInterface instance = createConnectionFactoryInterface();
- ConnectionFactoryInterface previousInstance = connFactoryRef.getAndSet(instance);
- if (previousInstance != null) {
- previousInstance.closeAll();
- Debug.logInfo("Listener shut down ConnectionFactoryInterface instance " + previousInstance, module);
- }
- Debug.logInfo("Listener created new ConnectionFactoryInterface instance " + instance, module);
- }
- };
-
- public static EntityConfigListener getConfigListener() {
- return configListener;
- }
private static ConnectionFactoryInterface createConnectionFactoryInterface() throws Exception {
String className = EntityConfigUtil.getConnectionFactoryClass();
@@ -124,9 +106,7 @@ public class ConnectionFactory {
if (instance == null) {
try {
instance = createConnectionFactoryInterface();
- if (connFactoryRef.compareAndSet(null, instance)) {
- Debug.logInfo("Factory method created new ConnectionFactoryInterface instance " + instance, module);
- } else {
+ if (!connFactoryRef.compareAndSet(null, instance)) {
instance = connFactoryRef.get();
}
} catch (Exception e) {
Modified: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/transaction/TransactionFactory.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/transaction/TransactionFactory.java?rev=1490965&r1=1490964&r2=1490965&view=diff
==============================================================================
--- ofbiz/trunk/framework/entity/src/org/ofbiz/entity/transaction/TransactionFactory.java (original)
+++ ofbiz/trunk/framework/entity/src/org/ofbiz/entity/transaction/TransactionFactory.java Sat Jun 8 11:55:12 2013
@@ -27,10 +27,8 @@ import javax.transaction.UserTransaction
import org.ofbiz.base.util.Debug;
import org.ofbiz.entity.GenericEntityException;
-import org.ofbiz.entity.config.model.Datasource;
-import org.ofbiz.entity.config.EntityConfigListener;
import org.ofbiz.entity.config.EntityConfigUtil;
-import org.ofbiz.entity.config.model.EntityConfig;
+import org.ofbiz.entity.config.model.Datasource;
import org.ofbiz.entity.datasource.GenericHelperInfo;
import org.ofbiz.entity.jdbc.CursorConnection;
@@ -41,22 +39,6 @@ public class TransactionFactory {
public static final String module = TransactionFactory.class.getName();
private static final AtomicReference<TransactionFactoryInterface> txFactoryRef = new AtomicReference<TransactionFactoryInterface>(null);
- private static final EntityConfigListener configListener = new EntityConfigListener() {
- @Override
- public void onEntityConfigChange(EntityConfig entityConfig) throws Exception {
- TransactionFactoryInterface instance = createTransactionFactoryInterface();
- TransactionFactoryInterface previousInstance = txFactoryRef.getAndSet(instance);
- if (previousInstance != null) {
- previousInstance.shutdown();
- Debug.logInfo("Listener shut down TransactionFactoryInterface instance " + previousInstance, module);
- }
- Debug.logInfo("Listener created new TransactionFactoryInterface instance " + instance, module);
- }
- };
-
- public static EntityConfigListener getConfigListener() {
- return configListener;
- }
private static TransactionFactoryInterface createTransactionFactoryInterface() throws Exception {
String className = EntityConfigUtil.getTxFactoryClass();
@@ -73,9 +55,7 @@ public class TransactionFactory {
if (instance == null) {
try {
instance = createTransactionFactoryInterface();
- if (txFactoryRef.compareAndSet(null, instance)) {
- Debug.logInfo("Factory method created new TransactionFactoryInterface instance " + instance, module);
- } else {
+ if (!txFactoryRef.compareAndSet(null, instance)) {
instance = txFactoryRef.get();
}
} catch (Exception e) {