Мониторинг и получение информации о внутренностях приложения всегда имеет решающее значение. По этой причине платформа Java уже давно внедрила инфраструктуру JMX.
Это позволяет вам получить доступ к подробной информации о приложении стандартным способом. Здесь я покажу вам другой способ получения и отображения информации о приложении. Я предпочитаю этот способ, так как он проще в использовании, чем JMX. Я открыл проект под названием «EasyMX» в SourceForge, вы можете получить доступ к кодам на
http://easymx.sourceforge.net.
EasyMX использует плагины Rest и Eclipse. Службы управления разрабатываются с использованием Rest и доступны для подключаемого модуля Eclipse. Я объясню это шаг за шагом ниже. Сначала вы должны написать сервис для получения информации о приложении, скажем, это сервис времени, отображающий текущее время сервера. Вы должны сначала настроить Отдых.
в web.xml добавьте сервлет для настройки Rest;
<servlet> <servlet-name>Jersey REST Service</servlet-name> <servlet-class> com.sun.jersey.spi.container.servlet.ServletContainer </servlet-class> <init-param> <param-name>com.sun.jersey.config.property.packages</param-name> <param-value>net.sourceforge.easymx.web.rest</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>Jersey REST Service</servlet-name> <url-pattern>/rest/*</url-pattern> </servlet-mapping>
Он принимает все реализации Rest в пакете «net.sourceforge.easymx.web.rest».
Второй добавляет класс, например, SysInfo, в этот пакет и пишет сервис для получения текущего времени сервера;
@Path("/sysInfo") public class SysInfo { @GET @Path("getTime") public String getTime() { return new Date().toString(); } }
Убедитесь, что вы можете видеть информацию о времени, перейдя по адресу http: // localhost: 8080 / easymx / rest / sysInfo / getTime. Вы должны увидеть что-то вроде этого: пт 25 ноября 17:13:47 EET 2011
Теперь служба времени завершена, и вы можете увидеть ее с помощью плагина Eclipse.
EasyMx имеет плагин Eclipse, который вы можете установить так же, как и другие плагины, скопировав его в папку плагинов пути установки Eclipse. После копирования и перезапуска
Eclipse выберите EasyMX / Servers List из пункта меню «Show View». Вы должны увидеть похожий экран, как показано ниже;
Первое, что вам нужно сделать, это добавить сервер. Для этого щелкните правой кнопкой мыши узел «Серверы EasyMX» и нажмите «Добавить сервер». Вам необходимо ввести имя сервера и адрес
остальных служб. В этом примере вы должны войти;
Имя сервера: Тестовый
адрес сервера : http: // localhost: 8080 / easymx / rest
Нажмите «ОК», и определение сервера будет добавлено.
Теперь вам нужно определить сервисы в плагине для доступа к сервису, который вы разработали на сервере. Чтобы добавить службу, щелкните правой кнопкой мыши на сервере «Тестовый сервер» и выберите «Добавить службу». Вы должны увидеть похожий экран, как показано ниже;
Имя службы : sysInfo
URI контекста : / sysInfo / getTime
Тип результата : текст
Вы вводите имя для обслуживания и URI вы можете получить доступ. Uri должен начинаться с «/» и указывать на службу времени отдыха. Поскольку адрес вашего сервера http: // localhost: 8080 / easymx / rest «, а URI службы -» / sysInfo / getTime «, полный адрес вашей службы — это объединение этих двух адресов:» http: // localhost: 8080 / easymx / rest / sysInfo / getTime «. Вы устанавливаете» текст «как тип результата, поскольку вы просто возвращаете простую строку из службы времени. Это также может быть» табличным «, я покажу использование этого типа результата позже.
Чтобы вызвать службу, дважды щелкните имя службы, и отобразится диалоговое окно. Первая часть диалога позволяет вводить параметры услуги. Для этого сервиса нет необходимости вводить какие-либо параметры, поэтому эта часть пуста. Вторая часть включает в себя кнопку для вызова службы и область для отображения статуса вызова службы. Просто нажмите на кнопку «Invoke service», вы должны увидеть время сервера;
Второй сервис перечисляет свойства приложения Java. Внедрение сервиса;
@GET @Produces(MediaType.TEXT_XML) @Path("getSysProps") public String getSysProps() { Properties props = System.getProperties(); List<Map<String,String>> propsNormalized = new ArrayList<Map<String,String>>(); for(Map.Entry<Object, Object> entry:props.entrySet()) { Map<String, String> val = new HashMap<String, String>(); String name = ""; if( entry.getKey() != null ) { name = entry.getKey().toString(); } String value = ""; if ( entry.getValue() != null) { value = entry.getValue().toString(); } val.put("name", name); val.put("value", value); propsNormalized.add(val); } Collections.sort(propsNormalized, new Comparator<Map<String, String>>() { public int compare(Map<String, String> o1, Map<String, String> o2) { return o1.get("name").compareTo(o2.get("name")); } }); return new EasyMxUtil().generateXml(propsNormalized, "name", "value"); }
Этот сервис перечисляет свойства и их значения в табличном формате. Данные получены в формате xml, соответствующем стандарту ниже;
<result> <row> <propertyName value="propertyValue"/> </row> </result
Класс EasyMxUtil используется для генерации формата xml. Вам не нужно использовать этот класс, достаточно создать XML-данные в правильном формате.
Теперь дело доходит до определения этого нового сервиса в плагине. Щелкните правой кнопкой мыши по серверу и нажмите «Добавить службу». Добавьте значения ниже;
Имя службы : sysInfo-getSysProps
URI контекста : / sysInfo / getSysProps
Тип результата : табличный
Поскольку данные представлены в формате xml, вы должны установить тип результата как «табличный». Когда вы нажимаете «Invoke service», появляется похожий экран, как показано ниже;
Вы можете увидеть свойства и значения результата вашей услуги, как указано в таблице. Вы также можете просмотреть исходные данные в формате XML. Если вы щелкнете по любой
ячейке таблицы, то увидите, что она скопирована в область ниже.
Еще одна особенность плагина — передача параметров в сервис. Чтобы привести пример для этого, разработан сервис для поиска свойства по имени.
Внедрение сервиса;
@GET @Produces(MediaType.TEXT_PLAIN) @Path("getSysPropByName") public String getSysPropByName(@QueryParam("name") String name) { if ( name == null ) { return ""; } Properties props = System.getProperties(); return props.getProperty(name); }
Определение сервиса в плагине;
Имя службы : sysInfo-getSysProps
URI контекста : / sysInfo / getSysPropByName
Тип результата : текст
Вы можете добавить параметры, щелкнув правой кнопкой мыши по области параметров (пары имя-значение) и выбрав «Вставить новое свойство». Введите «имя» в качестве поля имени и «user.home» в качестве значения.
Вы должны увидеть похожий экран;
Вся информация, касающаяся серверов и сервисов, хранится в файле «.easymx-servers.xml» в домашней папке пользователя.
Еще один скриншот с перечнем услуг;
Есть некоторые недостатки использования этого подхода. Во-первых, он не имеет механизма уведомления, как в JMX, и не рассматривал проблем безопасности. Но это может быть другой способ доступа к подробной информации о вашем приложении. Вы можете скачать файлы с https://sourceforge.net/projects/easymx/files/1.0.0/