mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-08-14 17:58:59 +00:00
- The size of the object and the nature in which it is read means that it does not really fit into the clustered cache model. We just notify the cluster if the cache entry it needs to be reloaded, serving stale data for a short while - ALF-19982: BM-0013: Reindex: WebScripts registry is repeatedly reset (DeclarativeRegistry) - ALF-19983 BM-0013: Reindex: Solr reindex works very slowly git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@55415 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
96 lines
3.6 KiB
Java
96 lines
3.6 KiB
Java
/*
|
|
* Copyright (C) 2005-2013 Alfresco Software Limited.
|
|
*
|
|
* This file is part of Alfresco
|
|
*
|
|
* Alfresco is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU Lesser General Public License as published by
|
|
* the Free Software Foundation, either version 3 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* Alfresco is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU Lesser General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public License
|
|
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
package org.alfresco.repo.web.scripts;
|
|
|
|
import org.alfresco.repo.cache.AbstractAsynchronouslyRefreshedCache;
|
|
import org.alfresco.repo.transaction.RetryingTransactionHelper;
|
|
import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback;
|
|
import org.alfresco.util.PropertyCheck;
|
|
import org.apache.commons.logging.Log;
|
|
import org.apache.commons.logging.LogFactory;
|
|
import org.springframework.beans.factory.InitializingBean;
|
|
import org.springframework.beans.factory.ObjectFactory;
|
|
import org.springframework.extensions.webscripts.Registry;
|
|
|
|
/**
|
|
* Asynchronously refreshed cache for repository webscripts.
|
|
* <p/>
|
|
* This does not stop gratuitous calls to <i>refresh</i> but will ensure that, once an instance has been created,
|
|
* a version of the registry is returned even if it is slighly out of date. This can be changed so that it waits
|
|
* for reset but is probably not required.
|
|
*
|
|
* @author Derek Hulley
|
|
* @since 4.2.0
|
|
*/
|
|
public class RegistryAsynchronouslyRefreshedCache extends AbstractAsynchronouslyRefreshedCache<Registry> implements InitializingBean
|
|
{
|
|
private static Log logger = LogFactory.getLog(RegistryAsynchronouslyRefreshedCache.class);
|
|
|
|
private ObjectFactory<Registry> registryFactory;
|
|
private RetryingTransactionHelper retryingTransactionHelper;
|
|
|
|
/**
|
|
* @param registryFactory factory for web script registries
|
|
*/
|
|
public void setRegistryFactory(ObjectFactory<Registry> registryFactory)
|
|
{
|
|
this.registryFactory = registryFactory;
|
|
}
|
|
|
|
/**
|
|
* @param retryingTransactionHelper the retryingTransactionHelper to set
|
|
*/
|
|
public void setRetryingTransactionHelper(RetryingTransactionHelper retryingTransactionHelper)
|
|
{
|
|
this.retryingTransactionHelper = retryingTransactionHelper;
|
|
}
|
|
|
|
@Override
|
|
protected Registry buildCache(final String tenantId)
|
|
{
|
|
return retryingTransactionHelper.doInTransaction(new RetryingTransactionCallback<Registry>()
|
|
{
|
|
@Override
|
|
public Registry execute() throws Throwable
|
|
{
|
|
return doBuildCache(tenantId);
|
|
}
|
|
}, true, false);
|
|
}
|
|
|
|
/**
|
|
* This method is thread safe as per contract of {@link #buildCache(String)}.
|
|
*/
|
|
private Registry doBuildCache(String tenantId)
|
|
{
|
|
Registry registry = registryFactory.getObject();
|
|
registry.reset();
|
|
logger.info("Fetching web script registry for tenant " + tenantId);
|
|
return registry;
|
|
}
|
|
|
|
@Override
|
|
public void afterPropertiesSet() throws Exception
|
|
{
|
|
PropertyCheck.mandatory(this, "registryFactory", registryFactory);
|
|
PropertyCheck.mandatory(this, "retryingTransactionHelper", retryingTransactionHelper);
|
|
super.afterPropertiesSet();
|
|
}
|
|
}
|