Первое из них создает 2 MBean-компонента с использованием API JMX и регистрирует их на локальном сервере JMX с помощью MBeanServer code> объявлен следующим образом:
Код: Выделить всё
MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();Второй MBean — это MXBean, созданный так же, как и первый, но для создания ObjectName используется строка cl.maraneda.jmx:type=QueueSampler
MBeans правильно распознаются из jconsole, я могу правильно выполнять их операции, и если я вставлю следующую строку кода, она отобразит созданный мной домен (
Код: Выделить всё
cl.maraneda.jmxКод: Выделить всё
Arrays.stream(mbs.getDomains()).forEach(System.out::println);Соединение установлено успешно, но я не могу найти через него свои MBean-компоненты, и если я выполню ту же строку, что и выше, для отображения всех доменов во втором приложении, моего домена не будет.
Это основной класс первого приложения:
Код: Выделить всё
package cl.maraneda.jmx;
import java.lang.management.ManagementFactory;
import java.util.Arrays;
import java.util.Queue;
import java.util.concurrent.ArrayBlockingQueue;
import javax.management.InstanceAlreadyExistsException;
import javax.management.MBeanRegistrationException;
import javax.management.MBeanServer;
import javax.management.MalformedObjectNameException;
import javax.management.NotCompliantMBeanException;
import javax.management.ObjectName;
public class JMXDemo {
public static void main(String[] args) {
MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
ObjectName name;
ObjectName mxname;
try {
Hello mbean = new Hello();
String strObName =
String.format("%s:type=%s",
Hello.class.getPackageName(),
Hello.class.getSimpleName());
String strObMXName =
String.format("%s:type=%s",
QueueSampler.class.getPackageName(),
QueueSampler.class.getSimpleName());
System.out.println(strObMXName); //It shows cl.maraneda.jmx:type=QueueSampler
name = new ObjectName(strObName);
mxname = new ObjectName(strObMXName);
mbs.registerMBean(mbean, name);
Queue queue = new ArrayBlockingQueue(10);
queue.add("Request-1");
queue.add("Request-2");
queue.add("Request-3");
QueueSampler mxbean = new QueueSampler(queue);
mbs.registerMBean(mxbean, mxname);
Arrays.stream(mbs.getDomains()).forEach(System.out::println);
System.out.println(mbs.toString());
System.out.println("Waiting forever...");
} catch (Exception e) {
/*Handle exception*/
}
while(true) { /* NOTHING */ }
}
}
Код: Выделить всё
public class JMXClient {
public static void main(String[] args) {
MBeanServerConnection mbs = ManagementFactory.getPlatformMBeanServer();
String strObName ="cl.maraneda.jmx:type=QueueSampler";
ObjectName name;
try {
Arrays.stream(mbs.getDomains()).forEach(System.out::println);
name = new ObjectName(strObName);
CompositeData queueSample = (CompositeData) mbs.getAttribute(name, "QueueSample");
int size = (Integer) queueSample.get("size");
System.out.println("El tamano obtenido es " + size);
} catch (MalformedObjectNameException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InstanceNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (AttributeNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ReflectionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (MBeanException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Заранее спасибо.
Подробнее здесь: https://stackoverflow.com/questions/786 ... jmx-client
Мобильная версия