Статьи

EasyMX — альтернатива JMX

Мониторинг и получение информации о внутренностях приложения всегда имеет решающее значение. По этой причине платформа 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/