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

77245: Merged PLATFORM1 (5.0/Cloud) to HEAD-BUG-FIX (5.0/Cloud)
      76227: Merged DEV to PLATFORM1 with corrections
         75545: ACE-1996: Cluster: Web client extensions not distributed:
            - Remove initial title/description resolving in CMIS dictionaries
            - Use asynchronously refreshed cache in diactionaryDAO
            - Modify unit tests that uses CompiledModelCache 
            - Make sure that rootNode exists before children retrieving in DictionaryRepositoryBootstrap.getNodes()


git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@78101 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Mark Rogers
2014-07-23 16:50:06 +00:00
parent d16f78b9b2
commit 1edab772b1
10 changed files with 106 additions and 58 deletions

View File

@@ -23,6 +23,7 @@ import static org.junit.Assert.assertNull;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ThreadPoolExecutor;
import org.alfresco.model.ContentModel;
import org.alfresco.repo.cache.MemoryCache;
@@ -33,6 +34,10 @@ import org.alfresco.repo.tenant.SingleTServiceImpl;
import org.alfresco.repo.tenant.TenantService;
import org.alfresco.repo.tenant.TenantUtil;
import org.alfresco.repo.tenant.TenantUtil.TenantRunAsWork;
import org.alfresco.util.DynamicallySizedThreadPoolExecutor;
import org.alfresco.util.TraceableThreadFactory;
import org.alfresco.util.ThreadPoolExecutorFactoryBean;
import org.alfresco.util.cache.DefaultAsynchronouslyRefreshedCacheRegistry;
import org.alfresco.service.cmr.dictionary.DictionaryService;
import org.alfresco.service.cmr.dictionary.TypeDefinition;
import org.alfresco.service.namespace.QName;
@@ -64,7 +69,7 @@ public class DictionaryDAOTest
this.dictionaryDAO = new DictionaryDAOImpl();
dictionaryDAO.setTenantService(tenantService);
initDictionaryCaches(dictionaryDAO);
initDictionaryCaches(dictionaryDAO, tenantService);
new AuthenticationUtil().afterPropertiesSet();
@@ -87,19 +92,27 @@ public class DictionaryDAOTest
service = component;
}
private void initDictionaryCaches(DictionaryDAOImpl dictionaryDAO)
private void initDictionaryCaches(DictionaryDAOImpl dictionaryDAO, TenantService tenantService) throws Exception
{
dictionaryDAO.setDictionaryRegistryCache(new MemoryCache<String, DictionaryRegistry>());
CompiledModelsCache compiledModelsCache = new CompiledModelsCache();
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();
}
@Test
public void testBootstrap()
public void testBootstrap() throws Exception
{
TenantService tenantService = new SingleTServiceImpl();
DictionaryDAOImpl dictionaryDAO = new DictionaryDAOImpl();
dictionaryDAO.setTenantService(tenantService);
initDictionaryCaches(dictionaryDAO);
initDictionaryCaches(dictionaryDAO, tenantService);
DictionaryBootstrap bootstrap = new DictionaryBootstrap();
List<String> bootstrapModels = new ArrayList<String>();

View File

@@ -113,20 +113,18 @@ public class DictionaryLoadDAOTest
private void initDictionaryCaches(DictionaryDAOImpl dictionaryDAO, TenantService tenantService) throws Exception
{
dictionaryDAO.setDictionaryRegistryCache(new MemoryCache<String, DictionaryRegistry>());
CompiledModelsCache compiledModelsCache = new CompiledModelsCache();
compiledModelsCache.setDictionaryDAO(dictionaryDAO);
compiledModelsCache.setTenantService(tenantService);
compiledModelsCache.setRegistry(new DefaultAsynchronouslyRefreshedCacheRegistry());
TraceableThreadFactory threadFactory = new TraceableThreadFactory();
threadFactory.setThreadDaemon(true);
threadFactory.setThreadPriority(Thread.NORM_PRIORITY);
// CompiledModelsCache compiledModelsCache = new CompiledModelsCache();
// compiledModelsCache.setDictionaryDAO(dictionaryDAO);
// compiledModelsCache.setTenantService(tenantService);
// compiledModelsCache.setRegistry(new DefaultAsynchronouslyRefreshedCacheRegistry());
// TraceableThreadFactory threadFactory = new TraceableThreadFactory();
// threadFactory.setThreadDaemon(true);
// threadFactory.setThreadPriority(Thread.NORM_PRIORITY);
//
// ThreadPoolExecutor threadPoolExecutor = new DynamicallySizedThreadPoolExecutor(20, 20, 90, TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>(), threadFactory,
// new ThreadPoolExecutor.CallerRunsPolicy());
// compiledModelsCache.setThreadPoolExecutor(threadPoolExecutor);
// dictionaryDAO.setDictionaryRegistryCache(compiledModelsCache);
ThreadPoolExecutor threadPoolExecutor = new DynamicallySizedThreadPoolExecutor(20, 20, 90, TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>(), threadFactory,
new ThreadPoolExecutor.CallerRunsPolicy());
compiledModelsCache.setThreadPoolExecutor(threadPoolExecutor);
dictionaryDAO.setDictionaryRegistryCache(compiledModelsCache);
dictionaryDAO.init();
}

View File

@@ -26,6 +26,7 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ThreadPoolExecutor;
import junit.framework.TestCase;
@@ -54,6 +55,8 @@ import org.alfresco.service.cmr.dictionary.PropertyDefinition;
import org.alfresco.service.cmr.dictionary.TypeDefinition;
import org.alfresco.service.namespace.NamespaceService;
import org.alfresco.service.namespace.QName;
import org.alfresco.util.ThreadPoolExecutorFactoryBean;
import org.alfresco.util.cache.DefaultAsynchronouslyRefreshedCacheRegistry;
import org.springframework.extensions.surf.util.I18NUtil;
@@ -68,7 +71,7 @@ public class RepoDictionaryDAOTest extends TestCase
@Override
public void setUp()
public void setUp() throws Exception
{
// Registered the required constraints
ConstraintRegistry constraintRegistry = ConstraintRegistry.getInstance();
@@ -89,7 +92,7 @@ public class RepoDictionaryDAOTest extends TestCase
DictionaryDAOImpl dictionaryDAO = new DictionaryDAOImpl();
dictionaryDAO.setTenantService(tenantService);
initDictionaryCaches(dictionaryDAO);
initDictionaryCaches(dictionaryDAO, tenantService);
// Populate with appropriate models
DictionaryBootstrap bootstrap = new DictionaryBootstrap();
@@ -110,19 +113,26 @@ public class RepoDictionaryDAOTest extends TestCase
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");
dictionaryDAO.setDictionaryRegistryCache(dictionaryCache);
CompiledModelsCache compiledModelsCache = new CompiledModelsCache();
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();
}
public void testBootstrap()
public void testBootstrap() throws Exception
{
TenantService tenantService = new SingleTServiceImpl();
DictionaryDAOImpl dictionaryDAO = new DictionaryDAOImpl();
dictionaryDAO.setTenantService(tenantService);
initDictionaryCaches(dictionaryDAO);
initDictionaryCaches(dictionaryDAO, tenantService);
DictionaryBootstrap bootstrap = new DictionaryBootstrap();
List<String> bootstrapModels = new ArrayList<String>();
@@ -399,18 +409,18 @@ public class RepoDictionaryDAOTest extends TestCase
assertTrue("Expected 'true' for timestamp propagation", childAssocDef.getPropagateTimestamps());
}
public void testADB159() throws UnsupportedEncodingException
public void testADB159() throws Exception
{
// source dictionary
TenantService tenantService = new SingleTServiceImpl();
DictionaryDAOImpl dictionaryDAO = new DictionaryDAOImpl();
dictionaryDAO.setTenantService(tenantService);
initDictionaryCaches(dictionaryDAO);
initDictionaryCaches(dictionaryDAO, tenantService);
// destination dictionary
DictionaryDAOImpl dictionaryDAO2 = new DictionaryDAOImpl();
dictionaryDAO2.setTenantService(tenantService);
initDictionaryCaches(dictionaryDAO2);
initDictionaryCaches(dictionaryDAO2, tenantService);
List<String> models = new ArrayList<String>();
models.add("alfresco/model/dictionaryModel.xml");