Зачем использовать JMX через простые HTTP-сервлеты?
С моей точки зрения, JMX лучше по 3 причинам:
- Это требует меньше коды для включения точек мониторинга.
- Он связан с Java-сериализованными объектами от конца до конца, поэтому существует более четкая согласованность данных.
- Он работает с программами, которые не основаны на сервлете (как вы упомянули).
JMX предлагает гораздо более простой интерфейс для конкретных элементов данных. Вы можете, конечно, написать одну и ту же функциональность в нескольких сервлетах, но мне легче разоблачить тех, кто использует JMX.
Например, если вы используете Spring, вы можете использовать аннотации org.springframework.jmx.export
(@ManagedResource
, и т. Д.), Чтобы разметить классы. Я также опубликовал свой SimpleJmx framework, чтобы вы могли легко выставлять атрибуты и операции с помощью нескольких аннотаций, независимых от Spring. Например:
@JmxResource(domainName = "j256", objectName = "lookupCache")
public class LookupCache {
// this can also be done as @JmxAttributeMethod on the getter/setters
@JmxAttributeField(description = "Number of hits in the cache")
private int hitCount;
...
@JmxOperation(description = "Flush the cache")
public void flushCache() {
...
}
}
У меня есть fully working example program, чтобы увидеть, как это работает. Поэтому все, что вам нужно сделать, чтобы показать значение или операцию, - добавить аннотацию к классу и каждому атрибуту и / или методу. Код для публикации с помощью SimpleJmx выглядит следующим образом. Spring похож, хотя и с фасолью:
// create a new server listening on port 8000
JmxServer jmxServer = new JmxServer(8000);
jmxServer.start();
// register our lookupCache object defined above
jmxServer.register(lookupCache);
Чтобы получить подобную функциональность сервлетов бы намного больше кода, чем просто аннотации. Тем не менее, могут существовать рамки, которые обеспечивают аналогичную функциональность в сервлете, о которой я не знаю.
еще несколько заметок:
- Есть, вероятно, более эффективные инструменты мониторинга, ГРКИ HTTP/HTML, но есть также тонна распределенных приложений мониторинга JMX. Наверное, подбросить.
- Возможность программно получать объектов с серверов JMX является плюсом, а не просто строками с страницы сервлета. SimpleJmx также поддерживает простой клиент JMX, хотя там есть лучшие.
- Очевидно много других стоящих данных уже опубликован JVM по умолчанию: настройки виртуальной машины, детали резьбы, память информация, и т.д ..