Apache Felix SCR @Reference cheatsheet

Ada*_*old 8 java declarative-services apache-felix

我在我的应用程序中使用Apache Felix声明性服务,我正在寻找一个描述可以给@Reference注释的参数的备忘单.我看过一个网页,其中包含一个非常丰富的备忘单(或表格),但我似乎无法找到它.我认为这对很多Felix用户来说都很有用.我正在谈论的参数:

  • 基数:MANDATORY_UNARY, MANDATORY_MULTIPLE, OPTIONAL_UNARY, OPTIONAL_MULTIPLE
  • 策略:EVENT, LOOKUP
  • 政策:DYNAMIC, STATIC
  • policyOption:GREEDY, RELUCTANT

基数相当简单,但其他人对我来说并不清楚.他们做了什么以及他们如何运作?

Pet*_*ner 9

来自官方OSGI R5 Compendium Spec第281页.

参考基数

参考的基数可以指定为以下四种选择之一:

  • 0..1 - 可选和一元.
  • 1..1 - 强制和一元(默认).
  • 0..n - 可选和多个.
  • 1..n - 强制性和多重性.

战略

  • 事件策略 - 当服务绑定,服务未绑定或更新其属性时,SCR会调用组件实例上的方法.这些方法是引用指定的bind,updated和unbind方法.如果需要向组件通知动态引用的绑定服务的更改,则事件策略非常有用.
  • 查找策略 - 组件实例可以使用ComponentContext的locateService方法之一来定位绑定服务.这些方法将引用的名称作为参数.如果引用具有动态策略,则重要的是不存储返回的服务对象,而是在每次需要时查找它.

政策

  • 静态策略是最简单的策略是默认策略.组件实例永远不会看到任何动态.在具有静态策略的引用的任何绑定服务变得不可用之前,组件配置被停用.如果目标服务可用于替换变为不可用的绑定服务,则必须重新激活组件配置并将其绑定到替换服务.

  • 动态策略是稍微复杂一点,因为该组件实现必须妥善处理组可以在任何线程发生约束服务的变化.使用动态策略,SCR可以更改绑定服务集,而无需停用组件配置.如果组件使用事件策略来访问服务,则组件实例将通过调用bind和unbind方法来通知绑定服务集的更改.

政策选择

  • 不情愿 - 最小化重新绑定和重新激活.
  • 贪婪 - 通过停用静态引用或重新绑定动态引用来最大限度地使用最佳服务.

其他felix特定资源

[Felic SCR Annotations](http://felix.apache.org/documentation/subprojects/apache-felix-maven-scr-plugin/scr-annotations.html)