是否可以将CamelContext的ShutdownStrategy外置到中央OSGi包中?

时间:2017-02-18 12:36:28

标签: java apache-camel osgi blueprint-osgi

我正在尝试将我的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 ,因为 RedeliveryPolicy 在我在里面的ErrorHandlers中引用它时工作正常我的中心包。

那么也可以外出 ShutdownStrategy 吗?也许不是,因为it needs a CamelContext

  

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

1 个答案:

答案 0 :(得分:1)

我在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>