From 03f7156590e6f28c046bb7e5d21bc5ca3424b1d4 Mon Sep 17 00:00:00 2001 From: Mark Rogers Date: Wed, 30 Apr 2014 16:33:07 +0000 Subject: [PATCH] Merged HEAD-BUG-FIX (4.3/Cloud) to HEAD (4.3/Cloud) 68201: Merged PLATFORM1 (4.3/Cloud) to HEAD-BUG-FIX (4.3/Cloud) 64815: Put transaction back around licenseService.verifyLicense() (removed in r63894) - ACE-525 - BM-0013: SOAK: v420b214_01: DescriptorService intercepts retrying exception during concurrent start - The transaction is required for concurrency, etc. - Added code to inspect any resulting exception in order to dig out a LicenseException git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@68464 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../descriptor/DescriptorServiceImpl.java | 35 ++++++++++++++----- 1 file changed, 27 insertions(+), 8 deletions(-) diff --git a/source/java/org/alfresco/repo/descriptor/DescriptorServiceImpl.java b/source/java/org/alfresco/repo/descriptor/DescriptorServiceImpl.java index 4d5f1d27d8..34453d6266 100644 --- a/source/java/org/alfresco/repo/descriptor/DescriptorServiceImpl.java +++ b/source/java/org/alfresco/repo/descriptor/DescriptorServiceImpl.java @@ -22,6 +22,7 @@ import java.io.InputStream; import java.lang.reflect.Constructor; import org.alfresco.error.AlfrescoRuntimeException; +import org.alfresco.error.ExceptionStackUtil; import org.alfresco.repo.security.authentication.AuthenticationUtil; import org.alfresco.repo.security.authentication.AuthenticationUtil.RunAsWork; import org.alfresco.repo.transaction.RetryingTransactionHelper; @@ -261,7 +262,7 @@ public class DescriptorServiceImpl extends AbstractLifecycleBean { public Descriptor execute() { - return installedRepoDescriptorDAO.getDescriptor(); + return installedRepoDescriptorDAO.getDescriptor(); } }; Descriptor installed = helper.doInTransaction(getDescriptorCallback, false, false); @@ -299,15 +300,34 @@ public class DescriptorServiceImpl extends AbstractLifecycleBean // Now listen for future license changes licenseService.registerOnLicenseChange(this); + // load the license + RetryingTransactionCallback loadLicenseCallback = new RetryingTransactionCallback() + { + @Override + public Void execute() throws Throwable + { + // Verify license has side effect of loading any new licenses + licenseService.verifyLicense(); + return null; + } + }; try - { - // Verify license has side effect of loading any new licenses - licenseService.verifyLicense(); + { + helper.doInTransaction(loadLicenseCallback, false, false); } - catch (LicenseException e) + catch (Exception e) { // Swallow Licence Exception Here - // Don't log error: It'll be reported by other means + if (ExceptionStackUtil.getCause(e, LicenseException.class) != null) + { + // We found a LicenseException in the bowels + // Don't log error: It'll be reported by other means + } + else + { + // The error here is something else unforeseen + throw e; + } }; } @@ -385,8 +405,7 @@ public class DescriptorServiceImpl extends AbstractLifecycleBean { if (currentRepoDescriptor == null) { - currentRepoDescriptor = currentRepoDescriptorDAO.updateDescriptor(serverDescriptor, - LicenseMode.UNKNOWN); + currentRepoDescriptor = currentRepoDescriptorDAO.updateDescriptor(serverDescriptor, LicenseMode.UNKNOWN); } } }