我正在尝试将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中,因为当我在中央捆绑包内的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>