Я разрабатываю серверное приложение, которое должно непрерывно обрабатывать много данных и предоставлять результаты по запросу с помощью веб-интерфейса.
Схема работы выглядит примерно так:
- Электронный массив датчиков постоянно перенаправляет данные на виртуальный диск через USB
- Приложение-очиститель обрабатывает данные так быстро, какон может и загружает его в дб (область подготовки)
- Используя триггеры, дб выполняет вычисления над данными и сохраняет результаты в другой схеме (область данных)
- Клиентское веб-приложение может отображать обработанные данные в виде графиков /отчеты и т. д. по запросу
В идеале решение будет выглядеть следующим образом:
- Сервер базы данных - PostgreSQL
- Имеет веб-интерфейс администрирования, который может отслеживатьочиститель (т. е. записи, обрабатываемые за час или что-то в этом роде), и, если он реализован как отдельный демон, управляйте им.
- Приложения Flusher и Client, написанные на Java, в идеале с использованием J2EE
сейчаспроблема, которая продолжает беспокоить меня, и я не могу найти ответ: как приступить к написанию компонента flusher, то есть процесса, который постоянно выполняется в баckground в J2EE.
Поискивая в Интернете, в основном появились три возможности:
a) Напишите очиститель как компонент, управляемый сообщениями, и управляйте им из главного приложения с помощью JMS.Однако: мне не нравится идея постоянного запуска MDB, я даже не уверен, что это возможно
b) Напишите очиститель как EJB и управляйте им, используя службу таймера / планирования.Тем не менее: события на самом деле не рассчитаны по времени, просто нужно запускать их в бесконечном цикле, пока не будет сказано, что это не нужно, просто кажется неправильным использование технологии.
c) Напишите очиститель как отдельное Java-приложение, запустите егов качестве службы ОС (Linux или Windows) и управления с помощью сценариев запуска через ProcessBuilder, вызываемый из EJB.Для мониторинга его состояния используйте JMS.Тем не менее: это просто кажется мне слишком сложным решением, зависящим от платформы и, возможно, даже ненадежным, и поскольку EJB не должен порождать / управлять своими собственными потоками, что в принципе делает ProcessBuilder, это просто кажется неправильным.
По сути, ни один изони мне кажутся правильными, и я не могу понять, какое бы нам было правильное решение в мире Java / J2EE.
Спасибо, Томас