Merged HEAD-BUG-FIX (5.0/Cloud) to HEAD (5.0/Cloud)

77138: Merged PLATFORM1 (5.0/Cloud) to HEAD-BUG-FIX (5.0/Cloud)
      73642: Merged DEV to PLATFORM1(4.3.0)
      ACE-1996: Cluster: Web client extensions not distributed:
         72232: MNT-9882: Cluster: Web client extensions not distributed
          - Use asynchronously refreshed cache in diactionaryDAO 
         73275: MNT-9882: Cluster: Web client extensions not distributed
          - Add javadocs, remove excess classes. 
         73509: MNT-9882: Cluster: Web client extensions not distributed
          - Remove stale configs for "compiledModelsSharedCache", remove unreachable code from DictionaryDAOImpl, return value from NoOpCompiledModelsCache.get() method. 
         73591: ACE-1996: Cluster: Web client extensions not distributed
          - Remove NoOpCompiledModelsCache.
          - Modify unit tests that uses CompiledModelCache 


git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@77994 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Mark Rogers
2014-07-23 15:52:36 +00:00
parent 6250491ae5
commit 64bcf14401
6 changed files with 74 additions and 29 deletions

View File

@@ -378,8 +378,8 @@
<!-- The cross-transaction shared cache for Dictionary Models --> <!-- The cross-transaction shared cache for Dictionary Models -->
<bean name="compiledModelsCache" factory-bean="cacheFactory" factory-method="createCache"> <bean name="compiledModelsCache" class="org.alfresco.repo.dictionary.CompiledModelsCache" parent="abstractAsynchronouslyRefreshedCache">
<constructor-arg value="cache.compiledModelsSharedCache"/> <property name="dictionaryDAO" ref="dictionaryDAO" />
</bean> </bean>
<!-- The cross-transaction shared cache for Dictionary Namespaces [Must be non-clustered, non-txn and UNLIMITED IN SIZE]--> <!-- The cross-transaction shared cache for Dictionary Namespaces [Must be non-clustered, non-txn and UNLIMITED IN SIZE]-->

View File

@@ -364,7 +364,7 @@ cache.loadedResourceBundlesSharedCache.eviction-percentage=25
cache.loadedResourceBundlesSharedCache.merge-policy=hz.ADD_NEW_ENTRY cache.loadedResourceBundlesSharedCache.merge-policy=hz.ADD_NEW_ENTRY
cache.messagesSharedCache.tx.maxItems=1000 cache.messagesSharedCache.tx.maxItems=1000
cache.messagesSharedCache.maxItems=250 cache.messagesSharedCache.maxItems=1000
cache.messagesSharedCache.timeToLiveSeconds=0 cache.messagesSharedCache.timeToLiveSeconds=0
cache.messagesSharedCache.maxIdleSeconds=0 cache.messagesSharedCache.maxIdleSeconds=0
cache.messagesSharedCache.cluster.type=invalidating cache.messagesSharedCache.cluster.type=invalidating

View File

