|
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) { |
| Free forum by Nabble | Edit this page |
