私はOSGiプログラミングを開始しており、サービスを起動するには2つの方法があります。ServiceTrackerとServiceReferenceの使い分け
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を使用しています。
これらの一つが正しいおよび/またはある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();
特定のインタフェースを実装するすべてのサービスのレジスタを保持する最良の方法は?これを達成する別の方法がありますか?なぜ同じことをする2つの方法があるように見えますか?