Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 何时使用ServiceTracker vs ServiceReference_Java_Osgi - Fatal编程技术网

Java 何时使用ServiceTracker vs ServiceReference

Java 何时使用ServiceTracker vs ServiceReference,java,osgi,Java,Osgi,我刚刚开始OSGi编程,遇到了两种激活服务的侦听器方法 第一种方法来自EclipseRCP手册,使用ServiceReference: String filter="(objectclass="+IModelCreator.class.getName()+")"; context.addServiceListener(this, filter); modelCreators = Collections.synchronizedMap( new HashMap<ModelID, Li

我刚刚开始OSGi编程,遇到了两种激活服务的侦听器方法

第一种方法来自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]));
}
String filter=“(objectclass=“+IModelCreator.class.getName()+””;
addServiceListener(这个,过滤器);
modelCreators=Collections.synchronizedMap(
新HashMap());
ServiceReferences[]=context.getServiceReferences(null,筛选器);
if(references==null)返回;

for(int i=0;i,因为您已经可以从包名
org.osgi.util.tracker.ServiceTracker
中派生出来,它是
ServiceTracker
一个实用程序类,在某些情况下

简化了从 框架的服务注册中心

在编程中,通常有几种方法。您可以自己管理ServiceReferences,或者如果它适合您或您的问题,可以使用具有其用例的捆绑实用程序类

也检查一下这个

一些其他来源指出,大多数情况下使用
ServiceTracker

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();