
org.cyclopsgroup.jmxterm.cmd.UnsubscribeCommand Maven / Gradle / Ivy
Show all versions of jmxterm Show documentation
package org.cyclopsgroup.jmxterm.cmd;
import java.io.IOException;
import javax.management.JMException;
import javax.management.MBeanServerConnection;
import javax.management.MalformedObjectNameException;
import javax.management.NotificationListener;
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 to subscribe to an MBean notification
*
* Remove the subscription of an already subscribed notification listener. Notifications will no
* longer be sent to the session output.
*/
@Cli(
name = "unsubscribe",
description = "Unsubscribe the notifications of an earlier subscribed bean",
note = "Syntax is \n unsubscribe ")
public class UnsubscribeCommand extends Command {
private String bean;
private String domain;
@Override
public void execute() throws MalformedObjectNameException, IOException, JMException {
Session session = getSession();
String beanName = BeanCommand.getBeanName(bean, domain, session);
if (beanName == null) {
throw new IllegalArgumentException(
"Please specify MBean to invoke either using -b option or bean command");
}
ObjectName name = new ObjectName(beanName);
NotificationListener listener = SubscribeCommand.getListeners().remove(name);
if (listener != null) {
MBeanServerConnection con = session.getConnection().getServerConnection();
con.removeNotificationListener(name, listener);
session.output.printMessage("Unsubscribed from " + name);
}
}
/** @param bean Bean under which the operation is */
@Option(name = "b", longName = "bean", description = "MBean to invoke")
public final void setBean(String bean) {
this.bean = bean;
}
/** @param domain Domain under which is bean is */
@Option(name = "d", longName = "domain", description = "Domain of MBean to invoke")
public final void setDomain(String domain) {
this.domain = domain;
}
}