Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> JVM монитор 
V
    Опции темы
access
Дата 1.10.2010, 14:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 34
Регистрация: 16.6.2006

Репутация: нет
Всего: нет



Доброго дня!

Придумал себе проблему - необходимо мониторить одно MDI свинг-приложение. В общем, пытаюсь намалевать некий обработчик событий, а скорее даже - напоминалку. Мне нужно:
(в предположении, что есть некая либа, которая отслеживает состояние виртуальной машины)
1) По запросу из приложения делается snapshot памяти jvm - получаю список всех событий, значений всех переменных, компонент на форме и их проперти, etc... (наподобии информации из окна Frame в IDEA во время дебаг-режима)
2) Далее, на основе snapshot-а уже сам пользователь (сам пользователь - это я) анализирует, например, что в данный момент запущен MyFrame1.class, у которого в момент нажатия кнопки bCalc переменная (вернее - некоторое проперти text) tfAccount.text = '417' (в окне Frame путь такой: tfAccount->ui->editor->model->s, глубоко запрятано). На основе этого анализа создаю и сохраняю такой шаблон (условно): 
Param1='Frame', Param2='JButton.ActionPerformed'; Param3='tfAccount.text'...
Имея такой шаблон, пусть называется "Расчет определенного Лицевого Счета", создаю для него события:
Param1='MyFrame1', Param2='bCalc'; Param3='417'...  Message = "Внимание! Сделайте перерасчет"
Param1='MyFrame1', Param2='bCalc'; Param3='510'...  Message = "Проведите доначисление 150.34"
сохраняю их пусть в базу.
3) Приложение работает, имея в памяти карту событий, где-то в фоне крутится тот самый монитор JVM, который раз, например, в 2-3 секунды делает snapshot-ы и сравнивает их по определенным параметрам из карты событий, если попадает на такое событие ( в данном модуле была нажата кнопка bCalc и при этом текстовое значение tfAccount было равно 510), то вылетает сообщение: "Проведите доначисление 150.34"

Для чего всё это нужно. Пользователь, который будет делать шаблоны, это я сам, шаблоны будут создаваться не так уж и часто, но будут. Сделано всё так хитро, потому что не хочу переписывать код приложения, вставляя обработку по типу
if (e.getSource()==bCalc && tfAccount.getText()==param1)
{
    // show event-message
}
Шаблоны, может заморочно, но создать смогу, пользователи уже сами будут создавать события, заполняя те или иные параметры. Т.е. основная мысль - не переписывая код приложения сделать возможность реагировать на те или иные события. Своего рода - напоминалка.
Наверное, это должно быть что-то вроде jps, jstat, jmap, но как-то там инфы мало (или я поверхностно - не углядел), да и хотелось бы всё-таки либу, отдельное приложение не годится. Есть ли такое в природе?
Ну, и главный вопрос: может быть всё это делается как-то иначе - направьте, чтоб я велосипед с двумя рулями не изобретал.
PM MAIL   Вверх
jk1
Дата 1.10.2010, 14:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1168
Регистрация: 17.10.2008
Где: Санкт-Петербург

Репутация: 40
Всего: 75



Как-то очень сложно выглядит решение.

Почему бы просто не сделать конфигурационный файл с описанием условий проверок и текстом сообщений, а внутри приложения сделать движок-валидатор, работающий на основе конфигурационного файла?
Если используется СУБД, то еще проще: кладем все это в таблицы и даже файла не надо.


--------------------
Opinions are like assholes — everybody has one
PM MAIL   Вверх
access
Дата 1.10.2010, 15:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 34
Регистрация: 16.6.2006

Репутация: нет
Всего: нет



я вижу, что сложно, но по-простому на ум не приходит.
Теперь по Вашему предложению: если будет придумано какое-то новое событие (в моей концепции - новый шаблон) - нужно будет переписывать под это события движок-валидатор, правильно понял?
PM MAIL   Вверх
jk1
Дата 1.10.2010, 15:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1168
Регистрация: 17.10.2008
Где: Санкт-Петербург

Репутация: 40
Всего: 75



Цитата

нужно будет переписывать под это события движок-валидатор, правильно понял?

Зависит от гибкости вашего валидатора. Например можно организовать регистрацию компонентов которые Вы можете захотеть мониторить в валидаторе, чтобы он мог (reflection) согласно конфигурации проверить их внутренности на валидность. Тогда ничего переписывать не надо будет.

Кстати можно сделать цепочку валидаторов, подтягиваемых при помощи Service Providers. Как это будет выглядеть для вас? Появилось новое правило валидации - Вы пишете новую реализацию интерфейса и подкладываете в JAR без перекомпиляции и переписывания остального кода.

Еще одно возможное решение - JMX. В его рамках Ваши объекты делают свои поля доступными для удаленного мониторинга. 

Мониторить любую переменную в пределах JVM может разве что полноценный профайлер, а это, помимо прочих неудобств и высокой сложности реализации может еще и нехилое снижение производительности дать. Да и не верится мне, что Ваши инварианты затрагивают вообще все переменные в приложении.




--------------------
Opinions are like assholes — everybody has one
PM MAIL   Вверх
access
Дата 7.10.2010, 10:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 34
Регистрация: 16.6.2006

Репутация: нет
Всего: нет



спасибо за ответ! Вы правы, конечно, события не будут затрагивать ВСЕ переменные приложения, просто я решил подстраховаться на все случаи, в общем - очередное универсальное решение. В общем-то, задача была интересна мне самому, пользователю то всё равно, как всё это будет сделано и с каким уровнем универсальности. Вероятно, моя хотелка пока реализована быть не может, в том виде, в котором я это себе представляю.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0715 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.