显式允许OSGi声明性服务具有绑定方法而没有匹配的unbind方法用于引用,因为“一旦组件配置被停用,SCR必须放弃对与激活相关联的组件实例和组件上下文的所有引用。” / p>
我正在使用Apache Felix maven-scr-plugin从Java5注释生成我的服务组件XML。如果我省略了@Reference注释中的“unbind”属性,那么我就会失败:
[ERROR] @Reference: Missing method unbind for reference configuration at Java annotations in <classname>:<linenum>
为什么SCR发电机如此严格?有没有办法告诉它容忍省略的unbind方法?也许我需要向菲利克斯提出缺陷?
当然,将简单的解除绑定方法添加到我的服务中会很容易,但规范说它们是不需要的。
答案 0 :(得分:3)
您引用的文字(112.5.13纲要v4.2)与解除绑定没有直接关系,它指的是取消激活,这反过来又需要解除绑定。稍后在规范(112.5.15)中它声明“对于使用事件策略的每个引用,必须为该引用的每个绑定服务调用unbind方法。”
编辑忽略上述内容,请参阅以下评论。在当前版本的Felix SCR中,“generateAccessors”默认启用,您绝对不需要编写bind / unbind方法。 2011年7月的IIRC情况并非如此。
答案 1 :(得分:1)
如果您使用规范中的标准DS注释,bnd将生成XML,您甚至不需要单独的Maven插件。
顺便说一句,如果引用策略是动态的,你应该总是有一个unbind方法 - 即使基数是必需的,因为你可能必须处理动态重新绑定。在这种情况下,bnd将发出警告,而不是错误。
当引用策略是静态时,完全不需要unbind方法。在这种情况下,组件实例必须被销毁,因此您可以在deactivate方法中进行清理。
答案 2 :(得分:0)
Bnd也会从注释生成DS XML,但没有此限制。