Можно ли включить ShutdownStrategy для CamelContext в центральный пакет OSGi?

Я пытаюсь выделить центральные компоненты моих пакетов OSGi в центральный пакет, который предоставляет их как услугу. Это прекрасно работает с обработчиками ошибок и процессорами, но не с ShutdownStrategy и Политика повторной доставки. Сообщение об ошибке, которое я получаю,

org.osgi.service.blueprint.container.ComponentDefinitionException: A class org.apache.camel.processor.RedeliveryPolicy was found in the interfaces list, but class proxying is not allowed by default. The ext:proxy-method='classes' attribute needs to be added to this service reference.

Я мог бы попытаться следовать инструкции и добавить ext:proxy-method, но сначала я хочу понять подсказку. Может быть, централизовать стратегии и политику — не лучшая идея?

[EDIT] Ошибка здесь заключалась в использовании class в сервисе вместо interface. Таким образом, interface="org.apache.camel.spi.ShutdownStrategy" здесь должен быть правильным интерфейсом (для ShutdownStrategy). Пакет с моим верблюжьим маршрутом ссылается на этот сервис так:

<reference
    id="shutdownStrategy"
    interface="org.apache.camel.spi.ShutdownStrategy"
    component-name="shutdownStrategy" />

Но теперь я получаю следующую ошибку:

java.lang.IllegalArgumentException: CamelContext must be specified

[EDIT] Я хочу ограничить этот вопрос ShutdownStrategy, потому что RedeliveryPolicy отлично работает, когда я ссылаюсь на него в ErrorHandlers внутри моего центрального пакета. .

Так можно ли также отказаться от ShutdownStrategy? Возможно, нет, потому что требуется CamelContext.

При использовании Spring XML вы просто определяете компонент Spring, который реализует org.apache.camel.spi.ShutdownStrategy, и Camel будет искать его при запуске и использовать вместо значения по умолчанию.


person Yannick    schedule 18.02.2017    source источник


Ответы (1)


Я нашел ответ в документации Camel.

Вы можете реализовать свою собственную стратегию управления завершением работы, внедрив org.apache.camel.spi.ShutdownStrategy и установив его в CamelContext с помощью метода setShutdownStrategy.

При использовании Spring XML вы просто определяете компонент Spring, который реализует org.apache.camel.spi.ShutdownStrategy, и Camel будет искать его при запуске и использовать вместо значения по умолчанию.

Поэтому, если у вас есть собственная реализация ShutdownStrategy, вы можете использовать ее как bean-компонент.

<bean id="shutdownStrategy"
    class="org.apache.camel.spi.ShutdownStrategy">
</bean>
person Yannick    schedule 11.10.2019