Java 何时使用ServiceTracker vs ServiceReference
我刚刚开始OSGi编程,遇到了两种激活服务的侦听器方法 第一种方法来自EclipseRCP手册,使用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
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();