Невозможно найти локально зарегистрированный MBean у локального клиента JMX.JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Невозможно найти локально зарегистрированный MBean у локального клиента JMX.

Сообщение Anonymous »

Я разрабатываю 2 приложения Java с использованием OpenJDK 22.0.1
Первое из них создает 2 MBean-компонента с использованием API JMX и регистрирует их на локальном сервере JMX с помощью MBeanServer code> объявлен следующим образом:

Код: Выделить всё

MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
Первый MBean регистрируется с использованием ObjectName, созданного через его конструктор, путем передачи следующей строки в качестве параметра: cl.maraneda.jmx:type=Hello.< /p>
Второй MBean — это MXBean, созданный так же, как и первый, но для создания ObjectName используется строка cl.maraneda.jmx:type=QueueSampler
MBeans правильно распознаются из jconsole, я могу правильно выполнять их операции, и если я вставлю следующую строку кода, она отобразит созданный мной домен (

Код: Выделить всё

cl.maraneda.jmx
) среди других доменов, распознаваемых в настоящее время сервером JMX:

Код: Выделить всё

Arrays.stream(mbs.getDomains()).forEach(System.out::println);
Второе приложение пытается подключиться к тому же серверу JMX, что и первое, с помощью MBeanServer, который объявлен так же, как и в первом приложении. .
Соединение установлено успешно, но я не могу найти через него свои 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»