# HG changeset patch # User Elliott Baron # Date 1509398850 14400 # Node ID 4e505d9ed3c7e8f15f8ecdb02b994e85abc9fe07 # Parent a41e1f11e4f239bdbeb6a701ba102b2c991804d7 Start JCMD Backend only when enabled Reviewed-by: jerboaa Review-thread: http://icedtea.classpath.org/pipermail/thermostat/2017-October/025562.html diff -r a41e1f11e4f2 -r 4e505d9ed3c7 plugins/jcmd-stats-collector/agent/src/main/java/com/redhat/thermostat/agent/jcmd/backend/internal/JCMDBackend.java --- a/plugins/jcmd-stats-collector/agent/src/main/java/com/redhat/thermostat/agent/jcmd/backend/internal/JCMDBackend.java Fri Oct 27 14:34:16 2017 -0400 +++ b/plugins/jcmd-stats-collector/agent/src/main/java/com/redhat/thermostat/agent/jcmd/backend/internal/JCMDBackend.java Mon Oct 30 17:27:30 2017 -0400 @@ -36,30 +36,39 @@ package com.redhat.thermostat.agent.jcmd.backend.internal; +import java.util.Dictionary; +import java.util.Hashtable; +import java.util.logging.Logger; + +import org.apache.felix.scr.annotations.Activate; +import org.apache.felix.scr.annotations.Component; +import org.apache.felix.scr.annotations.ConfigurationPolicy; +import org.apache.felix.scr.annotations.Deactivate; +import org.apache.felix.scr.annotations.Modified; +import org.apache.felix.scr.annotations.Reference; +import org.apache.felix.scr.annotations.Service; +import org.osgi.framework.BundleContext; +import org.osgi.framework.ServiceRegistration; + import com.redhat.thermostat.agent.http.HttpRequestService; import com.redhat.thermostat.agent.utils.management.MXBeanConnectionPool; import com.redhat.thermostat.backend.Backend; import com.redhat.thermostat.backend.BaseBackend; import com.redhat.thermostat.commands.agent.receiver.RequestReceiver; - import com.redhat.thermostat.common.config.experimental.ConfigurationInfoSource; +import com.redhat.thermostat.common.utils.LoggingUtils; import com.redhat.thermostat.jvm.overview.agent.model.VmMapperService; import com.redhat.thermostat.lang.schema.JSONService; -import org.apache.felix.scr.annotations.Activate; -import org.apache.felix.scr.annotations.Component; -import org.apache.felix.scr.annotations.Deactivate; -import org.apache.felix.scr.annotations.Reference; -import org.apache.felix.scr.annotations.Service; -import org.osgi.framework.BundleContext; -import org.osgi.framework.ServiceRegistration; -import java.util.Dictionary; -import java.util.Hashtable; - -@Component +@Component( + policy = ConfigurationPolicy.REQUIRE, + configurationPid = "jcmd" +) @Service(value = Backend.class) public class JCMDBackend extends BaseBackend { + private static final Logger logger = LoggingUtils.getLogger(JCMDBackend.class); + private boolean enabled = false; private ServiceRegistration reg; @@ -99,6 +108,16 @@ } } + /* + * Default OSGI behaviour is to restart the component when configuration changes. + * The @modified method acts as a callback to prevent this from happening since + * we don't need to restart the component for our use-case. + */ + @Modified + protected void modified() { + logger.config("Doing nothing on configuration change for plugin jcmd"); + } + @Deactivate private void _deactivate_(BundleContext context) { if (reg != null) { diff -r a41e1f11e4f2 -r 4e505d9ed3c7 plugins/jcmd-stats-collector/agent/src/main/java/com/redhat/thermostat/agent/jcmd/backend/internal/JCMDBackendConfiguration.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/plugins/jcmd-stats-collector/agent/src/main/java/com/redhat/thermostat/agent/jcmd/backend/internal/JCMDBackendConfiguration.java Mon Oct 30 17:27:30 2017 -0400 @@ -0,0 +1,79 @@ +/* + * Copyright 2012-2017 Red Hat, Inc. + * + * This file is part of Thermostat. + * + * Thermostat is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published + * by the Free Software Foundation; either version 2, or (at your + * option) any later version. + * + * Thermostat 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 + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Thermostat; see the file COPYING. If not see + * . + * + * Linking this code with other modules is making a combined work + * based on this code. Thus, the terms and conditions of the GNU + * General Public License cover the whole combination. + * + * As a special exception, the copyright holders of this code give + * you permission to link this code with independent modules to + * produce an executable, regardless of the license terms of these + * independent modules, and to copy and distribute the resulting + * executable under terms of your choice, provided that you also + * meet, for each linked independent module, the terms and conditions + * of the license of that module. An independent module is a module + * which is not derived from or based on this code. If you modify + * this code, you may extend this exception to your version of the + * library, but you are not obligated to do so. If you do not wish + * to do so, delete this exception statement from your version. + */ + +package com.redhat.thermostat.agent.jcmd.backend.internal; + +import org.apache.felix.scr.annotations.Activate; +import org.apache.felix.scr.annotations.Component; +import org.apache.felix.scr.annotations.Reference; +import org.apache.felix.scr.annotations.Service; +import org.osgi.framework.BundleContext; + +import com.redhat.thermostat.backend.BackendConfiguration; +import com.redhat.thermostat.common.config.experimental.ConfigurationInfoSource; +import com.redhat.thermostat.common.plugin.BackendConfigurationUtil; + +@Component +@Service(value = BackendConfiguration.class) +public class JCMDBackendConfiguration implements BackendConfiguration { + + private static final String PLUGIN_ID = "jcmd"; + private String location; + + @Reference + private ConfigurationInfoSource configInfoSource; + + @Override + public boolean isEnabled() { + BackendConfigurationUtil configuration = new BackendConfigurationUtil(configInfoSource, PLUGIN_ID); + return configuration.isEnabled(); + } + + @Override + public String getPluginId() { + return PLUGIN_ID; + } + + @Override + public String getLocation() { + return location; + } + + @Activate + public void activate(BundleContext context) { + location = context.getBundle().getLocation(); + } +}