diff --git a/source/java/org/alfresco/repo/dictionary/DictionaryRepositoryBootstrap.java b/source/java/org/alfresco/repo/dictionary/DictionaryRepositoryBootstrap.java index 73ba849f82..22c7025509 100644 --- a/source/java/org/alfresco/repo/dictionary/DictionaryRepositoryBootstrap.java +++ b/source/java/org/alfresco/repo/dictionary/DictionaryRepositoryBootstrap.java @@ -28,6 +28,7 @@ import java.util.Set; import org.alfresco.error.AlfrescoRuntimeException; import org.alfresco.model.ContentModel; +import org.alfresco.repo.content.EmptyContentReader; import org.alfresco.repo.i18n.MessageDeployer; import org.alfresco.repo.i18n.MessageService; import org.alfresco.repo.tenant.TenantAdminService; @@ -212,10 +213,11 @@ public class DictionaryRepositoryBootstrap extends AbstractLifecycleBean impleme if (logger.isTraceEnabled()) { - logger.trace("onDictionaryInit: ["+Thread.currentThread()+"]"); + String tenantDomain = tenantAdminService.getCurrentUserDomain(); + logger.trace("onDictionaryInit: ["+Thread.currentThread()+"]"+(tenantDomain.equals(TenantService.DEFAULT_DOMAIN) ? "" : " (Tenant: "+tenantDomain+")")); } - Collection modelsBefore = dictionaryDAO.getModels(); + Collection modelsBefore = dictionaryDAO.getModels(); // note: re-entrant int modelsBeforeCnt = (modelsBefore != null ? modelsBefore.size() : 0); List loadedModels = new ArrayList(); @@ -295,18 +297,10 @@ public class DictionaryRepositoryBootstrap extends AbstractLifecycleBean impleme Collection modelsAfter = dictionaryDAO.getModels(); int modelsAfterCnt = (modelsAfter != null ? modelsAfter.size() : 0); - if (modelsAfterCnt != (modelsBeforeCnt + loadedModels.size())) + if (logger.isDebugEnabled()) { String tenantDomain = tenantAdminService.getCurrentUserDomain(); - logger.warn("Model count: before="+modelsBeforeCnt+", load="+loadedModels.size()+", after="+modelsAfterCnt+" in "+(System.currentTimeMillis()-startTime)+" msecs ["+Thread.currentThread()+"] "+(tenantDomain.equals(TenantService.DEFAULT_DOMAIN) ? "" : " (Tenant: "+tenantDomain+")")); - } - else - { - if (logger.isDebugEnabled()) - { - String tenantDomain = tenantAdminService.getCurrentUserDomain(); - logger.debug("Model count: before="+modelsBeforeCnt+", load="+loadedModels.size()+", after="+modelsAfterCnt+" in "+(System.currentTimeMillis()-startTime)+" msecs ["+Thread.currentThread()+"] "+(tenantDomain.equals(TenantService.DEFAULT_DOMAIN) ? "" : " (Tenant: "+tenantDomain+")")); - } + logger.debug("Model count: before="+modelsBeforeCnt+", load/update="+loadedModels.size()+", after="+modelsAfterCnt+" in "+(System.currentTimeMillis()-startTime)+" msecs ["+Thread.currentThread()+"] "+(tenantDomain.equals(TenantService.DEFAULT_DOMAIN) ? "" : " (Tenant: "+tenantDomain+")")); } } @@ -459,7 +453,15 @@ public class DictionaryRepositoryBootstrap extends AbstractLifecycleBean impleme ContentReader contentReader = this.contentService.getReader(nodeRef, ContentModel.PROP_CONTENT); if (contentReader != null) { - model = M2Model.createModel(contentReader.getContentInputStream()); + if (contentReader instanceof EmptyContentReader) + { + // belts-and-braces + logger.error("Failed to create model (due to EmptyContentReader): "+nodeRef); + } + else + { + model = M2Model.createModel(contentReader.getContentInputStream()); + } } // TODO should we inactivate the model node and put the error somewhere?? return model; diff --git a/source/java/org/alfresco/repo/tenant/MultiTAdminServiceImpl.java b/source/java/org/alfresco/repo/tenant/MultiTAdminServiceImpl.java index 70ece5fb25..e778040aac 100644 --- a/source/java/org/alfresco/repo/tenant/MultiTAdminServiceImpl.java +++ b/source/java/org/alfresco/repo/tenant/MultiTAdminServiceImpl.java @@ -271,23 +271,24 @@ public class MultiTAdminServiceImpl implements TenantAdminService, ApplicationCo register(dictionaryComponent); // register file store - to allow enable/disable tenant callbacks - register(tenantFileContentStore); + // note: tenantFileContentStore must be registed before dictionaryRepositoryBootstrap + register(tenantFileContentStore, 0); UserTransaction userTransaction = transactionService.getUserTransaction(); - try + try { authenticationContext.setSystemUserAsCurrentUser(); userTransaction.begin(); - // bootstrap Tenant Service internal cache + // bootstrap Tenant Service internal cache List tenants = getAllTenants(); int enabledCount = 0; int disabledCount = 0; for (Tenant tenant : tenants) - { + { if (tenant.isEnabled()) { // this will also call tenant deployers registered so far ... @@ -1075,15 +1076,27 @@ public class MultiTAdminServiceImpl implements TenantAdminService, ApplicationCo } public void register(TenantDeployer deployer) + { + register(deployer, -1); + } + + protected void register(TenantDeployer deployer, int position) { if (deployer == null) { - throw new AlfrescoRuntimeException("TenantDeployer must be provided"); + throw new AlfrescoRuntimeException("Deployer must be provided"); } - + if (! tenantDeployers.contains(deployer)) { - tenantDeployers.add(deployer); + if (position == -1) + { + tenantDeployers.add(deployer); + } + else + { + tenantDeployers.add(position, deployer); + } } } @@ -1092,8 +1105,8 @@ public class MultiTAdminServiceImpl implements TenantAdminService, ApplicationCo if (deployer == null) { throw new AlfrescoRuntimeException("TenantDeployer must be provided"); - } - + } + if (tenantDeployers != null) { tenantDeployers.remove(deployer);