/* * RHQ Management Platform * Copyright (C) 2005-2013 Red Hat, Inc. * All rights reserved. * * This program 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 version 2 of the License. * * This program 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 this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ package org.rhq.modules.plugins.jbossas7; import java.io.File; import java.util.Set; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.rhq.core.domain.configuration.Configuration; import org.rhq.core.pluginapi.inventory.DiscoveredResourceDetails; import org.rhq.core.pluginapi.inventory.InvalidPluginConfigurationException; import org.rhq.core.pluginapi.inventory.ResourceDiscoveryContext; import org.rhq.core.system.OperatingSystemType; import org.rhq.core.system.ProcessInfo; import org.rhq.modules.plugins.jbossas7.helper.AdditionalJavaOpts; import org.rhq.modules.plugins.jbossas7.helper.HostPort; import org.rhq.modules.plugins.jbossas7.helper.ServerPluginConfiguration; /** * Discovery component for "JBossAS7 Standalone Server" Resources. * * @author Ian Springer */ public class StandaloneASDiscovery extends BaseProcessDiscovery { private static final Log log = LogFactory.getLog(StandaloneASDiscovery.class); private static final String SERVER_BASE_DIR_SYSPROP = "jboss.server.base.dir"; private static final String SERVER_CONFIG_DIR_SYSPROP = "jboss.server.config.dir"; private static final String SERVER_LOG_DIR_SYSPROP = "jboss.server.log.dir"; private static final String JAVA_OPTS_ADDITIONAL_PROP = "javaOptsAdditional"; @Override protected AS7Mode getMode() { return AS7Mode.STANDALONE; } @Override protected String getBaseDirSystemPropertyName() { return SERVER_BASE_DIR_SYSPROP; } @Override protected String getConfigDirSystemPropertyName() { return SERVER_CONFIG_DIR_SYSPROP; } @Override protected String getLogDirSystemPropertyName() { return SERVER_LOG_DIR_SYSPROP; } @Override protected String getDefaultBaseDirName() { return "standalone"; } @Override protected String getLogFileName() { return "server.log"; } @Override protected String buildDefaultResourceName(HostPort hostPort, HostPort managementHostPort, JBossProductType productType, String serverName) { if (serverName != null && !serverName.trim().isEmpty()) { return String.format("%s (%s %s:%d)", productType.SHORT_NAME, serverName, managementHostPort.host, managementHostPort.port); } return String.format("%s (%s:%d)", productType.SHORT_NAME, managementHostPort.host, managementHostPort.port); } @Override protected String buildDefaultResourceDescription(HostPort hostPort, JBossProductType productType) { return String.format("Standalone %s server", productType.FULL_NAME); } @Override protected ProcessInfo getPotentialStartScriptProcess(ProcessInfo process) { // If the server was started via standalone.sh/bat, its parent process will be standalone.sh/bat. return process.getParentProcess(); } @Override public Set<DiscoveredResourceDetails> discoverResources(ResourceDiscoveryContext discoveryContext) throws Exception { Set<DiscoveredResourceDetails> discoveredResources = super.discoverResources(discoveryContext); for (DiscoveredResourceDetails discoveredResource : discoveredResources) { discoverAdditionalJavaOpts(discoveredResource, discoveryContext); } return discoveredResources; } @Override public DiscoveredResourceDetails discoverResource(Configuration pluginConfig, ResourceDiscoveryContext context) throws InvalidPluginConfigurationException { DiscoveredResourceDetails discoveredResource = super.discoverResource(pluginConfig, context); discoverAdditionalJavaOpts(discoveredResource, context); return discoveredResource; } @SuppressWarnings("rawtypes") private void discoverAdditionalJavaOpts(DiscoveredResourceDetails discoveredResource, ResourceDiscoveryContext context) { if (discoveredResource.getPluginConfiguration().getSimpleValue(ServerPluginConfiguration.Property.HOME_DIR) == null) { log.error("Additional JAVA_OPTS cannot be discovered because " + ServerPluginConfiguration.Property.HOME_DIR + " property not set"); return; } File baseDirectory = new File(discoveredResource.getPluginConfiguration().getSimpleValue( ServerPluginConfiguration.Property.HOME_DIR)); File binDirectory = new File(baseDirectory, "bin"); String javaOptsAdditionalValue = null; File configFile = null; AdditionalJavaOpts additionalJavaOptsConfig = null; if (OperatingSystemType.WINDOWS.equals(context.getSystemInformation().getOperatingSystemType())) { configFile = new File(binDirectory, "standalone.conf.bat"); additionalJavaOptsConfig = new AdditionalJavaOpts.WindowsConfiguration(); }else { configFile = new File(binDirectory, "standalone.conf"); additionalJavaOptsConfig = new AdditionalJavaOpts.LinuxConfiguration(); } try { javaOptsAdditionalValue = additionalJavaOptsConfig.discover(configFile); } catch (Exception e) { log.error("Unable to discover additional JAVA_OPTS set via RHQ from configuration file.", e); } discoveredResource.getPluginConfiguration().setSimpleValue(JAVA_OPTS_ADDITIONAL_PROP, javaOptsAdditionalValue); } }