@@ -20,13 +20,15 @@ package org.alfresco.repo.dictionary;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.concurrent.ThreadPoolExecutor;
import org.alfresco.repo.cache.DefaultSimpleCache; import org.alfresco.repo.cache.DefaultSimpleCache;
import org.alfresco.repo.cache.SimpleCache; import org.alfresco.repo.cache.SimpleCache;
import org.alfresco.repo.dictionary.DictionaryDAOImpl.DictionaryRegistry;
import org.alfresco.repo.dictionary.NamespaceDAOImpl.NamespaceRegistry; import org.alfresco.repo.dictionary.NamespaceDAOImpl.NamespaceRegistry;
import org.alfresco.repo.tenant.SingleTServiceImpl; import org.alfresco.repo.tenant.SingleTServiceImpl;
import org.alfresco.repo.tenant.TenantService; import org.alfresco.repo.tenant.TenantService;
import org.alfresco.util.ThreadPoolExecutorFactoryBean;
import org.alfresco.util.cache.DefaultAsynchronouslyRefreshedCacheRegistry;
/** /**
@@ -44,8 +46,9 @@ public class TestModel
* TestModel [-h] [model filename]* * TestModel [-h] [model filename]*
* <p> * <p>
* Returns 0 for success. * Returns 0 for success.
* @throws Exception
*/ */
public static void main(String[] args) public static void main(String[] args) throws Exception
{ {
if (args != null && args.length > 0 && args[0].equals("-h")) if (args != null && args.length > 0 && args[0].equals("-h"))
{ {
@@ -89,7 +92,7 @@ public class TestModel
DictionaryDAOImpl dictionaryDAO = new DictionaryDAOImpl(namespaceDAO); DictionaryDAOImpl dictionaryDAO = new DictionaryDAOImpl(namespaceDAO);
dictionaryDAO.setTenantService(tenantService); dictionaryDAO.setTenantService(tenantService);
initDictionaryCaches(dictionaryDAO); initDictionaryCaches(dictionaryDAO, tenantService);
// bootstrap dao // bootstrap dao
try try
@@ -116,15 +119,23 @@ public class TestModel
} }
} }
private static void initDictionaryCaches(DictionaryDAOImpl dictionaryDAO) private static void initDictionaryCaches(DictionaryDAOImpl dictionaryDAO, TenantService tenantService) throws Exception
{ {
SimpleCache<String, DictionaryRegistry> dictionaryCache = new DefaultSimpleCache<String, DictionaryRegistry>(); CompiledModelsCache compiledModelsCache = new CompiledModelsCache();
dictionaryDAO.setDictionaryRegistryCache(dictionaryCache); compiledModelsCache.setDictionaryDAO(dictionaryDAO);
compiledModelsCache.setTenantService(tenantService);
compiledModelsCache.setRegistry(new DefaultAsynchronouslyRefreshedCacheRegistry());
ThreadPoolExecutorFactoryBean threadPoolfactory = new ThreadPoolExecutorFactoryBean();
threadPoolfactory.afterPropertiesSet();
compiledModelsCache.setThreadPoolExecutor((ThreadPoolExecutor) threadPoolfactory.getObject());
dictionaryDAO.setDictionaryRegistryCache(compiledModelsCache);
dictionaryDAO.init();
} }
private static void initNamespaceCaches(NamespaceDAOImpl namespaceDAO) private static void initNamespaceCaches(NamespaceDAOImpl namespaceDAO)
{ {
SimpleCache<String, NamespaceRegistry> namespaceCache = new DefaultSimpleCache<String, NamespaceRegistry>(); SimpleCache<String, NamespaceRegistry> namespaceCache = new DefaultSimpleCache<String, NamespaceRegistry>();
namespaceDAO.setNamespaceRegistryCache(namespaceCache); namespaceDAO.setNamespaceRegistryCache(namespaceCache);
namespaceDAO.init();
} }
} }

View File

