Имея весеннее приложение (на самом деле приложение grails), которое запускает сервер apache-activemq как весенний боб и пару маршрутов apache-camel. Использование приложения hibernate для работы с базой данных. Проблема проста. Activemq + Camel запускает BEFORE
Грайль вводит специальные методы в объекты домена hibernate (фактически сохраняя/обновляя методы и т. Д.). Итак, если у activemq уже есть некоторые данные о запуске, - верблюд начинает обрабатывать сообщения без применения граалов DAO. Это не с grails.lang.MissingMethodException
. Необходимо отложить запуск activemq/camel до того, как Grails внедрит специальные методы в объекты домена.Как отложить запуск весенних бобах?
ответ
вы можете переместить MQ Managment в плагин? Это увеличило бы модульность, и если вы заявите в плагине-дескрипторе
def loadAfter = ['hibernate']
вы должны иметь желаемое поведение. Работы для JBPM plugin
Если все они определены как родниковая боб, вы можете использовать
<bean id="activeMqBean" depends-on="anotherBean" />
Это удостоверится anotherBean
инициализируется перед activeMqBean
Спасибо, Bonzo, но я знаю 'зависимо от' утверждения. К сожалению, это не сработает, поскольку инициализация Grails находится на другом слое, а затем Spring. Таким образом, просто нет компонента, от которого должна зависеть activemq. – Archer
Я не уверен в вашем случае, но ленивая загрузка также может помочь, например,
<bean id="lazybean" class="com.xxx.YourBean" lazy-init="true">
Lazily-initialized bean указывает контейнеру IoC на создание экземпляра bean-компонента при его первой запросе. Это может помочь вам отложить загрузку бобов, которые вы хотите.
Это тоже не сработает, так как мой DAO-компонент наверняка запрошен до того, как загрузится спящий режим. – Archer
Я знаю, что этот вопрос довольно старый, но теперь я сталкиваюсь с той же проблемой в 2015 году - и эта нить не предлагает мне решения.
Я придумал пользовательский процессор, имеющий CountDownLatch, который я рассчитываю после загрузки приложения. Таким образом, сообщения будут простаивать до тех пор, пока приложение не начнет работать полностью и не будет работать для меня.
/**
* bootstrap latch processor
*/
@Log4j
class BootstrapLatchProcessor implements Processor {
private final CountDownLatch latch = new CountDownLatch(1)
@Override
void process(Exchange exchange) throws Exception {
if(latch.count > 0){
log.info "waiting for bootstrapped @ ${exchange.fromEndpoint}"
latch.await()
}
exchange.out = exchange.in
}
/**
* mark the application as bootstrapped
*/
public void setBootstrapped(){
latch.countDown()
}
}
Затем использовать его в качестве фасоли в вашем приложении и вызвать метод setBootstrapped в вашем Bootstrap.groovy
Затем в RouteBuilder вы положили процессор между конечной точкой и назначения для всех маршрутов, которые вы ожидаете сообщения приходят перед тем как приложение запустится:
from("activemq:a.in ").processRef('bootstrapProcessor').to("bean:handlerService?method=handle")
- 1. Вставка значений весенних бобах
- 2. как читать определения весенних бобах
- 3. Как запустить задания после инициализации весенних бобах?
- 4. Как использовать метод с использованием весенних бобах
- 5. Как получить HttpServletRequest в моих весенних бобах?
- 6. Использование весенних бобах из других модулей?
- 7. Определение весенних бобах без конфигурации каждого класса.
- 8. Управление созданием весенних бобах и словарем
- 9. Аннотации TestExecutionListeners предотвращают подключение весенних бобах в
- 10. двойная инициализация весенних бобах в причале 7.1.4
- 11. Лучшая практика получения весенних бобах данного типа
- 12. Регистрация весенних бобах без сканирования компонентов
- 13. Как применять/проверять аннотацию весны весны на весенних бобах
- 14. Как я могу обеспечить порядок загрузки весенних бобах?
- 15. @ Держатель мест хранения не разрешает значения в определенных весенних бобах
- 16. Загрузка времени плетения для не-весенних бобах в весеннем приложении
- 17. Какая польза ref в конструкторе-arg в java весенних бобах?
- 18. Общие стратегии при определении весенних бобах для разных сред
- 19. Создание лениво инициализированных весенних бобах с использованием аннотационной конфигурации
- 20. Способы борьбы с потоками в весенних бобах и их преимуществах и недостатках
- 21. Как отложить запуск программы до того, как активность диска снизится
- 22. hazelcast не получает MapStore из весенних бобах (автоувещая зависимость равна нулю)
- 23. Есть ли все-таки, чтобы получить «Эффективную конфигурацию весны» из всех аннотаций весенних бобах?
- 24. Что является самым простым/правильным способом подключения весенних бобах за пределами webapp?
- 25. Отложить/отложить обещание решить
- 26. MessageBox.Показать и отложить/отложить обновление
- 27. Администрирование весенних партий и запуск заданий ведущего/ведомого
- 28. Темы в сессионных бобах
- 29. Конфигурация пружинных бобах
- 30. Использование весенних партий или запуск рабочих мест в задании
Ну, честно говоря, я бы НЕ создал/не поддерживал отдельный плагин только для запуска AMQ после загрузки спящего режима. Я уверен, что есть лучший способ. – Archer
колодец в грабли плагины являются компонентами. Я разработал несколько плагинов для приложений только потому, что я думал, что они были бы лучше модульными. Плагины также являются полезным способом интеграции устаревших данных или системы. Вы поддерживаете их при сохранении приложения. Вам не нужно выпускать их в дикую природу. – Sammyrulez
У меня это получилось;) Но в любом случае - я бы не переместил один файл инициализации activemq.xml из основного приложения в другой «компонент» с полной структурой проекта плагина Grails, разместил его в svn и сохранил еще одну группу источников только для задержка AMQ инициализации. Простой способ. AMQ bean поддерживает свойство 'start', которое указывает, должно ли оно быть автозапущенным или нет. Будет использовать его как сейчас. – Archer