At a customer, I recently faced a problem with the JMX settings that couldn’t be reverted. If you already worked with Alfresco, you know that it’s possible to save configurations through the Alfresco Administration Console and that doing so will store these settings into the Database. This has several drawbacks like the fact that it’s then impossible to manage your Alfresco through its configuration files since the DB settings will always take precedence and that can lead to nasty surprises. Another potential problem is that the settings will then be globally managed, meaning that you cannot have distinct values on distinct Alfresco Nodes (in case of clustering). Therefore, a best practice is to always use the Alfresco configuration files and not the JMX Settings, except for some quick testing but you must never forget to revert them.

During an upgrade to Alfresco Content Services 7.1.0.1, I had the unpleasant surprise, at that customer, that there were JMX Settings being used for the Solr configuration (and 1 for Lucene as well but not shown on the Administration Console) that I couldn’t remove. These settings were remainder, coming from a very old system that we didn’t manage at the time. As part of the upgrade process, to match our Best Practices, the JMX Settings were checked, and all removed using the “Revert” button on the Alfresco Administration Console. There was no problem with that on a few environments, but it was, unfortunately, not the case for the PROD where it just didn’t work. Trying to use the “Revert” button on the Alfresco Administration Console ended up with the following error and logs:

2022-02-03 20:15:14,962  DEBUG [jscript.RhinoScriptProcessor.calls] [exec-6] admin-systemsummary.get.js Start
2022-02-03 20:15:15,052  DEBUG [jscript.RhinoScriptProcessor.calls] [exec-6] admin-systemsummary.get.js End 90 ms
2022-02-03 20:15:18,165  DEBUG [jscript.RhinoScriptProcessor.calls] [exec-4] admin-jmx-settings.get.js Start
2022-02-03 20:15:18,185  DEBUG [jscript.RhinoScriptProcessor.calls] [exec-4] admin-jmx-settings.get.js End 19 ms
2022-02-03 20:15:37,373  DEBUG [repo.jscript.RhinoScriptProcessor] [exec-1] Resolving and compiling script path: jar:file:/opt/alfresco/tomcat/webapps/alfresco/WEB-INF/lib/alfresco-enterprise-remote-api-11.153.jar!/alfresco/enterprise/webscripts/org/alfresco/enterprise/repository/admin/support-tools/admin-jmx-settings.post.js
2022-02-03 20:15:37,373  DEBUG [repo.jscript.RhinoScriptProcessor] [exec-1] Found script resource import: classpath:alfresco/enterprise/webscripts/org/alfresco/enterprise/repository/admin/admin-common.lib.js
2022-02-03 20:15:37,374  DEBUG [repo.jscript.RhinoScriptProcessor] [exec-1] Succesfully located script 'classpath:alfresco/enterprise/webscripts/org/alfresco/enterprise/repository/admin/admin-common.lib.js'
2022-02-03 20:15:37,374  DEBUG [repo.jscript.RhinoScriptProcessor] [exec-1] Found script resource import: classpath:alfresco/templates/webscripts/org/alfresco/repository/admin/admin-common.lib.js
2022-02-03 20:15:37,374  DEBUG [repo.jscript.RhinoScriptProcessor] [exec-1] Succesfully located script 'classpath:alfresco/templates/webscripts/org/alfresco/repository/admin/admin-common.lib.js'
2022-02-03 20:15:37,374  DEBUG [repo.jscript.RhinoScriptProcessor] [exec-1] Imports resolved, adding resource 'classpath:alfresco/templates/webscripts/org/alfresco/repository/admin/admin-common.lib.js
2022-02-03 20:15:37,374  DEBUG [repo.jscript.RhinoScriptProcessor] [exec-1] Imports resolved, adding resource 'classpath:alfresco/enterprise/webscripts/org/alfresco/enterprise/repository/admin/admin-common.lib.js
2022-02-03 20:15:37,374  DEBUG [repo.jscript.RhinoScriptProcessor] [exec-1] Imports resolved, adding resource '_root
2022-02-03 20:15:37,383  DEBUG [jscript.RhinoScriptProcessor.calls] [exec-1] admin-jmx-settings.post.js Start
2022-02-03 20:15:37,384  DEBUG [repo.jscript.ScriptLogger] [exec-1] beanName: Alfresco_Category=Search,Type=Configuration,id1=managed,id2=solr
2022-02-03 20:15:37,415  INFO  [management.subsystems.ChildApplicationContextFactory] [exec-1] Starting 'Search' subsystem, ID: [Search, managed, solr]
2022-02-03 20:15:37,735  WARN  [management.subsystems.ChildApplicationContextFactory$ChildApplicationContext] [exec-1] Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'search.solrIndexCheckService' defined in URL [jar:file:/opt/alfresco/tomcat/webapps/alfresco/WEB-INF/lib/alfresco-enterprise-repository-11.153.jar!/alfresco/subsystems/Search/solr/solr-jmx-context.xml]: Cannot resolve reference to bean 'solrAdminClient' while setting bean property 'solrAdminClient'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'solrAdminClient' defined in URL [jar:file:/opt/alfresco/tomcat/webapps/alfresco/WEB-INF/lib/alfresco-repository-11.140.jar!/alfresco/subsystems/Search/solr/solr-search-context.xml]: Error setting property values; nested exception is org.springframework.beans.NotWritablePropertyException: Invalid property 'solrHost' of bean class [org.alfresco.repo.solr.SOLRAdminClient]: Bean property 'solrHost' is not writable or has an invalid setter method. Does the parameter type of the setter match the return type of the getter?
2022-02-03 20:15:38,237  WARN  [management.subsystems.ChildApplicationContextFactory] [exec-1] Startup of 'Search' subsystem, ID: [Search, managed, solr] failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'search.solrIndexCheckService' defined in URL [jar:file:/opt/alfresco/tomcat/webapps/alfresco/WEB-INF/lib/alfresco-enterprise-repository-11.153.jar!/alfresco/subsystems/Search/solr/solr-jmx-context.xml]: Cannot resolve reference to bean 'solrAdminClient' while setting bean property 'solrAdminClient'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'solrAdminClient' defined in URL [jar:file:/opt/alfresco/tomcat/webapps/alfresco/WEB-INF/lib/alfresco-repository-11.140.jar!/alfresco/subsystems/Search/solr/solr-search-context.xml]: Error setting property values; nested exception is org.springframework.beans.NotWritablePropertyException: Invalid property 'solrHost' of bean class [org.alfresco.repo.solr.SOLRAdminClient]: Bean property 'solrHost' is not writable or has an invalid setter method. Does the parameter type of the setter match the return type of the getter?
        at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:342)
        at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:113)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1689)
        ...
