Я пытаюсь выделить центральные компоненты моих пакетов 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 будет искать его при запуске и использовать вместо значения по умолчанию.