Похоже, у вас есть 3 отдельные, но связанные проблемы:
- Планирование одного или нескольких будущих событий.
- Постоянство расписания и связанных с ним контекстных данных.
- Push-модель для [повторной] доставки события планирования с сервера на клиент.
Более или менее верно?
Для планирования и сохранения я рекомендую взглянуть на Кварц . Он предоставит вам чистый API для планирования (одноразовое или повторяющееся) с некоторой гибкостью, включая фиксированный период или cron. Он также сохранит данные расписания и контекст (именуемый Job ) в базе данных JDBC.
Что касается # 3, мне неясно, как вы хотите, чтобы это работало, но один из возможных способов, которым это может работать, заключается в том, что, когда клиент подключается к серверу, он непостоянно кэширует сервер при условии, что к нему применяются запланированные события клиент (или пользователь и т. д.). Когда клиент выключается, эти события отбрасываются, но возобновляются при следующем подключении. Как только события загружаются в клиент, клиент принимает на себя ответственность за их запуск с помощью своего собственного локального планировщика (Quartz или даже более упрощенный ScheduledThreadPoolExcutor ).
Drools - отличный движок правил, но он может быть излишним из-за того, что вы пытаетесь сделать.
// Николай