BeansCommand.java
package org.cyclopsgroup.jmxterm.cmd;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Set;
import javax.management.MalformedObjectNameException;
import javax.management.ObjectName;
import org.cyclopsgroup.jcli.annotation.Cli;
import org.cyclopsgroup.jcli.annotation.Option;
import org.cyclopsgroup.jmxterm.Command;
import org.cyclopsgroup.jmxterm.Session;
/**
* Command that shows list of beans
*
* @author <a href="mailto:jiaqi.guo@gmail.com">Jiaqi Guo</a>
*/
@Cli(
name = "beans",
description = "List available beans under a domain or all domains",
note =
"Without -d option, current select domain is applied. If there's no domain specified, all beans are listed. Example:\n beans\n beans -d java.lang")
public class BeansCommand extends Command {
/**
* Get list of bean names under current domain
*
* @param session Current JMX session
* @param domainName Full domain name
* @return List of bean names
* @throws MalformedObjectNameException Input domain name is malformed
* @throws IOException Communication error
*/
public static List<String> getBeans(Session session, String domainName)
throws MalformedObjectNameException, IOException {
ObjectName queryName = null;
if (domainName != null) {
queryName = new ObjectName(domainName + ":*");
}
Set<ObjectName> names =
session.getConnection().getServerConnection().queryNames(queryName, null);
List<String> results = new ArrayList<String>(names.size());
for (ObjectName name : names) {
results.add(name.getCanonicalName());
}
Collections.sort(results);
return results;
}
private String domain;
@Override
public List<String> doSuggestOption(String optionName) throws IOException {
if (optionName.equals("d")) {
return DomainsCommand.getCandidateDomains(getSession());
}
return null;
}
@Override
public void execute() throws MalformedObjectNameException, IOException {
Session session = getSession();
String domainName = DomainCommand.getDomainName(domain, session);
List<String> domains = new ArrayList<String>();
if (domainName == null) {
domains.addAll(DomainsCommand.getCandidateDomains(session));
} else {
domains.add(domainName);
}
for (String d : domains) {
session.output.printMessage("domain = " + d + ":");
for (String bean : getBeans(session, d)) {
session.output.println(bean);
}
}
}
/**
* @param domain Domain under which beans are listed
*/
@Option(
name = "d",
longName = "domain",
displayName = "domain",
description = "Name of domain under which beans are listed")
public final void setDomain(String domain) {
this.domain = domain;
}
}