ALFCOM-2977 - Dictionary fails to re-init

git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@14784 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Jan Vonka
2009-06-18 11:35:12 +00:00
parent 8d3d1d4a70
commit e4efa5265c
6 changed files with 32 additions and 24 deletions

View File

@@ -116,6 +116,7 @@ public class DictionaryBootstrap implements DictionaryListener
*/ */
public void register() public void register()
{ {
dictionaryDAO.destroy(); // deployer - force reload on next get
dictionaryDAO.register(this); dictionaryDAO.register(this);
} }

View File

@@ -160,11 +160,11 @@ public interface DictionaryDAO extends ModelQuery
/** /**
* *
* Register with the Dictionary * Register listener with the Dictionary
* *
* @param dictionaryDeployer * @param dictionaryListener
*/ */
public void register(DictionaryListener dictionaryDeployer); public void register(DictionaryListener dictionaryListener);
/** /**
* Reset the Dictionary - destroy & re-initialise * Reset the Dictionary - destroy & re-initialise

View File

@@ -40,6 +40,7 @@ import org.alfresco.repo.cache.SimpleCache;
import org.alfresco.repo.security.authentication.AuthenticationUtil; import org.alfresco.repo.security.authentication.AuthenticationUtil;
import org.alfresco.repo.security.authentication.AuthenticationUtil.RunAsWork; import org.alfresco.repo.security.authentication.AuthenticationUtil.RunAsWork;
import org.alfresco.repo.tenant.TenantService; import org.alfresco.repo.tenant.TenantService;
import org.alfresco.repo.transaction.AlfrescoTransactionSupport;
import org.alfresco.service.cmr.dictionary.AspectDefinition; import org.alfresco.service.cmr.dictionary.AspectDefinition;
import org.alfresco.service.cmr.dictionary.AssociationDefinition; import org.alfresco.service.cmr.dictionary.AssociationDefinition;
import org.alfresco.service.cmr.dictionary.ClassDefinition; import org.alfresco.service.cmr.dictionary.ClassDefinition;
@@ -118,12 +119,11 @@ public class DictionaryDAOImpl implements DictionaryDAO
/** /**
* Register with the Dictionary * Register with the Dictionary
*/ */
public void register(DictionaryListener dictionaryDeployer) public void register(DictionaryListener dictionaryListener)
{ {
if (! dictionaryListeners.contains(dictionaryDeployer)) if (! dictionaryListeners.contains(dictionaryListener))
{ {
destroy(); // force reload on next get dictionaryListeners.add(dictionaryListener);
dictionaryListeners.add(dictionaryDeployer);
} }
} }
@@ -937,12 +937,19 @@ public class DictionaryDAOImpl implements DictionaryDAO
{ {
DictionaryRegistry dictionaryRegistry = null; DictionaryRegistry dictionaryRegistry = null;
// check threadlocal first - return if set
dictionaryRegistry = getDictionaryRegistryLocal(tenantDomain);
if (dictionaryRegistry != null)
{
return dictionaryRegistry; // return local dictionaryRegistry
}
try try
{ {
// check cache first - return if set // check cache second - return if set
readLock.lock(); readLock.lock();
dictionaryRegistry = dictionaryRegistryCache.get(tenantDomain); dictionaryRegistry = dictionaryRegistryCache.get(tenantDomain);
if (dictionaryRegistry != null) if (dictionaryRegistry != null)
{ {
return dictionaryRegistry; // return cached config return dictionaryRegistry; // return cached config
@@ -953,11 +960,9 @@ public class DictionaryDAOImpl implements DictionaryDAO
readLock.unlock(); readLock.unlock();
} }
// check threadlocal second - return if set if (logger.isDebugEnabled())
dictionaryRegistry = getDictionaryRegistryLocal(tenantDomain);
if (dictionaryRegistry != null)
{ {
return dictionaryRegistry; // return local dictionaryRegistry logger.debug("getDictionaryRegistry: not in cache (or threadlocal) - re-init ["+Thread.currentThread().getId()+", "+AlfrescoTransactionSupport.getTransactionId()+"]"+(tenantDomain.equals(TenantService.DEFAULT_DOMAIN) ? "" : " (Tenant: "+tenantDomain+")"));
} }
// reset caches - may have been invalidated (e.g. in a cluster) // reset caches - may have been invalidated (e.g. in a cluster)

View File

@@ -26,10 +26,9 @@ package org.alfresco.repo.dictionary;
/** /**
* Dictionary Deployer interface. * Dictionary Listener interface.
* <p> * <p>
* This interface allows DictionaryDAO to be (re-)initialised. * This interface allows Dictionary Listeners to register with the DictionaryService.
* Dictionary Deployer components must register with the DictionaryService.
* *
*/ */
public interface DictionaryListener public interface DictionaryListener

View File

@@ -436,6 +436,8 @@ public class DictionaryRepositoryBootstrap extends AbstractLifecycleBean impleme
*/ */
public void register() public void register()
{ {
dictionaryDAO.destroy(); // deployer - force reload on next get
// register with Dictionary Service to allow (re-)init // register with Dictionary Service to allow (re-)init
dictionaryDAO.register(this); dictionaryDAO.register(this);

View File

@@ -396,9 +396,17 @@ public class NamespaceDAOImpl implements NamespaceDAO
private NamespaceRegistry getNamespaceRegistry(String tenantDomain) private NamespaceRegistry getNamespaceRegistry(String tenantDomain)
{ {
NamespaceRegistry namespaceRegistry = null; NamespaceRegistry namespaceRegistry = null;
// check threadlocal first - return if set
namespaceRegistry = getNamespaceRegistryLocal(tenantDomain);
if (namespaceRegistry != null)
{
return namespaceRegistry; // return local namespaceRegistry
}
try try
{ {
// check cache first - return if set // check cache second - return if set
readLock.lock(); readLock.lock();
namespaceRegistry = namespaceRegistryCache.get(tenantDomain); namespaceRegistry = namespaceRegistryCache.get(tenantDomain);
@@ -412,13 +420,6 @@ public class NamespaceDAOImpl implements NamespaceDAO
readLock.unlock(); readLock.unlock();
} }
// check threadlocal second - return if set
namespaceRegistry = getNamespaceRegistryLocal(tenantDomain);
if (namespaceRegistry != null)
{
return namespaceRegistry; // return local namespaceRegistry
}
// reset caches - may have been invalidated (e.g. in a cluster) // reset caches - may have been invalidated (e.g. in a cluster)
namespaceRegistry = reset(tenantDomain); namespaceRegistry = reset(tenantDomain);