Наличие весеннего приложения (на самом деле приложение grails), которое запускает сервер apache-activemq в качестве весеннего компонента и пару маршрутов apache-camel. Приложение использует Hibernate для работы с базой данных. Проблема проста. Activemq + Camel запускается ДО
grails внедряет специальные методы в доменные объекты hibernate (собственно методы сохранения / обновления и т. Д.). Итак, если activemq уже имеет некоторые данные при запуске - верблюд начинает обрабатывать сообщения без добавления методов DAO. Это не работает с grails.lang.MissingMethodException
. Должен отложить запуск activemq / camel, прежде чем Grails внедрит специальные методы в доменные объекты.
вы можете перенести управление MQ в плагин? Это увеличило бы модульность, и если вы объявите плагин-дескриптор
def loadAfter = ['hibernate']
, вы должны иметь желаемое поведение. Работает для плагина JBPM
Если все это определено как spring bean, вы можете использовать
<bean id="activeMqBean" depends-on="anotherBean" />
Это убедится, что anotherBean
инициализируется перед activeMqBean
Я не уверен в вашем случае, но ленивая загрузка также может помочь, например,
<bean id="lazybean" class="com.xxx.YourBean" lazy-init="true">
Лениво инициализированный боб указывает IoC-контейнеру создать экземпляр боба при первом запросе. Это может помочь вам отложить загрузку нужных вам бобов.