我正在尝试将我的OSGi捆绑包的中央bean外包到一个中央捆绑包中,它将它们作为服务提供。这适用于ErrorHanlders和Processors,但不适用于ShutdownStrategy和RedeliveryPolicy。我收到的错误消息是
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将在启动时查找并使用它而不是默认值。
答案 0 :(得分:1)
您可以通过实施
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>