代码之家  ›  专栏  ›  技术社区  ›  KitsuneYMG

何时使用ServiceTracker vs ServiceReference

  •  11
  • KitsuneYMG  · 技术社区  · 16 年前

    第一种方法来自EclipseRCP手册,使用ServiceReference:

    String filter="(objectclass="+IModelCreator.class.getName()+")";
    context.addServiceListener(this, filter);
    modelCreators = Collections.synchronizedMap(
        new HashMap<ModelID, List<IModelCreator>>());
    ServiceReference references[] = context.getServiceReferences(null, filter);
    if(references==null) return;
    for(int i=0;i<references.length;++i) {
        this.serviceChanged(new ServiceEvent(ServiceEvent.REGISTERED,
            references[i]));
    }
    

    ServiceTracker logReaderTracker = new ServiceTracker(context,
                    org.osgi.service.log.LogReaderService.class.getName(), null);
    logReaderTracker.open();
    Object[] readers = logReaderTracker.getServices();
    if (readers != null) {
            for (int i = 0; i < readers.length; i++) {
            LogReaderService lrs = (LogReaderService) readers[i];
            m_readers.add(lrs);
            lrs.addLogListener(m_logger);
        }
    }
    logReaderTracker.close();
    

    1 回复  |  直到 9 年前
        1
  •  15
  •   jitter    16 年前

    org.osgi.util.tracker.ServiceTracker 是 ServiceTracker (在某些情况下)实用程序类

    框架的服务注册中心。

    也检查一下这个 Best practices for accessing services

    其他一些资料表明,大多数情况下使用它是明智的 服务跟踪器

    A Comparison of Eclipse Extensions and OSGi Services

    OSGi Service Tracker

    Getting Started with OSGi: Consuming a Service