@@ -26,14 +26,13 @@ import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.concurrent.ThreadPoolExecutor;
import junit.framework.TestCase; import junit.framework.TestCase;
import org.alfresco.model.ContentModel; import org.alfresco.model.ContentModel;
import org.alfresco.repo.cache.DefaultSimpleCache; import org.alfresco.repo.cache.DefaultSimpleCache;
import org.alfresco.repo.cache.NullCache;
import org.alfresco.repo.cache.SimpleCache; import org.alfresco.repo.cache.SimpleCache;
import org.alfresco.repo.dictionary.DictionaryDAOImpl.DictionaryRegistry;
import org.alfresco.repo.dictionary.NamespaceDAOImpl.NamespaceRegistry; import org.alfresco.repo.dictionary.NamespaceDAOImpl.NamespaceRegistry;
import org.alfresco.repo.dictionary.constraint.AbstractConstraint; import org.alfresco.repo.dictionary.constraint.AbstractConstraint;
import org.alfresco.repo.dictionary.constraint.ConstraintRegistry; import org.alfresco.repo.dictionary.constraint.ConstraintRegistry;
@@ -57,6 +56,8 @@ import org.alfresco.service.cmr.dictionary.PropertyDefinition;
import org.alfresco.service.cmr.dictionary.TypeDefinition; import org.alfresco.service.cmr.dictionary.TypeDefinition;
import org.alfresco.service.namespace.NamespaceService; import org.alfresco.service.namespace.NamespaceService;
import org.alfresco.service.namespace.QName; import org.alfresco.service.namespace.QName;
import org.alfresco.util.ThreadPoolExecutorFactoryBean;
import org.alfresco.util.cache.DefaultAsynchronouslyRefreshedCacheRegistry;
import org.springframework.extensions.surf.util.I18NUtil; import org.springframework.extensions.surf.util.I18NUtil;
@@ -71,7 +72,7 @@ public class RepoDictionaryDAOTest extends TestCase
@Override @Override
public void setUp() public void setUp() throws Exception
{ {
// Registered the required constraints // Registered the required constraints
ConstraintRegistry constraintRegistry = ConstraintRegistry.getInstance(); ConstraintRegistry constraintRegistry = ConstraintRegistry.getInstance();
@@ -95,7 +96,7 @@ public class RepoDictionaryDAOTest extends TestCase
DictionaryDAOImpl dictionaryDAO = new DictionaryDAOImpl(namespaceDAO); DictionaryDAOImpl dictionaryDAO = new DictionaryDAOImpl(namespaceDAO);
dictionaryDAO.setTenantService(tenantService); dictionaryDAO.setTenantService(tenantService);
initDictionaryCaches(dictionaryDAO); initDictionaryCaches(dictionaryDAO, tenantService);
// Populate with appropriate models // Populate with appropriate models
DictionaryBootstrap bootstrap = new DictionaryBootstrap(); DictionaryBootstrap bootstrap = new DictionaryBootstrap();
@@ -116,20 +117,28 @@ public class RepoDictionaryDAOTest extends TestCase
service = component; service = component;
} }
private void initDictionaryCaches(DictionaryDAOImpl dictionaryDAO) private void initDictionaryCaches(DictionaryDAOImpl dictionaryDAO, TenantService tenantService) throws Exception
{ {
SimpleCache<String,DictionaryRegistry> dictionaryCache = new DefaultSimpleCache<String, DictionaryRegistry>(11, getClass().getName() + ".dictionary"); CompiledModelsCache compiledModelsCache = new CompiledModelsCache();
dictionaryDAO.setDictionaryRegistryCache(dictionaryCache); compiledModelsCache.setDictionaryDAO(dictionaryDAO);
compiledModelsCache.setTenantService(tenantService);
compiledModelsCache.setRegistry(new DefaultAsynchronouslyRefreshedCacheRegistry());
ThreadPoolExecutorFactoryBean threadPoolfactory = new ThreadPoolExecutorFactoryBean();
threadPoolfactory.afterPropertiesSet();
compiledModelsCache.setThreadPoolExecutor((ThreadPoolExecutor) threadPoolfactory.getObject());
dictionaryDAO.setDictionaryRegistryCache(compiledModelsCache);
dictionaryDAO.init();
} }
private void initNamespaceCaches(NamespaceDAOImpl namespaceDAO) private void initNamespaceCaches(NamespaceDAOImpl namespaceDAO)
{ {
SimpleCache<String, NamespaceRegistry> namespaceCache = new DefaultSimpleCache<String, NamespaceRegistry>(11, getClass().getName() + ".namespace"); SimpleCache<String, NamespaceRegistry> namespaceCache = new DefaultSimpleCache<String, NamespaceRegistry>(11, getClass().getName() + ".namespace");
namespaceDAO.setNamespaceRegistryCache(namespaceCache); namespaceDAO.setNamespaceRegistryCache(namespaceCache);
namespaceDAO.init();
} }
public void testBootstrap() public void testBootstrap() throws Exception
{ {
TenantService tenantService = new SingleTServiceImpl(); TenantService tenantService = new SingleTServiceImpl();
NamespaceDAOImpl namespaceDAO = new NamespaceDAOImpl(); NamespaceDAOImpl namespaceDAO = new NamespaceDAOImpl();
@@ -138,7 +147,7 @@ public class RepoDictionaryDAOTest extends TestCase
DictionaryDAOImpl dictionaryDAO = new DictionaryDAOImpl(namespaceDAO); DictionaryDAOImpl dictionaryDAO = new DictionaryDAOImpl(namespaceDAO);
dictionaryDAO.setTenantService(tenantService); dictionaryDAO.setTenantService(tenantService);
initDictionaryCaches(dictionaryDAO); initDictionaryCaches(dictionaryDAO, tenantService);
DictionaryBootstrap bootstrap = new DictionaryBootstrap(); DictionaryBootstrap bootstrap = new DictionaryBootstrap();
List<String> bootstrapModels = new ArrayList<String>(); List<String> bootstrapModels = new ArrayList<String>();
@@ -415,7 +424,7 @@ public class RepoDictionaryDAOTest extends TestCase
assertTrue("Expected 'true' for timestamp propagation", childAssocDef.getPropagateTimestamps()); assertTrue("Expected 'true' for timestamp propagation", childAssocDef.getPropagateTimestamps());
} }
public void testADB159() throws UnsupportedEncodingException public void testADB159() throws Exception
{ {
// source dictionary // source dictionary
TenantService tenantService = new SingleTServiceImpl(); TenantService tenantService = new SingleTServiceImpl();
@@ -424,7 +433,7 @@ public class RepoDictionaryDAOTest extends TestCase
initNamespaceCaches(namespaceDAO); initNamespaceCaches(namespaceDAO);
DictionaryDAOImpl dictionaryDAO = new DictionaryDAOImpl(namespaceDAO); DictionaryDAOImpl dictionaryDAO = new DictionaryDAOImpl(namespaceDAO);
dictionaryDAO.setTenantService(tenantService); dictionaryDAO.setTenantService(tenantService);
initDictionaryCaches(dictionaryDAO); initDictionaryCaches(dictionaryDAO, tenantService);
// destination dictionary // destination dictionary
NamespaceDAOImpl namespaceDAO2 = new NamespaceDAOImpl(); NamespaceDAOImpl namespaceDAO2 = new NamespaceDAOImpl();
@@ -432,7 +441,7 @@ public class RepoDictionaryDAOTest extends TestCase
initNamespaceCaches(namespaceDAO2); initNamespaceCaches(namespaceDAO2);
DictionaryDAOImpl dictionaryDAO2 = new DictionaryDAOImpl(namespaceDAO2); DictionaryDAOImpl dictionaryDAO2 = new DictionaryDAOImpl(namespaceDAO2);
dictionaryDAO2.setTenantService(tenantService); dictionaryDAO2.setTenantService(tenantService);
initDictionaryCaches(dictionaryDAO2); initDictionaryCaches(dictionaryDAO2, tenantService);
List<String> models = new ArrayList<String>(); List<String> models = new ArrayList<String>();
models.add("alfresco/model/dictionaryModel.xml"); models.add("alfresco/model/dictionaryModel.xml");

View File

@@ -23,10 +23,12 @@ import java.util.Collection;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.concurrent.ThreadPoolExecutor;
import junit.framework.TestCase; import junit.framework.TestCase;
import org.alfresco.repo.cache.NullCache; import org.alfresco.repo.cache.NullCache;
import org.alfresco.repo.dictionary.CompiledModelsCache;
import org.alfresco.repo.dictionary.CompiledModel; import org.alfresco.repo.dictionary.CompiledModel;
import org.alfresco.repo.dictionary.DictionaryBootstrap; import org.alfresco.repo.dictionary.DictionaryBootstrap;
import org.alfresco.repo.dictionary.DictionaryComponent; import org.alfresco.repo.dictionary.DictionaryComponent;
@@ -38,6 +40,9 @@ import org.alfresco.service.cmr.repository.ChildAssociationRef;
import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.StoreRef; import org.alfresco.service.cmr.repository.StoreRef;
import org.alfresco.service.namespace.QName; import org.alfresco.service.namespace.QName;
import org.alfresco.util.ThreadPoolExecutorFactoryBean;
import org.alfresco.util.cache.DefaultAsynchronouslyRefreshedCacheRegistry;
import static org.mockito.Matchers.any; import static org.mockito.Matchers.any;
import static org.mockito.Mockito.mock; import static org.mockito.Mockito.mock;
@@ -88,7 +93,7 @@ public class MTPolicyComponentTest extends TestCase
initNamespaceCaches(namespaceDAO); initNamespaceCaches(namespaceDAO);
DictionaryDAOImpl dictionaryDAO = new DictionaryDAOImpl(namespaceDAO); DictionaryDAOImpl dictionaryDAO = new DictionaryDAOImpl(namespaceDAO);
dictionaryDAO.setTenantService(mockTenantService); dictionaryDAO.setTenantService(mockTenantService);
initDictionaryCaches(dictionaryDAO); initDictionaryCaches(dictionaryDAO, mockTenantService);
DictionaryBootstrap bootstrap = new DictionaryBootstrap(); DictionaryBootstrap bootstrap = new DictionaryBootstrap();
List<String> bootstrapModels = new ArrayList<String>(); List<String> bootstrapModels = new ArrayList<String>();
@@ -110,10 +115,17 @@ public class MTPolicyComponentTest extends TestCase
} }
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
private void initDictionaryCaches(DictionaryDAOImpl dictionaryDAO) private void initDictionaryCaches(DictionaryDAOImpl dictionaryDAO, TenantService tenantService) throws Exception
{ {
// note: unit tested here with null cache CompiledModelsCache compiledModelsCache = new CompiledModelsCache();
dictionaryDAO.setDictionaryRegistryCache(new NullCache()); compiledModelsCache.setDictionaryDAO(dictionaryDAO);
compiledModelsCache.setTenantService(tenantService);
compiledModelsCache.setRegistry(new DefaultAsynchronouslyRefreshedCacheRegistry());
ThreadPoolExecutorFactoryBean threadPoolfactory = new ThreadPoolExecutorFactoryBean();
threadPoolfactory.afterPropertiesSet();
compiledModelsCache.setThreadPoolExecutor((ThreadPoolExecutor) threadPoolfactory.getObject());
dictionaryDAO.setDictionaryRegistryCache(compiledModelsCache);
dictionaryDAO.init();
} }
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
@@ -121,6 +133,7 @@ public class MTPolicyComponentTest extends TestCase
{ {
// note: unit tested here with null cache // note: unit tested here with null cache
namespaceDAO.setNamespaceRegistryCache(new NullCache()); namespaceDAO.setNamespaceRegistryCache(new NullCache());
namespaceDAO.init();
} }
public void testJavaBehaviour() public void testJavaBehaviour()

