2

OSGi 声明式服务被明确允许有一个绑定方法,而没有匹配的 unbind 方法作为引用,因为“一旦组件配置被停用,SCR 必须丢弃对组件实例和与激活关联的组件上下文的所有引用。”

我正在使用 Apache Felix maven-scr-plugin 从 Java5 注释生成我的服务组件 XML。如果我从 @Reference 注释中省略了“unbind”属性,那么我会得到这个失败:

[ERROR] @Reference: Missing method unbind for reference configuration at Java annotations in <classname>:<linenum>

为什么可控硅发生器这么严格?有没有办法告诉它容忍省略的 unbind 方法?也许我需要向 Felix 提交缺陷?

当然,在我的服务中添加简单的取消绑定方法很容易,但规范说它们是不需要的。

4

3 回答 3

4

您引用的文本(112.5.13 compendium v​​4.2)与取消绑定没有直接关系,它指的是停用,这反过来又需要取消绑定。稍后在规范 (112.5.15) 中声明“对于使用事件策略的每个引用,必须为该引用的每个绑定服务调用 unbind 方法。”

编辑忽略以上,请参阅下面的评论。在当前版本的 Felix SCR 中,默认情况下启用“generateAccessors”,您绝对不需要编写绑定/取消绑定方法。2011 年 7 月的 IIRC 并非如此。

于 2011-07-28T17:41:04.653 回答
0

Bnd也从注解生成 DS XML,并且没有这个限制。

于 2013-01-11T13:31:38.543 回答
0

如果您使用规范中的标准 DS 注释,bnd 将生成 XML,您甚至不需要单独的 Maven 插件。

顺便说一句,如果引用策略是动态的,您应该总是有一个 unbind 方法——即使基数是强制性的,因为您可能必须处理动态重新绑定。在这种情况下, bnd 将引发警告,而不是错误。

当引用策略是静态的时,完全不需要取消绑定方法。在这种情况下,组件实例必须被销毁,因此您可以在 deactivate 方法中进行清理。

于 2016-08-30T05:09:26.213 回答