我正在尝试将OSGi捆绑软件的中央bean替换为中央捆绑软件,以将它们作为服务提供。这对于ErrorHanlders和Processors可以正常工作,但对于ShutdownStrategyRedeliveryPolicy则不能。我收到的错误消息是

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,但首先我想了解此处的线索。集中战略和政策可能不是一个好主意?

[编辑]这里的错误是在服务中使用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


[编辑]我想将这个问题限制在ShutdownStrategy中,因为当我在中央捆绑包内的ErrorHandlers中引用RedeliveryPolicy时,它可以正常工作。

那么也有可能将ShutdownStrategy排除在外吗?可能不是,因为it needs a CamelContext


  使用Spring XML时,您只需定义一个实现org.apache.camel.spi.ShutdownStrategy的spring bean,Camel就会在启动时对其进行查找并使用它而不是其默认值。

最佳答案

我在Camel documentation中找到了答案


  您可以通过实现org.apache.camel.spi.ShutdownStrategy并使用setShutdownStrategy方法在CamelContext上进行设置来实现自己的策略来控制关闭。
  
  使用Spring XML时,您只需定义一个实现org.apache.camel.spi.ShutdownStrategy的spring bean,Camel就会在启动时对其进行查找并使用它而不是其默认值。


因此,如果您有自己的ShutdownStrategy实现,则可以将其用作Bean。

<bean id="shutdownStrategy"
    class="org.apache.camel.spi.ShutdownStrategy">
</bean>

09-11 05:31