Лучшие практики для создания консоли для консольных приложений - PullRequest
2 голосов
/ 01 февраля 2012

Для улучшения консольного приложения я добавил несколько новых функций, например, для отслеживания состояния потоков (эти потоки отвечают за мониторинг данных из разных источников). Поэтому я подумал о том, чтобы создать какой-то механизм, который позволил бы мне запрашивать состояние моего приложения. Следующие методы - это методы, которые я решил реализовать:
1) Простое прослушивание потока для пользовательского ввода и проверка некоторых переменных или вызов некоторых функций в мониторинге потоков. Довольно прост в реализации, но имеет одну проблему, по крайней мере, я не вижу пути ее преодоления: приложение может работать в течение нескольких месяцев, и если я захочу получить доступ к машине, на которой оно работает, используя SSH, я не смогу использовать мой " консоль "
2) Создайте некоторый интерфейс RMI или интерфейс сокетов, который может быть подключен другой простой программой, посылая команды и получая ответы. Мне кажется, наиболее подходящий метод, более сложный для реализации, но может быть достаточно мощным.
3) Последнее и самое простое решение, которое не является консольным, но может удовлетворить мои потребности, - это запись данных в некоторый файл и после прочтения файла. Я не собираюсь реализовывать это, потому что это вообще не интерактивно.

Вопрос: есть ли лучший способ реализации консоли для некоторых Java-приложений, кроме представленных?

Большое спасибо,
Serhiy.

Ответы [ 3 ]

2 голосов
/ 01 февраля 2012

Я не понимаю, почему вы отказываетесь от варианта 1.

В наши дни очень просто разместить небольшой веб-сервер для публикации подобного рода статистики. Просто запустите встроенный экземпляр причала с небольшой приборной панелью.

Если вы не хотите заново изобретать колесо, бобы JMX дают много этих характеристик потоков бесплатно.

CodaHale - еще одно решение, которое интегрируется как с JMX, так и с такими инструментами, как Графит

0 голосов
/ 01 февраля 2012

Если под консолью вы имеете в виду консольное приложение (то есть читает stdin и пишет stdout), то вы можете попробовать экран командной строки linux, который может создать виртуальный терминал, который можно отсоединить от фактического терминала. Так, например, можно запустить вашу программу на экране, отсоединиться, выйти из системы, вернуться через день через ssh, присоединиться к предыдущему сеансу экрана, и ваша проблема все еще выполняется.

Тем не менее, я думаю, что начинать войну в tomcat / jetty с помощью страницы мониторинга - гораздо лучшая идея.

0 голосов
/ 01 февраля 2012

Лучшее решение - это что-то похожее на ваши идеи о RMI.Вы можете использовать другую технологию, если хотите, но идея разрешить приложению принимать новые подключения для мониторинга очень важна.

Решения для файловой базы (как вы обрисовали в общих чертах в # 3) становятся жертвами потери файла,нехватка места на диске и т. д.).Решения, которые вы упомянули в # 1, становятся жертвами неправильной обработки доступа из другого пространства пользователя.

С RMI (или аналогичным, например, CORBA, SOAP, веб-сервис и т. Д.) Вы получаете правильную сеть, которая позволяетлюди, чтобы общаться, когда на разных машинах (или просто в разных технологических пространствах).Это большая ценность (и немного кода), но это гораздо меньше головной боли, чем наполовину выполненная работа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...