【问题标题】:iPOJO Component injection callbacks are not invoked unless validate back is added除非添加了验证返回,否则不会调用 iPOJO 组件注入回调
【发布时间】:2014-08-12 06:14:27
【问题描述】:

除非我添加验证回调方法,否则不会调用我的 iPOJO 组件的注入回调。

import javax.swing.DefaultBoundedRangeModel;
import org.apache.felix.ipojo.annotations.*;
import org.osgi.service.log.*;

@Component
@Instantiate
@Provides
public class MyBoundedRangeModel extends DefaultBoundedRangeModel {

  @Requires
  org.osgi.service.log.LogService logService;

  @Bind
  public void bindLogService(LogService logService) {
    System.out.println("Binded the log service");
  }

  @Unbind
  public void unbindLogService(LogService logService) {
    System.out.println("Unbinded the log service");
  }
//  @Validate
//  public void validate(){
//      System.out.println("Validated the pdf bounded range model");
//  }
}

但是当我键入命令“instances”时,OSGi 控制台会列出该组件是有效的。 有什么问题?

g! instances
Instance org.apache.felix.ipojo.arch.gogo.Arch-0 -> valid 
Instance temp.MyBoundedRangeModel-0 -> valid 


g! Instance temp.MyBoundedRangeModel-0
instance name="temp.MyBoundedRangeModel-0" state="valid" bundle="7" component.type="temp.MyBoundedRangeModel"
  handler name="org.apache.felix.ipojo:requires" state="valid"
    requires specification="org.osgi.service.log.LogService" id="org.osgi.service.log.LogService" optional="false" aggregate="false" proxy="true" binding-policy="dynamic" state="resolved"
      selected service.id="22"
      matches service.id="22"
    requires specification="org.osgi.service.log.LogService" id="LogService" optional="false" aggregate="false" proxy="true" binding-policy="dynamic" state="resolved"
      selected service.id="22"
      matches service.id="22"
  handler name="org.apache.felix.ipojo:provides" state="valid"
    provides specifications="[javax.swing.BoundedRangeModel,java.io.Serializable]" state="registered" service.id="51"
      property name="instance.name" value="temp.MyBoundedRangeModel-0"
      property name="factory.name" value="temp.MyBoundedRangeModel"
  handler name="org.apache.felix.ipojo:architecture" state="valid"

【问题讨论】:

    标签: java osgi ipojo


    【解决方案1】:

    @Bind 回调将在创建对象时调用(需要时,因此在您的情况下是首次使用已发布的服务时)。

    不要添加@Validate 回调,并且仅当您需要尽早创建对象时,只需使用:

    @Component(immediate=true) 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-24
      • 2011-09-06
      • 1970-01-01
      • 2014-11-08
      • 2016-06-12
      • 1970-01-01
      相关资源
      最近更新 更多