Комбинация Spring, Quartz Scheduling и Hazelcast

Я пытаюсь понять, как разработать достаточно масштабируемый фреймворк пакетной обработки для веб-приложения, которое я пишу.

Я использую Spring MVC для webapp, с пользовательским слоем DAO (для доступа к базе данных необходимо создать экземпляр UnitOfWork из UnitOfWorkFactory, который устанавливается как @Autowired и инжектируется во время выполнения Spring).

Я использую аннотации Spring Scheduler (@Scheduled) для планирования заданий, однако я хочу, чтобы эти задания выполнялись на разных машинах в моем кластере. Каждое пакетное задание должно быть получено одной из машин кластера и затем выполнено.

Hazelcast кажется естественным решением для этого, поскольку Distributed Execution дизайн кажется действительно простым и элегантным для этой цели.

Я столкнулся с проблемой, которая, похоже, не рассматривается в документации. Я прочитал документацию о Spring Integration, однако она, похоже, посвящена тому, как настроить Hazelcast с помощью Spring (что я уже сделал).

Когда планировщик указывает на запуск задачи, я хочу создать новый экземпляр задачи (экземпляр Callable) и отправить его в DistributedExecutor. Когда машина кластера получает задание для выполнения, мне нужно, чтобы контейнер Spring на машине кластера внедрил экземпляр UnitOfWorkFactory в пакетное задание до того, как задание попытается его выполнить. Каждый из кластеров запускается с Spring и будет иметь UnitOfWorkFactory уже инстанцированный с правильными деталями, проблема в том, чтобы получить UnitOfWorkFactory экземпляр, инжектированный в мою задачу.

Кто-нибудь знает, как я могу настроить свое приложение так, чтобы в Hazelcast можно было автоматически инжектировать UnitOfWorkFactory при запуске Callable? Я пробовал помечать Callable как Serializable и ApplicationContextAware, но все равно получаю NullPointerException при попытке запустить задачу.

Я могу получить доступ к ApplicationContext напрямую, но я бы предпочел этого не делать, так как это ограничит тестируемость моих задач и внесет жесткую зависимость от Spring для моих пакетных заданий.

8
задан skaffman 28 December 2011 в 10:20
поделиться