View File

@@ -21,10 +21,12 @@ package org.alfresco.repo.policy;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.List; import java.util.List;
import java.util.concurrent.ThreadPoolExecutor;
import junit.framework.TestCase; import junit.framework.TestCase;
import org.alfresco.repo.cache.NullCache; import org.alfresco.repo.cache.NullCache;
import org.alfresco.repo.dictionary.CompiledModelsCache;
import org.alfresco.repo.dictionary.DictionaryBootstrap; import org.alfresco.repo.dictionary.DictionaryBootstrap;
import org.alfresco.repo.dictionary.DictionaryComponent; import org.alfresco.repo.dictionary.DictionaryComponent;
import org.alfresco.repo.dictionary.DictionaryDAOImpl; import org.alfresco.repo.dictionary.DictionaryDAOImpl;
@@ -32,6 +34,8 @@ import org.alfresco.repo.dictionary.NamespaceDAOImpl;
import org.alfresco.repo.tenant.SingleTServiceImpl; import org.alfresco.repo.tenant.SingleTServiceImpl;
import org.alfresco.repo.tenant.TenantService; import org.alfresco.repo.tenant.TenantService;
import org.alfresco.service.namespace.QName; import org.alfresco.service.namespace.QName;
import org.alfresco.util.ThreadPoolExecutorFactoryBean;
import org.alfresco.util.cache.DefaultAsynchronouslyRefreshedCacheRegistry;
public class PolicyComponentTest extends TestCase public class PolicyComponentTest extends TestCase
@@ -62,7 +66,7 @@ public class PolicyComponentTest extends TestCase
initNamespaceCaches(namespaceDAO); initNamespaceCaches(namespaceDAO);
DictionaryDAOImpl dictionaryDAO = new DictionaryDAOImpl(namespaceDAO); DictionaryDAOImpl dictionaryDAO = new DictionaryDAOImpl(namespaceDAO);
dictionaryDAO.setTenantService(tenantService); dictionaryDAO.setTenantService(tenantService);
initDictionaryCaches(dictionaryDAO); initDictionaryCaches(dictionaryDAO, tenantService);
DictionaryBootstrap bootstrap = new DictionaryBootstrap(); DictionaryBootstrap bootstrap = new DictionaryBootstrap();
List<String> bootstrapModels = new ArrayList<String>(); List<String> bootstrapModels = new ArrayList<String>();
@@ -82,10 +86,17 @@ public class PolicyComponentTest extends TestCase
} }
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
private void initDictionaryCaches(DictionaryDAOImpl dictionaryDAO) private void initDictionaryCaches(DictionaryDAOImpl dictionaryDAO, TenantService tenantService) throws Exception
{ {
// note: unit tested here with null cache CompiledModelsCache compiledModelsCache = new CompiledModelsCache();
dictionaryDAO.setDictionaryRegistryCache(new NullCache()); compiledModelsCache.setDictionaryDAO(dictionaryDAO);
compiledModelsCache.setTenantService(tenantService);
compiledModelsCache.setRegistry(new DefaultAsynchronouslyRefreshedCacheRegistry());
ThreadPoolExecutorFactoryBean threadPoolfactory = new ThreadPoolExecutorFactoryBean();
threadPoolfactory.afterPropertiesSet();
compiledModelsCache.setThreadPoolExecutor((ThreadPoolExecutor) threadPoolfactory.getObject());
dictionaryDAO.setDictionaryRegistryCache(compiledModelsCache);
dictionaryDAO.init();
} }
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
@@ -93,6 +104,7 @@ public class PolicyComponentTest extends TestCase
{ {
// note: unit tested here with null cache // note: unit tested here with null cache
namespaceDAO.setNamespaceRegistryCache(new NullCache()); namespaceDAO.setNamespaceRegistryCache(new NullCache());
namespaceDAO.init();
} }
public void testJavaBehaviour() public void testJavaBehaviour()