Caused by: org.springframework.beans.NotWritablePropertyException: Invalid property 'solrHost' of bean class [org.alfresco.repo.solr.SOLRAdminClient]: Bean property 'solrHost' is not writable or has an invalid setter method. Does the parameter type of the setter match the return type of the getter?
        at org.springframework.beans.BeanWrapperImpl.createNotWritablePropertyException(BeanWrapperImpl.java:243)
        at org.springframework.beans.AbstractNestablePropertyAccessor.processLocalProperty(AbstractNestablePropertyAccessor.java:432)
        at org.springframework.beans.AbstractNestablePropertyAccessor.setPropertyValue(AbstractNestablePropertyAccessor.java:278)
        ...
2022-02-03 20:15:38,238  ERROR [management.subsystems.PropertyBackedBeanAdapter] [exec-1] java.lang.RuntimeException: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'search.solrIndexCheckService' defined in URL [jar:file:/opt/alfresco/tomcat/webapps/alfresco/WEB-INF/lib/alfresco-enterprise-repository-11.153.jar!/alfresco/subsystems/Search/solr/solr-jmx-context.xml]: Cannot resolve reference to bean 'solrAdminClient' while setting bean property 'solrAdminClient'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'solrAdminClient' defined in URL [jar:file:/opt/alfresco/tomcat/webapps/alfresco/WEB-INF/lib/alfresco-repository-11.140.jar!/alfresco/subsystems/Search/solr/solr-search-context.xml]: Error setting property values; nested exception is org.springframework.beans.NotWritablePropertyException: Invalid property 'solrHost' of bean class [org.alfresco.repo.solr.SOLRAdminClient]: Bean property 'solrHost' is not writable or has an invalid setter method. Does the parameter type of the setter match the return type of the getter?
2022-02-03 20:15:38,239  DEBUG [jscript.RhinoScriptProcessor.calls] [exec-1] admin-jmx-settings.post.js Exception
org.mozilla.javascript.WrappedException: Wrapped javax.management.RuntimeMBeanException: java.lang.RuntimeException: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'search.solrIndexCheckService' defined in URL [jar:file:/opt/alfresco/tomcat/webapps/alfresco/WEB-INF/lib/alfresco-enterprise-repository-11.153.jar!/alfresco/subsystems/Search/solr/solr-jmx-context.xml]: Cannot resolve reference to bean 'solrAdminClient' while setting bean property 'solrAdminClient'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'solrAdminClient' defined in URL [jar:file:/opt/alfresco/tomcat/webapps/alfresco/WEB-INF/lib/alfresco-repository-11.140.jar!/alfresco/subsystems/Search/solr/solr-search-context.xml]: Error setting property values; nested exception is org.springframework.beans.NotWritablePropertyException: Invalid property 'solrHost' of bean class [org.alfresco.repo.solr.SOLRAdminClient]: Bean property 'solrHost' is not writable or has an invalid setter method. Does the parameter type of the setter match the return type of the getter? (classpath*:alfresco/enterprise/webscripts/org/alfresco/enterprise/repository/admin/support-tools/admin-jmx-settings.post.js#486)
        at org.alfresco.enterprise.repo.management.script.ScriptableMBeanOperations$4.call(ScriptableMBeanOperations.java:398)
        at org.mozilla.javascript.optimizer.OptRuntime.callProp0(OptRuntime.java:98)
        at org.mozilla.javascript.gen.classpath__alfresco_enterprise_webscripts_org_alfresco_enterprise_repository_admin_support_tools_admin_jmx_settings_post_js_20._c_main_17(classpath*:alfresco/enterprise/webscripts/org/alfresco/enterprise/repository/admin/support-tools/admin-jmx-settings.post.js:486)
        ...
Caused by: org.springframework.beans.NotWritablePropertyException: Invalid property 'solrHost' of bean class [org.alfresco.repo.solr.SOLRAdminClient]: Bean property 'solrHost' is not writable or has an invalid setter method. Does the parameter type of the setter match the return type of the getter?
        at org.springframework.beans.BeanWrapperImpl.createNotWritablePropertyException(BeanWrapperImpl.java:243)
        at org.springframework.beans.AbstractNestablePropertyAccessor.processLocalProperty(AbstractNestablePropertyAccessor.java:432)
        at org.springframework.beans.AbstractNestablePropertyAccessor.setPropertyValue(AbstractNestablePropertyAccessor.java:278)
        ...
2022-02-03 20:15:38,240  DEBUG [jscript.RhinoScriptProcessor.calls] [exec-1] admin-jmx-settings.post.js End 857 ms
2022-02-03 20:15:38,242  ERROR [extensions.webscripts.AbstractRuntime] [exec-1] Exception from executeScript: 01030006 Wrapped Exception (with status template): 01030131 Failed to execute script 'classpath*:alfresco/enterprise/webscripts/org/alfresco/enterprise/repository/admin/support-tools/admin-jmx-settings.post.js': java.lang.RuntimeException: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'search.solrIndexCheckService' defined in URL [jar:file:/opt/alfresco/tomcat/webapps/alfresco/WEB-INF/lib/alfresco-enterprise-repository-11.153.jar!/alfresco/subsystems/Search/solr/solr-jmx-context.xml]: Cannot resolve reference to bean 'solrAdminClient' while setting bean property 'solrAdminClient'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'solrAdminClient' defined in URL [jar:file:/opt/alfresco/tomcat/webapps/alfresco/WEB-INF/lib/alfresco-repository-11.140.jar!/alfresco/subsystems/Search/solr/solr-search-context.xml]: Error setting property values; nested exception is org.springframework.beans.NotWritablePropertyException: Invalid property 'solrHost' of bean class [org.alfresco.repo.solr.SOLRAdminClient]: Bean property 'solrHost' is not writable or has an invalid setter method. Does the parameter type of the setter match the return type of the getter?
org.springframework.extensions.webscripts.WebScriptException: 01030006 Wrapped Exception (with status template): 01030131 Failed to execute script 'classpath*:alfresco/enterprise/webscripts/org/alfresco/enterprise/repository/admin/support-tools/admin-jmx-settings.post.js': java.lang.RuntimeException: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'search.solrIndexCheckService' defined in URL [jar:file:/opt/alfresco/tomcat/webapps/alfresco/WEB-INF/lib/alfresco-enterprise-repository-11.153.jar!/alfresco/subsystems/Search/solr/solr-jmx-context.xml]: Cannot resolve reference to bean 'solrAdminClient' while setting bean property 'solrAdminClient'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'solrAdminClient' defined in URL [jar:file:/opt/alfresco/tomcat/webapps/alfresco/WEB-INF/lib/alfresco-repository-11.140.jar!/alfresco/subsystems/Search/solr/solr-search-context.xml]: Error setting property values; nested exception is org.springframework.beans.NotWritablePropertyException: Invalid property 'solrHost' of bean class [org.alfresco.repo.solr.SOLRAdminClient]: Bean property 'solrHost' is not writable or has an invalid setter method. Does the parameter type of the setter match the return type of the getter?
        at org.springframework.extensions.webscripts.AbstractWebScript.createStatusException(AbstractWebScript.java:1139)
        at org.springframework.extensions.webscripts.DeclarativeWebScript.execute(DeclarativeWebScript.java:171)
        at org.alfresco.repo.web.scripts.RepositoryContainer.lambda$transactionedExecute$2(RepositoryContainer.java:556)
        ...
Caused by: org.springframework.beans.NotWritablePropertyException: Invalid property 'solrHost' of bean class [org.alfresco.repo.solr.SOLRAdminClient]: Bean property 'solrHost' is not writable or has an invalid setter method. Does the parameter type of the setter match the return type of the getter?
        at org.springframework.beans.BeanWrapperImpl.createNotWritablePropertyException(BeanWrapperImpl.java:243)
        at org.springframework.beans.AbstractNestablePropertyAccessor.processLocalProperty(AbstractNestablePropertyAccessor.java:432)
        at org.springframework.beans.AbstractNestablePropertyAccessor.setPropertyValue(AbstractNestablePropertyAccessor.java:278)
        ...

 

So, what to do when JMX Settings cannot be Reverted like that? There is always the possibility to clean the Database directly (while Alfresco isn’t running) but the DB tables that store the JMX Settings are rather complex. It’s not impossible but it’s definitively not the recommended option if you can avoid it. Of course, if Alfresco cannot start at all anymore, you will have to go through the Database and remove things in there, so look at the following tables: alf_prop_link, alf_prop_value, alf_prop_string_value, alf_prop_root and alf_prop_unique_ctx. However, if Alfresco can start, then you have a much nicer and much safer way to remove JMX Settings: using the AttributeService!

The AttributeService is an interface of the Alfresco Java API to manage attributes. There isn’t much documentation about it but there are a few technical presentations: Alfresco’s Attribute Service Primer (June 2013) & Alfresco Tech Talk Live (Episode 75) (April 2014). The idea to use this service actually came initially from Bindu Wavell while we were discussing this topic on the Alfresco Discord (don’t hesitate to join us there) with other members of the Alfresco Community.

This AttributeService if very good for specific purposes but it’s initially part of the Java API, meaning that you would need to write a piece of Java to use it. That might be a problem for some customers or for you directly, if you aren’t really proficient in development. Fortunately, there is something, that (almost?) everybody in the Alfresco Community knows, called the JavaScript Console. It’s an addon that allows you to use the Alfresco JavaScript API on the Repository directly, by executing the code in the Share UI (i.e. in your browser). This addon also allows to do JavaScript-Java interoperability, meaning that you can use the Java API through the JavaScript Console. Here is an example of how to use the AttributeService.getAttributes method in the JavaScript Console:

var context = Packages.org.springframework.web.context.ContextLoader.getCurrentWebApplicationContext();
var attributeService = context.getBean("attributeService", Packages.org.alfresco.repo.attributes.AttributeServiceImpl);

attributeService.getAttributes(function(id, value, keys) {
    print(' > id: ' + id);
    print('  >> key: ["' + keys[0] + '", "' + keys[1] + '"]');
    print('  >> value: ' + value);
    print('');
    return true;
}, ["keyCheck"]);

The first 2 lines above are related to the interoperability and the rest simply list all Attributes that share the same key(s) (in the above example, the key is: [“keyCheck”]). Using the AttributeService in this way is really simple and it might be harder to find the correct key(s) to use because there is no documentation on it. Obviously, if it’s related to your custom attributes, then you should know the keys since you created them, but what about the Alfresco OutOfTheBox ones? Alfresco made it so that it is unfortunately impossible (as far as I could see) to retrieve and list all attributes in one go. You would need to first find at least the top-level key for the attribute you are looking for before you can retrieve the associated value(s). It took me some time but, in the end, I was able to find what I was looking for inside the alf_prop_string_value DB table. The key(s) and its associated values are stored on this table and therefore to find them, you can just list its content. Most of the Alfresco OOTB keys appear to have a alf_prop_string_value.string_value starting with a dot. It’s not always the case as you can see above (it’s not [“.keyCheck”] but simply [“keyCheck”]) but it does gives already a certain list of keys to go through. Here is an example:

SQL> SELECT id, string_value
 2   FROM alf_prop_string_value
 3   WHERE string_value like '.%'
 4   ORDER BY 1 ASC;
  id              string_value
------  ---------------------------------
    21  .PropertyBackedBeans
    46  .ChainingUserRegistrySynchronizer
    55  .empty
    58  .repoUsages
    62  .SHARD_STATE
  1372  .clusterInfo
  1373  .cluster_name
  1375  .clusterMembers
  1377  .host_name
  1379  .ip_address
  1381  .port
  1382  .clustering_enabled
  1383  .last_registered
  1384  .cluster_node_type

 

For the JMX Settings specifically, the top-level key to be used is [“.PropertyBackedBeans”]. It is also possible to filter the list of attributes to retrieve by specifying a sub-level key. Going back to my customer case, even if the Alfresco Administration Console showed only one MBean (Alfresco:Category=Search,Type=Configuration,id1=managed,id2=solr), the AttributeService returned two set of Attributes stored on the DB, as I said before, one for Solr and one for Lucene:

The sub-level keys can be seen on the above screenshot, but you can also find their values from the DB as I said earlier as well as from the MBean name. For example, the MBean “Alfresco:Category=Search,Type=Configuration,id1=managed,id2=solr” can be translated to the key of [“.PropertyBackedBeans”, “Search$managed$solr”] (cat$id1$id2 in this case). Here are some more examples on how to retrieve the attributes using the AttributeService methods (getAttributes using a top-level key only, getAttributes using a top and sub-level key and another method getAttribute (without the s) to retrieve the value of a single attribute):

So, retrieving attributes is good and all but we still have our JMX Settings present… The next step is therefore to remove them and for that purpose, we will use the same top-level and sub-level keys that we found. First, removing the Lucene JMX Settings:

var context = Packages.org.springframework.web.context.ContextLoader.getCurrentWebApplicationContext();
var attributeService = context.getBean("attributeService", Packages.org.alfresco.repo.attributes.AttributeServiceImpl);

attributeService.getAttributes(function(id, value, keys) {
    print(' > id: ' + id);
    print('  >> key: ["' + keys[0] + '", "' + keys[1] + '"]');
    print('  >> value: ' + value);
    //if ((keys[0] == ".PropertyBackedBeans") && (keys[1] == "Search$managed$solr")) {
    if ((keys[0] == ".PropertyBackedBeans") && (keys[1] == "Search$managed$lucene")) {
        attributeService.removeAttribute([keys[0], keys[1]]);
        print('   >>> The attribute for ["' + keys[0] + '", "' + keys[1] + '"] has been removed');
    }
    print('');
    return true;
}, [".PropertyBackedBeans"]);

 

Then, removing the Solr JMX Settings:

var context = Packages.org.springframework.web.context.ContextLoader.getCurrentWebApplicationContext();
var attributeService = context.getBean("attributeService", Packages.org.alfresco.repo.attributes.AttributeServiceImpl);

attributeService.getAttributes(function(id, value, keys) {
    print(' > id: ' + id);
    print('  >> key: ["' + keys[0] + '", "' + keys[1] + '"]');
    print('  >> value: ' + value);
    if ((keys[0] == ".PropertyBackedBeans") && (keys[1] == "Search$managed$solr")) {
    //if ((keys[0] == ".PropertyBackedBeans") && (keys[1] == "Search$managed$lucene")) {
        attributeService.removeAttribute([keys[0], keys[1]]);
        print('   >>> The attribute for ["' + keys[0] + '", "' + keys[1] + '"] has been removed');
    }
    print('');
    return true;
}, [".PropertyBackedBeans"]);

 

It is also possible to obtain the same result by simply filtering the sub-level key on the method arguments (using [“.PropertyBackedBeans”, “Search$managed$solr”] on line 15 instead of [“.PropertyBackedBeans”]). The result would be exactly the same, but the above “if” statement make sure that you only remove what you expect to remove. It’s just another level of check, to prevent human error. Another alternative could be to use the removeAttribute method directly (so just the lines 1, 2 and 10 above), since the top-level and sub-level keys are known, it’s not really need to retrieve them first via the getAttributes… Therefore, proceed as prefered.

If you want the output of the JavaScript Console to appear on the Tomcat logs, you can replace “print” with “logger.warn” or “logger.info”. Here is an example of log generated for these actions:

  1. List JMX Attributes (cd2b1a49208e85e40e4978d80d59afd8.js) >> 2 sets of properties shown
  2. Remove Lucene JMX Attributes (cca083e1fc36fd7eb6691b47193a3885.js)
  3. Remove Solr JMX Attributes (716300901e28026ffc632490eed87be1.js)
  4. List JMX Attributes (cd2b1a49208e85e40e4978d80d59afd8.js) >> no properties remaining
2022-02-14 20:17:32,555  DEBUG [repo.jscript.RhinoScriptProcessor] [exec-49] Resolving and compiling script path: cd2b1a49208e85e40e4978d80d59afd8.js
2022-02-14 20:17:32,562  DEBUG [jscript.RhinoScriptProcessor.calls] [exec-49] cd2b1a49208e85e40e4978d80d59afd8.js Start
2022-02-14 20:17:32,564  INFO  [repo.jscript.ScriptLogger] [exec-49]  > id: 21
2022-02-14 20:17:32,564  INFO  [repo.jscript.ScriptLogger] [exec-49]   >> key: [".PropertyBackedBeans", "Search$managed$solr"]
2022-02-14 20:17:32,564  INFO  [repo.jscript.ScriptLogger] [exec-49]   >> value: {solr.backup.alfresco.numberToKeep=3, search.solrTrackingSupport.enabled=true, solr.backup.archive.remoteBackupLocation=${dir.root}/solrBackup/archive, solr.backup.archive.cronExpression=0 0 4 * * ?, solr.host=localhost, solr.backup.alfresco.remoteBackupLocation=${dir.root}/solrBackup/alfresco, solr.backup.archive.numberToKeep=3, solr.backup.alfresco.cronExpression=0 0 2 * * ?, solr.port=8080, solr.port.ssl=8443}
2022-02-14 20:17:32,564  INFO  [repo.jscript.ScriptLogger] [exec-49]
2022-02-14 20:17:32,564  INFO  [repo.jscript.ScriptLogger] [exec-49]  > id: 22 - key: .PropertyBackedBeans - Search$managed$lucene - value: {index.recovery.maximumPoolSize=5}
2022-02-14 20:17:32,564  INFO  [repo.jscript.ScriptLogger] [exec-49]   >> key: [".PropertyBackedBeans", "Search$managed$lucene"]
2022-02-14 20:17:32,564  INFO  [repo.jscript.ScriptLogger] [exec-49]   >> value: {index.recovery.maximumPoolSize=5}
2022-02-14 20:17:32,564  INFO  [repo.jscript.ScriptLogger] [exec-49]
2022-02-14 20:17:32,564  DEBUG [jscript.RhinoScriptProcessor.calls] [exec-49] cd2b1a49208e85e40e4978d80d59afd8.js End 2 ms
2022-02-14 20:17:52,197  DEBUG [repo.jscript.RhinoScriptProcessor] [exec-41] Resolving and compiling script path: cca083e1fc36fd7eb6691b47193a3885.js
2022-02-14 20:17:52,204  DEBUG [jscript.RhinoScriptProcessor.calls] [exec-41] cca083e1fc36fd7eb6691b47193a3885.js Start
2022-02-14 20:17:52,206  INFO  [repo.jscript.ScriptLogger] [exec-41]  > id: 21
2022-02-14 20:17:52,206  INFO  [repo.jscript.ScriptLogger] [exec-41]   >> key: [".PropertyBackedBeans", "Search$managed$solr"]
2022-02-14 20:17:52,206  INFO  [repo.jscript.ScriptLogger] [exec-41]   >> value: {solr.backup.alfresco.numberToKeep=3, search.solrTrackingSupport.enabled=true, solr.backup.archive.remoteBackupLocation=${dir.root}/solrBackup/archive, solr.backup.archive.cronExpression=0 0 4 * * ?, solr.host=localhost, solr.backup.alfresco.remoteBackupLocation=${dir.root}/solrBackup/alfresco, solr.backup.archive.numberToKeep=3, solr.backup.alfresco.cronExpression=0 0 2 * * ?, solr.port=8080, solr.port.ssl=8443}
2022-02-14 20:17:52,207  INFO  [repo.jscript.ScriptLogger] [exec-41]
2022-02-14 20:17:52,207  INFO  [repo.jscript.ScriptLogger] [exec-41]  > id: 22 - key: .PropertyBackedBeans - Search$managed$lucene - value: {index.recovery.maximumPoolSize=5}
2022-02-14 20:17:52,207  INFO  [repo.jscript.ScriptLogger] [exec-41]   >> key: [".PropertyBackedBeans", "Search$managed$lucene"]
2022-02-14 20:17:52,207  INFO  [repo.jscript.ScriptLogger] [exec-41]   >> value: {index.recovery.maximumPoolSize=5}
2022-02-14 20:17:52,210  INFO  [repo.jscript.ScriptLogger] [exec-41]    >>> The attribute for [".PropertyBackedBeans", "Search$managed$lucene"] has been removed
2022-02-14 20:17:52,210  INFO  [repo.jscript.ScriptLogger] [exec-41]
2022-02-14 20:17:52,211  DEBUG [jscript.RhinoScriptProcessor.calls] [exec-41] cca083e1fc36fd7eb6691b47193a3885.js End 6 ms
2022-02-14 20:18:41,840  DEBUG [repo.jscript.RhinoScriptProcessor] [exec-12] Resolving and compiling script path: 716300901e28026ffc632490eed87be1.js
2022-02-14 20:18:41,847  DEBUG [jscript.RhinoScriptProcessor.calls] [exec-12] 716300901e28026ffc632490eed87be1.js Start
2022-02-14 20:18:41,849  INFO  [repo.jscript.ScriptLogger] [exec-12]  > id: 21
2022-02-14 20:18:41,849  INFO  [repo.jscript.ScriptLogger] [exec-12]   >> key: [".PropertyBackedBeans", "Search$managed$solr"]
2022-02-14 20:18:41,849  INFO  [repo.jscript.ScriptLogger] [exec-12]   >> value: {solr.backup.alfresco.numberToKeep=3, search.solrTrackingSupport.enabled=true, solr.backup.archive.remoteBackupLocation=${dir.root}/solrBackup/archive, solr.backup.archive.cronExpression=0 0 4 * * ?, solr.host=localhost, solr.backup.alfresco.remoteBackupLocation=${dir.root}/solrBackup/alfresco, solr.backup.archive.numberToKeep=3, solr.backup.alfresco.cronExpression=0 0 2 * * ?, solr.port=8080, solr.port.ssl=8443}
2022-02-14 20:18:41,850  INFO  [repo.jscript.ScriptLogger] [exec-12]    >>> The attribute for [".PropertyBackedBeans", "Search$managed$solr"] has been removed
2022-02-14 20:18:41,850  INFO  [repo.jscript.ScriptLogger] [exec-12]
2022-02-14 20:18:41,850  DEBUG [jscript.RhinoScriptProcessor.calls] [exec-12] 716300901e28026ffc632490eed87be1.js End 3 ms
2022-02-14 20:18:57,199  DEBUG [repo.jscript.RhinoScriptProcessor] [exec-37] Resolving and compiling script path: cd2b1a49208e85e40e4978d80d59afd8.js
2022-02-14 20:18:57,205  DEBUG [jscript.RhinoScriptProcessor.calls] [exec-37] cd2b1a49208e85e40e4978d80d59afd8.js Start
2022-02-14 20:18:57,207  DEBUG [jscript.RhinoScriptProcessor.calls] [exec-37] cd2b1a49208e85e40e4978d80d59afd8.js End 1 ms

 

As shown above, the execution was done successfully, no errors and all the JMX Settings were finally gone:

A small restart of Alfresco, to make sure nothing has been broken and to clean the cache and you are good to go.