for (ProcessScanResult autoDiscoveryResult : autoDiscoveryResults) {
ProcessInfo processInfo = autoDiscoveryResult.getProcessInfo();
if (log.isDebugEnabled())
log.debug("Discovered JBoss AS process: " + processInfo);
JBossInstanceInfo cmdLine;
try {
cmdLine = new JBossInstanceInfo(processInfo);
} catch (Exception e) {
log.error("Failed to process JBoss AS command line: " + Arrays.asList(processInfo.getCommandLine()), e);
continue;
}
// See if we have an AS 5 or AS 6 - if so, skip it.
JBossInstallationInfo installInfo = cmdLine.getInstallInfo();
String version = installInfo.getVersion();
if (version.startsWith("5") || version.startsWith("6")) {
if (log.isDebugEnabled())
log.debug("Found JBoss AS 5.0 or later, which is not supported by this plugin - skipping...");
continue;
}
File installHome = new File(cmdLine.getSystemProperties().getProperty(JBossProperties.HOME_DIR));
File configDir = new File(cmdLine.getSystemProperties().getProperty(JBossProperties.SERVER_HOME_DIR));
if ((jbossPcIsEmbeddedIn != null)
&& jbossPcIsEmbeddedIn.getPluginConfiguration()
.getSimple(JBossASServerComponent.CONFIGURATION_PATH_CONFIG_PROP).getStringValue()
.equals(configDir.getAbsolutePath())) {
// We're running embedded, and the JBossAS server we're embedded in has already been found.
continue;
}
// The config dir might be a symlink - call getCanonicalFile() to resolve it if so, before
// calling isDirectory() (isDirectory() returns false for a symlink, even if it points at
// a directory).
try {
if (!configDir.getCanonicalFile().isDirectory()) {
log.warn("Skipping discovery for JBoss AS process " + processInfo + ", because configuration dir '"
+ configDir + "' does not exist or is not a directory.");
continue;
}
} catch (IOException e) {
log.error("Skipping discovery for JBoss AS process " + processInfo + ", because configuration dir '"
+ configDir + "' could not be canonicalized.", e);
continue;
}
Configuration pluginConfiguration = context.getDefaultPluginConfiguration();
String jnpURL = getJnpURL(cmdLine, installHome, configDir);
// Set the connection type (used by JMX plugin to connect to the MBean server).
pluginConfiguration.put(new PropertySimple(JMXDiscoveryComponent.CONNECTION_TYPE,
JBossConnectionTypeDescriptor.class.getName()));
// Set the required props...
pluginConfiguration.put(new PropertySimple(JBossASServerComponent.NAMING_URL_CONFIG_PROP, jnpURL));
pluginConfiguration.put(new PropertySimple(JBossASServerComponent.JBOSS_HOME_DIR_CONFIG_PROP, installHome
.getAbsolutePath()));
pluginConfiguration
.put(new PropertySimple(JBossASServerComponent.CONFIGURATION_PATH_CONFIG_PROP, configDir));
// Set the optional props...
pluginConfiguration.put(new PropertySimple(JBossASServerComponent.CONFIGURATION_SET_CONFIG_PROP, cmdLine
.getSystemProperties().getProperty(JBossProperties.SERVER_NAME)));
pluginConfiguration.put(new PropertySimple(JBossASServerComponent.BINDING_ADDRESS_CONFIG_PROP, cmdLine
.getSystemProperties().getProperty(JBossProperties.BIND_ADDRESS)));
JBossASDiscoveryUtils.UserInfo userInfo = JBossASDiscoveryUtils.getJmxInvokerUserInfo(configDir);
if (userInfo != null) {
pluginConfiguration.put(new PropertySimple(JBossASServerComponent.PRINCIPAL_CONFIG_PROP, userInfo