{"id":17123,"date":"2022-02-17T19:30:46","date_gmt":"2022-02-17T18:30:46","guid":{"rendered":"https:\/\/www.dbi-services.com\/blog\/alfresco-removing-jmx-settings-via-the-attributeservice-since-the-revert-doesnt-work\/"},"modified":"2022-05-31T16:35:08","modified_gmt":"2022-05-31T14:35:08","slug":"alfresco-removing-jmx-settings-via-the-attributeservice-since-the-revert-doesnt-work","status":"publish","type":"post","link":"https:\/\/www.dbi-services.com\/blog\/alfresco-removing-jmx-settings-via-the-attributeservice-since-the-revert-doesnt-work\/","title":{"rendered":"Alfresco &#8211; Removing JMX settings via the AttributeService since the Revert doesn&#8217;t work"},"content":{"rendered":"<p>At a customer, I recently faced a problem with the JMX settings that couldn&#8217;t be reverted. If you already worked with Alfresco, you know that it&#8217;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&#8217;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.<\/p>\n<p>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&#8217;t remove. These settings were remainder, coming from a very old system that we didn&#8217;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 &#8220;Revert&#8221; 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&#8217;t work. Trying to use the &#8220;Revert&#8221; button on the Alfresco Administration Console ended up with the following error and logs:<\/p>\n<p><a href=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/02\/Alf_JMX_Settings-1.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-54468\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/02\/Alf_JMX_Settings-1.png\" alt=\"\" width=\"1817\" height=\"1080\" \/><\/a><\/p>\n<p><a href=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/02\/Alf_JMX_Revert-1.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-54470\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/02\/Alf_JMX_Revert-1.png\" alt=\"\" width=\"2366\" height=\"656\" \/><\/a><\/p>\n<pre class=\"brush: java; gutter: true; first-line: 1\">2022-02-03 20:15:14,962  DEBUG [jscript.RhinoScriptProcessor.calls] [exec-6] admin-systemsummary.get.js Start\n2022-02-03 20:15:15,052  DEBUG [jscript.RhinoScriptProcessor.calls] [exec-6] admin-systemsummary.get.js End 90 ms\n2022-02-03 20:15:18,165  DEBUG [jscript.RhinoScriptProcessor.calls] [exec-4] admin-jmx-settings.get.js Start\n2022-02-03 20:15:18,185  DEBUG [jscript.RhinoScriptProcessor.calls] [exec-4] admin-jmx-settings.get.js End 19 ms\n2022-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\n2022-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\n2022-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'\n2022-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\n2022-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'\n2022-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\n2022-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\n2022-02-03 20:15:37,374  DEBUG [repo.jscript.RhinoScriptProcessor] [exec-1] Imports resolved, adding resource '_root\n2022-02-03 20:15:37,383  DEBUG [jscript.RhinoScriptProcessor.calls] [exec-1] admin-jmx-settings.post.js Start\n2022-02-03 20:15:37,384  DEBUG [repo.jscript.ScriptLogger] [exec-1] beanName: Alfresco_Category=Search,Type=Configuration,id1=managed,id2=solr\n2022-02-03 20:15:37,415  INFO  [management.subsystems.ChildApplicationContextFactory] [exec-1] Starting 'Search' subsystem, ID: [Search, managed, solr]\n2022-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?\n2022-02-03 20:15:38,237  WARN  [management.subsystems.ChildApplicationContextFactory] [exec-1] Startup of 'Search' subsystem, ID: [Search, managed, solr] failed\norg.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?\n        at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:342)\n        at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:113)\n        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1689)\n        ...\nCaused 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?\n        at org.springframework.beans.BeanWrapperImpl.createNotWritablePropertyException(BeanWrapperImpl.java:243)\n        at org.springframework.beans.AbstractNestablePropertyAccessor.processLocalProperty(AbstractNestablePropertyAccessor.java:432)\n        at org.springframework.beans.AbstractNestablePropertyAccessor.setPropertyValue(AbstractNestablePropertyAccessor.java:278)\n        ...\n2022-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?\n2022-02-03 20:15:38,239  DEBUG [jscript.RhinoScriptProcessor.calls] [exec-1] admin-jmx-settings.post.js Exception\norg.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)\n        at org.alfresco.enterprise.repo.management.script.ScriptableMBeanOperations$4.call(ScriptableMBeanOperations.java:398)\n        at org.mozilla.javascript.optimizer.OptRuntime.callProp0(OptRuntime.java:98)\n        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)\n        ...\nCaused 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?\n        at org.springframework.beans.BeanWrapperImpl.createNotWritablePropertyException(BeanWrapperImpl.java:243)\n        at org.springframework.beans.AbstractNestablePropertyAccessor.processLocalProperty(AbstractNestablePropertyAccessor.java:432)\n        at org.springframework.beans.AbstractNestablePropertyAccessor.setPropertyValue(AbstractNestablePropertyAccessor.java:278)\n        ...\n2022-02-03 20:15:38,240  DEBUG [jscript.RhinoScriptProcessor.calls] [exec-1] admin-jmx-settings.post.js End 857 ms\n2022-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?\norg.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?\n        at org.springframework.extensions.webscripts.AbstractWebScript.createStatusException(AbstractWebScript.java:1139)\n        at org.springframework.extensions.webscripts.DeclarativeWebScript.execute(DeclarativeWebScript.java:171)\n        at org.alfresco.repo.web.scripts.RepositoryContainer.lambda$transactionedExecute$2(RepositoryContainer.java:556)\n        ...\nCaused 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?\n        at org.springframework.beans.BeanWrapperImpl.createNotWritablePropertyException(BeanWrapperImpl.java:243)\n        at org.springframework.beans.AbstractNestablePropertyAccessor.processLocalProperty(AbstractNestablePropertyAccessor.java:432)\n        at org.springframework.beans.AbstractNestablePropertyAccessor.setPropertyValue(AbstractNestablePropertyAccessor.java:278)\n        ...<\/pre>\n<p>&nbsp;<\/p>\n<p>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&#8217;t running) but the DB tables that store the JMX Settings are rather complex. It&#8217;s not impossible but it&#8217;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: <em>alf_prop_link<\/em>, <em>alf_prop_value<\/em>, <em>alf_prop_string_value<\/em>, <em>alf_prop_root<\/em> and <em>alf_prop_unique_ctx<\/em>. However, if Alfresco can start, then you have a much nicer and much safer way to remove JMX Settings: using the <em>AttributeService<\/em>!<\/p>\n<p>The <a href=\"https:\/\/dev.alfresco.com\/resource\/docs\/java\/org\/alfresco\/service\/cmr\/attributes\/AttributeService.html\" target=\"_blank\" rel=\"noopener\"><em>AttributeService<\/em><\/a> is an interface of the Alfresco Java API to manage attributes. There isn&#8217;t much documentation about it but there are a few technical presentations: <a href=\"https:\/\/vimeo.com\/67580571\" target=\"_blank\" rel=\"noopener\">Alfresco\u2019s Attribute Service Primer<\/a> (June 2013) &amp; <a href=\"https:\/\/www.youtube.com\/watch?v=obQ_89MFtRs\" target=\"_blank\" rel=\"noopener\">Alfresco Tech Talk Live (Episode 75)<\/a> (April 2014). The idea to use this service actually came initially from <a href=\"https:\/\/twitter.com\/binduwavell\" target=\"_blank\" rel=\"noopener\">Bindu Wavell<\/a> while we were discussing this topic on the Alfresco Discord (don&#8217;t hesitate to join us <a href=\"https:\/\/discord.gg\/Ub33j4tvm5\" target=\"_blank\" rel=\"noopener\">there<\/a>) with other members of the Alfresco Community.<\/p>\n<p>This <em>AttributeService<\/em> if very good for specific purposes but it&#8217;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&#8217;t really proficient in development. Fortunately, there is something, that (almost?) everybody in the Alfresco Community knows, called the <a href=\"https:\/\/github.com\/share-extras\/js-console\" target=\"_blank\" rel=\"noopener\"><em>JavaScript Console<\/em><\/a>. It&#8217;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 <em>JavaScript Console<\/em>. Here is an example of how to use the <em>AttributeService.getAttributes<\/em> method in the <em>JavaScript Console<\/em>:<\/p>\n<pre class=\"brush: javascript; gutter: true; first-line: 1\">var context = Packages.org.springframework.web.context.ContextLoader.getCurrentWebApplicationContext();\nvar attributeService = context.getBean(\"attributeService\", Packages.org.alfresco.repo.attributes.AttributeServiceImpl);\n\nattributeService.getAttributes(function(id, value, keys) {\n    print(' &gt; id: ' + id);\n    print('  &gt;&gt; key: [\"' + keys[0] + '\", \"' + keys[1] + '\"]');\n    print('  &gt;&gt; value: ' + value);\n    print('');\n    return true;\n}, [\"keyCheck\"]);<\/pre>\n<p><a href=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/02\/Alf_js_keyCheck.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-54453\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/02\/Alf_js_keyCheck.png\" alt=\"\" width=\"2260\" height=\"1059\" \/><\/a><\/p>\n<p>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: <em>[&#8220;keyCheck&#8221;]<\/em>). Using the <em>AttributeService<\/em> 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&#8217;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 <em>alf_prop_string_value<\/em> 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 <em>alf_prop_string_value.string_value<\/em> starting with a dot. It&#8217;s not always the case as you can see above (it&#8217;s not <em>[&#8220;.keyCheck&#8221;]<\/em> but simply <em>[&#8220;keyCheck&#8221;]<\/em>) but it does gives already a certain list of keys to go through. Here is an example:<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">SQL&gt; SELECT id, string_value\n 2   FROM alf_prop_string_value\n 3   WHERE string_value like '.%'\n 4   ORDER BY 1 ASC;\n  id              string_value\n------  ---------------------------------\n    21  .PropertyBackedBeans\n    46  .ChainingUserRegistrySynchronizer\n    55  .empty\n    58  .repoUsages\n    62  .SHARD_STATE\n  1372  .clusterInfo\n  1373  .cluster_name\n  1375  .clusterMembers\n  1377  .host_name\n  1379  .ip_address\n  1381  .port\n  1382  .clustering_enabled\n  1383  .last_registered\n  1384  .cluster_node_type<\/pre>\n<p>&nbsp;<\/p>\n<p>For the JMX Settings specifically, the top-level key to be used is <em>[&#8220;.PropertyBackedBeans&#8221;]<\/em>. 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 (<em>Alfresco:Category=Search,Type=Configuration,id1=managed,id2=solr<\/em>), the <em>AttributeService<\/em> returned two set of Attributes stored on the DB, as I said before, one for Solr and one for Lucene:<\/p>\n<p><a href=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/02\/Alf_prop_string_value_and_simple-exec.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-54457\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/02\/Alf_prop_string_value_and_simple-exec.png\" alt=\"\" width=\"3219\" height=\"1487\" \/><\/a><\/p>\n<p>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 &#8220;<em>Alfresco:Category=Search,Type=Configuration,id1=managed,id2=solr<\/em>&#8221; can be translated to the key of <em>[&#8220;.PropertyBackedBeans&#8221;<\/em>, <em>&#8220;Search$managed$solr&#8221;]<\/em> (<em>cat$id1$id2<\/em> in this case). Here are some more examples on how to retrieve the attributes using the <em>AttributeService<\/em> methods (<em>getAttributes<\/em> using a top-level key only, <em>getAttributes<\/em> using a top and sub-level key and another method <em>getAttribute<\/em> (without the s) to retrieve the value of a single attribute):<\/p>\n<p><a href=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/02\/Alf_example-exec.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-54459\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/02\/Alf_example-exec.png\" alt=\"\" width=\"2808\" height=\"1873\" \/><\/a><\/p>\n<p>So, retrieving attributes is good and all but we still have our JMX Settings present&#8230; 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:<\/p>\n<pre class=\"brush: javascript; gutter: true; first-line: 1\">var context = Packages.org.springframework.web.context.ContextLoader.getCurrentWebApplicationContext();\nvar attributeService = context.getBean(\"attributeService\", Packages.org.alfresco.repo.attributes.AttributeServiceImpl);\n\nattributeService.getAttributes(function(id, value, keys) {\n    print(' &gt; id: ' + id);\n    print('  &gt;&gt; key: [\"' + keys[0] + '\", \"' + keys[1] + '\"]');\n    print('  &gt;&gt; value: ' + value);\n    \/\/if ((keys[0] == \".PropertyBackedBeans\") &amp;&amp; (keys[1] == \"Search$managed$solr\")) {\n    if ((keys[0] == \".PropertyBackedBeans\") &amp;&amp; (keys[1] == \"Search$managed$lucene\")) {\n        attributeService.removeAttribute([keys[0], keys[1]]);\n        print('   &gt;&gt;&gt; The attribute for [\"' + keys[0] + '\", \"' + keys[1] + '\"] has been removed');\n    }\n    print('');\n    return true;\n}, [\".PropertyBackedBeans\"]);<\/pre>\n<p>&nbsp;<\/p>\n<p>Then, removing the Solr JMX Settings:<\/p>\n<pre class=\"brush: javascript; gutter: true; first-line: 1\">var context = Packages.org.springframework.web.context.ContextLoader.getCurrentWebApplicationContext();\nvar attributeService = context.getBean(\"attributeService\", Packages.org.alfresco.repo.attributes.AttributeServiceImpl);\n\nattributeService.getAttributes(function(id, value, keys) {\n    print(' &gt; id: ' + id);\n    print('  &gt;&gt; key: [\"' + keys[0] + '\", \"' + keys[1] + '\"]');\n    print('  &gt;&gt; value: ' + value);\n    if ((keys[0] == \".PropertyBackedBeans\") &amp;&amp; (keys[1] == \"Search$managed$solr\")) {\n    \/\/if ((keys[0] == \".PropertyBackedBeans\") &amp;&amp; (keys[1] == \"Search$managed$lucene\")) {\n        attributeService.removeAttribute([keys[0], keys[1]]);\n        print('   &gt;&gt;&gt; The attribute for [\"' + keys[0] + '\", \"' + keys[1] + '\"] has been removed');\n    }\n    print('');\n    return true;\n}, [\".PropertyBackedBeans\"]);<\/pre>\n<p>&nbsp;<\/p>\n<p>It is also possible to obtain the same result by simply filtering the sub-level key on the method arguments (using <em>[&#8220;.PropertyBackedBeans&#8221;, &#8220;Search$managed$solr&#8221;]<\/em> on line 15 instead of <em>[&#8220;.PropertyBackedBeans&#8221;]<\/em>). The result would be exactly the same, but the above &#8220;if&#8221; statement make sure that you only remove what you expect to remove. It&#8217;s just another level of check, to prevent human error. Another alternative could be to use the <em>removeAttribute<\/em> method directly (so just the lines 1, 2 and 10 above), since the top-level and sub-level keys are known, it&#8217;s not really need to retrieve them first via the <em>getAttributes<\/em>&#8230; Therefore, proceed as prefered.<\/p>\n<p>If you want the output of the <em>JavaScript Console<\/em> to appear on the Tomcat logs, you can replace &#8220;print&#8221; with &#8220;logger.warn&#8221; or &#8220;logger.info&#8221;. Here is an example of log generated for these actions:<\/p>\n<ol>\n<li>List JMX Attributes (cd2b1a49208e85e40e4978d80d59afd8.js) &gt;&gt; 2 sets of properties shown<\/li>\n<li>Remove Lucene JMX Attributes (cca083e1fc36fd7eb6691b47193a3885.js)<\/li>\n<li>Remove Solr JMX Attributes (716300901e28026ffc632490eed87be1.js)<\/li>\n<li>List JMX Attributes (cd2b1a49208e85e40e4978d80d59afd8.js) &gt;&gt; no properties remaining<\/li>\n<\/ol>\n<pre class=\"brush: java; gutter: true; first-line: 1; highlight: [21,29]\">2022-02-14 20:17:32,555  DEBUG [repo.jscript.RhinoScriptProcessor] [exec-49] Resolving and compiling script path: cd2b1a49208e85e40e4978d80d59afd8.js\n2022-02-14 20:17:32,562  DEBUG [jscript.RhinoScriptProcessor.calls] [exec-49] cd2b1a49208e85e40e4978d80d59afd8.js Start\n2022-02-14 20:17:32,564  INFO  [repo.jscript.ScriptLogger] [exec-49]  &gt; id: 21\n2022-02-14 20:17:32,564  INFO  [repo.jscript.ScriptLogger] [exec-49]   &gt;&gt; key: [\".PropertyBackedBeans\", \"Search$managed$solr\"]\n2022-02-14 20:17:32,564  INFO  [repo.jscript.ScriptLogger] [exec-49]   &gt;&gt; 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}\n2022-02-14 20:17:32,564  INFO  [repo.jscript.ScriptLogger] [exec-49]\n2022-02-14 20:17:32,564  INFO  [repo.jscript.ScriptLogger] [exec-49]  &gt; id: 22 - key: .PropertyBackedBeans - Search$managed$lucene - value: {index.recovery.maximumPoolSize=5}\n2022-02-14 20:17:32,564  INFO  [repo.jscript.ScriptLogger] [exec-49]   &gt;&gt; key: [\".PropertyBackedBeans\", \"Search$managed$lucene\"]\n2022-02-14 20:17:32,564  INFO  [repo.jscript.ScriptLogger] [exec-49]   &gt;&gt; value: {index.recovery.maximumPoolSize=5}\n2022-02-14 20:17:32,564  INFO  [repo.jscript.ScriptLogger] [exec-49]\n2022-02-14 20:17:32,564  DEBUG [jscript.RhinoScriptProcessor.calls] [exec-49] cd2b1a49208e85e40e4978d80d59afd8.js End 2 ms\n2022-02-14 20:17:52,197  DEBUG [repo.jscript.RhinoScriptProcessor] [exec-41] Resolving and compiling script path: cca083e1fc36fd7eb6691b47193a3885.js\n2022-02-14 20:17:52,204  DEBUG [jscript.RhinoScriptProcessor.calls] [exec-41] cca083e1fc36fd7eb6691b47193a3885.js Start\n2022-02-14 20:17:52,206  INFO  [repo.jscript.ScriptLogger] [exec-41]  &gt; id: 21\n2022-02-14 20:17:52,206  INFO  [repo.jscript.ScriptLogger] [exec-41]   &gt;&gt; key: [\".PropertyBackedBeans\", \"Search$managed$solr\"]\n2022-02-14 20:17:52,206  INFO  [repo.jscript.ScriptLogger] [exec-41]   &gt;&gt; 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}\n2022-02-14 20:17:52,207  INFO  [repo.jscript.ScriptLogger] [exec-41]\n2022-02-14 20:17:52,207  INFO  [repo.jscript.ScriptLogger] [exec-41]  &gt; id: 22 - key: .PropertyBackedBeans - Search$managed$lucene - value: {index.recovery.maximumPoolSize=5}\n2022-02-14 20:17:52,207  INFO  [repo.jscript.ScriptLogger] [exec-41]   &gt;&gt; key: [\".PropertyBackedBeans\", \"Search$managed$lucene\"]\n2022-02-14 20:17:52,207  INFO  [repo.jscript.ScriptLogger] [exec-41]   &gt;&gt; value: {index.recovery.maximumPoolSize=5}\n2022-02-14 20:17:52,210  INFO  [repo.jscript.ScriptLogger] [exec-41]    &gt;&gt;&gt; The attribute for [\".PropertyBackedBeans\", \"Search$managed$lucene\"] has been removed\n2022-02-14 20:17:52,210  INFO  [repo.jscript.ScriptLogger] [exec-41]\n2022-02-14 20:17:52,211  DEBUG [jscript.RhinoScriptProcessor.calls] [exec-41] cca083e1fc36fd7eb6691b47193a3885.js End 6 ms\n2022-02-14 20:18:41,840  DEBUG [repo.jscript.RhinoScriptProcessor] [exec-12] Resolving and compiling script path: 716300901e28026ffc632490eed87be1.js\n2022-02-14 20:18:41,847  DEBUG [jscript.RhinoScriptProcessor.calls] [exec-12] 716300901e28026ffc632490eed87be1.js Start\n2022-02-14 20:18:41,849  INFO  [repo.jscript.ScriptLogger] [exec-12]  &gt; id: 21\n2022-02-14 20:18:41,849  INFO  [repo.jscript.ScriptLogger] [exec-12]   &gt;&gt; key: [\".PropertyBackedBeans\", \"Search$managed$solr\"]\n2022-02-14 20:18:41,849  INFO  [repo.jscript.ScriptLogger] [exec-12]   &gt;&gt; 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}\n2022-02-14 20:18:41,850  INFO  [repo.jscript.ScriptLogger] [exec-12]    &gt;&gt;&gt; The attribute for [\".PropertyBackedBeans\", \"Search$managed$solr\"] has been removed\n2022-02-14 20:18:41,850  INFO  [repo.jscript.ScriptLogger] [exec-12]\n2022-02-14 20:18:41,850  DEBUG [jscript.RhinoScriptProcessor.calls] [exec-12] 716300901e28026ffc632490eed87be1.js End 3 ms\n2022-02-14 20:18:57,199  DEBUG [repo.jscript.RhinoScriptProcessor] [exec-37] Resolving and compiling script path: cd2b1a49208e85e40e4978d80d59afd8.js\n2022-02-14 20:18:57,205  DEBUG [jscript.RhinoScriptProcessor.calls] [exec-37] cd2b1a49208e85e40e4978d80d59afd8.js Start\n2022-02-14 20:18:57,207  DEBUG [jscript.RhinoScriptProcessor.calls] [exec-37] cd2b1a49208e85e40e4978d80d59afd8.js End 1 ms<\/pre>\n<p>&nbsp;<\/p>\n<p>As shown above, the execution was done successfully, no errors and all the JMX Settings were finally gone:<\/p>\n<p><a href=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/02\/Alf_JMX_Settings_post.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-54463\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/02\/Alf_JMX_Settings_post.png\" alt=\"\" width=\"1953\" height=\"660\" \/><\/a><\/p>\n<p>A small restart of Alfresco, to make sure nothing has been broken and to clean the cache and you are good to go.<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>At a customer, I recently faced a problem with the JMX settings that couldn&#8217;t be reverted. If you already worked with Alfresco, you know that it&#8217;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&#8217;s [&hellip;]<\/p>\n","protected":false},"author":20,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[197,525],"tags":[475,3169,2486,280,214,1090,2487],"type_dbi":[],"class_list":["post-17123","post","type-post","status-publish","format-standard","hentry","category-application-integration-middleware","category-enterprise-content-management","tag-acs","tag-alfresco","tag-attributeservice","tag-database","tag-java","tag-javascript","tag-jmx"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.2 (Yoast SEO v27.5) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Alfresco - Removing JMX settings via the AttributeService since the Revert doesn&#039;t work - dbi Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.dbi-services.com\/blog\/alfresco-removing-jmx-settings-via-the-attributeservice-since-the-revert-doesnt-work\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Alfresco - Removing JMX settings via the AttributeService since the Revert doesn&#039;t work\" \/>\n<meta property=\"og:description\" content=\"At a customer, I recently faced a problem with the JMX settings that couldn&#8217;t be reverted. If you already worked with Alfresco, you know that it&#8217;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&#8217;s [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dbi-services.com\/blog\/alfresco-removing-jmx-settings-via-the-attributeservice-since-the-revert-doesnt-work\/\" \/>\n<meta property=\"og:site_name\" content=\"dbi Blog\" \/>\n<meta property=\"article:published_time\" content=\"2022-02-17T18:30:46+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-05-31T14:35:08+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/02\/Alf_JMX_Settings-1.png\" \/>\n<meta name=\"author\" content=\"Morgan Patou\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@MorganPatou\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Morgan Patou\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"19 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/alfresco-removing-jmx-settings-via-the-attributeservice-since-the-revert-doesnt-work\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/alfresco-removing-jmx-settings-via-the-attributeservice-since-the-revert-doesnt-work\\\/\"},\"author\":{\"name\":\"Morgan Patou\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#\\\/schema\\\/person\\\/c4d05b25843a9bc2ab20415dae6bd2d8\"},\"headline\":\"Alfresco &#8211; Removing JMX settings via the AttributeService since the Revert doesn&#8217;t work\",\"datePublished\":\"2022-02-17T18:30:46+00:00\",\"dateModified\":\"2022-05-31T14:35:08+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/alfresco-removing-jmx-settings-via-the-attributeservice-since-the-revert-doesnt-work\\\/\"},\"wordCount\":1336,\"commentCount\":0,\"image\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/alfresco-removing-jmx-settings-via-the-attributeservice-since-the-revert-doesnt-work\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/2\\\/2022\\\/02\\\/Alf_JMX_Settings-1.png\",\"keywords\":[\"ACS\",\"Alfresco\",\"AttributeService\",\"database\",\"Java\",\"JavaScript\",\"JMX\"],\"articleSection\":[\"Application integration &amp; Middleware\",\"Enterprise content management\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/alfresco-removing-jmx-settings-via-the-attributeservice-since-the-revert-doesnt-work\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/alfresco-removing-jmx-settings-via-the-attributeservice-since-the-revert-doesnt-work\\\/\",\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/alfresco-removing-jmx-settings-via-the-attributeservice-since-the-revert-doesnt-work\\\/\",\"name\":\"Alfresco - Removing JMX settings via the AttributeService since the Revert doesn't work - dbi Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/alfresco-removing-jmx-settings-via-the-attributeservice-since-the-revert-doesnt-work\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/alfresco-removing-jmx-settings-via-the-attributeservice-since-the-revert-doesnt-work\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/2\\\/2022\\\/02\\\/Alf_JMX_Settings-1.png\",\"datePublished\":\"2022-02-17T18:30:46+00:00\",\"dateModified\":\"2022-05-31T14:35:08+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#\\\/schema\\\/person\\\/c4d05b25843a9bc2ab20415dae6bd2d8\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/alfresco-removing-jmx-settings-via-the-attributeservice-since-the-revert-doesnt-work\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/alfresco-removing-jmx-settings-via-the-attributeservice-since-the-revert-doesnt-work\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/alfresco-removing-jmx-settings-via-the-attributeservice-since-the-revert-doesnt-work\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/2\\\/2022\\\/02\\\/Alf_JMX_Settings-1.png\",\"contentUrl\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/2\\\/2022\\\/02\\\/Alf_JMX_Settings-1.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/alfresco-removing-jmx-settings-via-the-attributeservice-since-the-revert-doesnt-work\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Alfresco &#8211; Removing JMX settings via the AttributeService since the Revert doesn&#8217;t work\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/\",\"name\":\"dbi Blog\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#\\\/schema\\\/person\\\/c4d05b25843a9bc2ab20415dae6bd2d8\",\"name\":\"Morgan Patou\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/5d7f5bec8b597db68a09107a6f5309e3870d6296ef94fb10ead4b09454ca67e5?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/5d7f5bec8b597db68a09107a6f5309e3870d6296ef94fb10ead4b09454ca67e5?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/5d7f5bec8b597db68a09107a6f5309e3870d6296ef94fb10ead4b09454ca67e5?s=96&d=mm&r=g\",\"caption\":\"Morgan Patou\"},\"description\":\"Morgan Patou has over 12 years of experience in Enterprise Content Management (ECM) systems, with a strong focus in recent years on platforms such as Alfresco, Documentum, and M-Files. He specializes in the architecture, setup, customization, and maintenance of ECM infrastructures in complex &amp; critical environments. Morgan is well-versed in both engineering and operations aspects, including high availability design, system integration, and lifecycle management. He also has a solid foundation in open-source and proprietary technologies - ranging from Apache, OpenLDAP or Kerberos to enterprise-grade systems like WebLogic. Morgan Patou holds an Engineering Degree in Computer Science from ENSISA (\u00c9cole Nationale Sup\u00e9rieure d'Ing\u00e9nieurs Sud Alsace) in Mulhouse, France. He is Alfresco Content Services Certified Administrator (ACSCA), Alfresco Content Services Certified Engineer (ACSCE) as well as OpenText Documentum Certified Administrator. His industry experience spans the Public Sector, IT Services, Financial Services\\\/Banking, and the Pharmaceutical industry.\",\"sameAs\":[\"https:\\\/\\\/blog.dbi-services.com\\\/author\\\/morgan-patou\\\/\",\"https:\\\/\\\/x.com\\\/MorganPatou\"],\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/author\\\/morgan-patou\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Alfresco - Removing JMX settings via the AttributeService since the Revert doesn't work - dbi Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.dbi-services.com\/blog\/alfresco-removing-jmx-settings-via-the-attributeservice-since-the-revert-doesnt-work\/","og_locale":"en_US","og_type":"article","og_title":"Alfresco - Removing JMX settings via the AttributeService since the Revert doesn't work","og_description":"At a customer, I recently faced a problem with the JMX settings that couldn&#8217;t be reverted. If you already worked with Alfresco, you know that it&#8217;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&#8217;s [&hellip;]","og_url":"https:\/\/www.dbi-services.com\/blog\/alfresco-removing-jmx-settings-via-the-attributeservice-since-the-revert-doesnt-work\/","og_site_name":"dbi Blog","article_published_time":"2022-02-17T18:30:46+00:00","article_modified_time":"2022-05-31T14:35:08+00:00","og_image":[{"url":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/02\/Alf_JMX_Settings-1.png","type":"","width":"","height":""}],"author":"Morgan Patou","twitter_card":"summary_large_image","twitter_creator":"@MorganPatou","twitter_misc":{"Written by":"Morgan Patou","Est. reading time":"19 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.dbi-services.com\/blog\/alfresco-removing-jmx-settings-via-the-attributeservice-since-the-revert-doesnt-work\/#article","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/alfresco-removing-jmx-settings-via-the-attributeservice-since-the-revert-doesnt-work\/"},"author":{"name":"Morgan Patou","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/c4d05b25843a9bc2ab20415dae6bd2d8"},"headline":"Alfresco &#8211; Removing JMX settings via the AttributeService since the Revert doesn&#8217;t work","datePublished":"2022-02-17T18:30:46+00:00","dateModified":"2022-05-31T14:35:08+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/alfresco-removing-jmx-settings-via-the-attributeservice-since-the-revert-doesnt-work\/"},"wordCount":1336,"commentCount":0,"image":{"@id":"https:\/\/www.dbi-services.com\/blog\/alfresco-removing-jmx-settings-via-the-attributeservice-since-the-revert-doesnt-work\/#primaryimage"},"thumbnailUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/02\/Alf_JMX_Settings-1.png","keywords":["ACS","Alfresco","AttributeService","database","Java","JavaScript","JMX"],"articleSection":["Application integration &amp; Middleware","Enterprise content management"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.dbi-services.com\/blog\/alfresco-removing-jmx-settings-via-the-attributeservice-since-the-revert-doesnt-work\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.dbi-services.com\/blog\/alfresco-removing-jmx-settings-via-the-attributeservice-since-the-revert-doesnt-work\/","url":"https:\/\/www.dbi-services.com\/blog\/alfresco-removing-jmx-settings-via-the-attributeservice-since-the-revert-doesnt-work\/","name":"Alfresco - Removing JMX settings via the AttributeService since the Revert doesn't work - dbi Blog","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/alfresco-removing-jmx-settings-via-the-attributeservice-since-the-revert-doesnt-work\/#primaryimage"},"image":{"@id":"https:\/\/www.dbi-services.com\/blog\/alfresco-removing-jmx-settings-via-the-attributeservice-since-the-revert-doesnt-work\/#primaryimage"},"thumbnailUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/02\/Alf_JMX_Settings-1.png","datePublished":"2022-02-17T18:30:46+00:00","dateModified":"2022-05-31T14:35:08+00:00","author":{"@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/c4d05b25843a9bc2ab20415dae6bd2d8"},"breadcrumb":{"@id":"https:\/\/www.dbi-services.com\/blog\/alfresco-removing-jmx-settings-via-the-attributeservice-since-the-revert-doesnt-work\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dbi-services.com\/blog\/alfresco-removing-jmx-settings-via-the-attributeservice-since-the-revert-doesnt-work\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.dbi-services.com\/blog\/alfresco-removing-jmx-settings-via-the-attributeservice-since-the-revert-doesnt-work\/#primaryimage","url":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/02\/Alf_JMX_Settings-1.png","contentUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/02\/Alf_JMX_Settings-1.png"},{"@type":"BreadcrumbList","@id":"https:\/\/www.dbi-services.com\/blog\/alfresco-removing-jmx-settings-via-the-attributeservice-since-the-revert-doesnt-work\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.dbi-services.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Alfresco &#8211; Removing JMX settings via the AttributeService since the Revert doesn&#8217;t work"}]},{"@type":"WebSite","@id":"https:\/\/www.dbi-services.com\/blog\/#website","url":"https:\/\/www.dbi-services.com\/blog\/","name":"dbi Blog","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.dbi-services.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/c4d05b25843a9bc2ab20415dae6bd2d8","name":"Morgan Patou","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/5d7f5bec8b597db68a09107a6f5309e3870d6296ef94fb10ead4b09454ca67e5?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/5d7f5bec8b597db68a09107a6f5309e3870d6296ef94fb10ead4b09454ca67e5?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/5d7f5bec8b597db68a09107a6f5309e3870d6296ef94fb10ead4b09454ca67e5?s=96&d=mm&r=g","caption":"Morgan Patou"},"description":"Morgan Patou has over 12 years of experience in Enterprise Content Management (ECM) systems, with a strong focus in recent years on platforms such as Alfresco, Documentum, and M-Files. He specializes in the architecture, setup, customization, and maintenance of ECM infrastructures in complex &amp; critical environments. Morgan is well-versed in both engineering and operations aspects, including high availability design, system integration, and lifecycle management. He also has a solid foundation in open-source and proprietary technologies - ranging from Apache, OpenLDAP or Kerberos to enterprise-grade systems like WebLogic. Morgan Patou holds an Engineering Degree in Computer Science from ENSISA (\u00c9cole Nationale Sup\u00e9rieure d'Ing\u00e9nieurs Sud Alsace) in Mulhouse, France. He is Alfresco Content Services Certified Administrator (ACSCA), Alfresco Content Services Certified Engineer (ACSCE) as well as OpenText Documentum Certified Administrator. His industry experience spans the Public Sector, IT Services, Financial Services\/Banking, and the Pharmaceutical industry.","sameAs":["https:\/\/blog.dbi-services.com\/author\/morgan-patou\/","https:\/\/x.com\/MorganPatou"],"url":"https:\/\/www.dbi-services.com\/blog\/author\/morgan-patou\/"}]}},"_links":{"self":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/17123","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/users\/20"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/comments?post=17123"}],"version-history":[{"count":2,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/17123\/revisions"}],"predecessor-version":[{"id":43192,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/17123\/revisions\/43192"}],"wp:attachment":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media?parent=17123"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/categories?post=17123"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/tags?post=17123"},{"taxonomy":"type","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/type_dbi?post=17123"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}