2009-11-17 35 views
11

Tôi chỉ mới bắt đầu với lập trình OSGi và đã đi qua hai cách để nghe cho các dịch vụ được kích hoạt.Khi nào sử dụng ServiceTracker vs ServiceReference

Cách đầu tiên, từ một cuốn sách EclipseRCP, sử dụng 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])); 
} 

Thứ hai, từ các ví dụ internet, sử dụng 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(); 

Mà một trong số đó là đúng và/hoặc cách tốt nhất để giữ một đăng ký của tất cả các dịch vụ thực hiện một giao diện nhất định? Có cách nào khác để hoàn thành việc này không? Tại sao dường như có hai cách để làm điều tương tự?

Trả lời

15

Như bạn rồi có thể lấy được hình thành tên gói org.osgi.util.tracker.ServiceTrackerServiceTracker lớp tiện ích mà (trong một số trường hợp)

đơn giản sử dụng dịch vụ từ registry dịch vụ Khung của.

Trong lập trình luôn có một số cách để thực hiện. Bạn có thể tự quản lý ServiceReferences của mình hoặc nếu nó phù hợp với bạn hoặc vấn đề của bạn, hãy sử dụng lớp tiện ích đi kèm có các ca sử dụng của nó.

Ngoài ra kiểm tra Best practices for accessing services

Một số nguồn tin này khác mà nhà nước mà nó hầu hết thời gian nó khôn ngoan để sử dụng ServiceTracker

A Comparison of Eclipse Extensions and OSGi Services

OSGi Service Tracker

Getting Started with OSGi: Consuming a Service

Các vấn đề liên quan