У меня есть веб-приложение Spring с applicationContext.xml
, загруженным через ContextLoaderListener
в XmlWebApplicationContext
. Контекст приложения имеет планировщик Quartz (определенный с SchedulerFactoryBean
, как здесь ), но не имеет ни триггера, ни задания.
Во время загрузки этого основного контекста приложения я загружаю некоторые «подключаемые» JAR-файлы, содержащие их собственный файл pluginApplicationContext.xml
.
Каждый pluginApplicationContext.xml
загружается в GenericXmlApplicationContext
как дочерний элемент основного XmlWebApplicationContext
.
Эти плагины могут содержать задания Quartz (QuartzJobBean
), которые запланированы в планировщике, описанном выше. Планирование должно выполняться программно через API-интерфейс Quartz, но для меня это нормально. Когда задание запускается, оно хорошо определяется Quartz и, поскольку оно расширяет QuartzJobBean
, я могу получить ток с ApplicationContext
до setApplicationContext
.
Проблема в том, что я получаю XmlWebApplicationContext
вместо GenericXmlApplicationContext
, из которого запланировано задание. Таким образом, я не могу вызвать getBean
для получения bean-компонентов, определенных в плагине.
Я хорошо понимаю, почему все это происходит. Но я не могу найти чистое и многоразовое решение, чтобы справиться с этим. Я уже взглянул на OSGi, но мы внедряем эту систему плагинов в существующее приложение, не создавая новое с нуля, и перенести все приложение на OSGi было бы слишком большой работой. Знаете ли вы, как OSGi и другие плагины работают с подобной ситуацией?
Большое спасибо за вашу помощь