Currently I am using ServiceTracker already. But if I understand correctly, I need to have my own ServiceTrackerCustomizer in order to track the changes, right?

Here is my code as it is at the moment:

public void start(BundleContext context) throws Exception {
                // Get the LogService.
logServiceTracker = new ServiceTracker(context, LogService.class.getName(), null);
                logServiceTracker.open();
                LogService logService = (LogService) 
logServiceTracker.getService();
                
                // Get the ConfigurationAdmin.
configuratorTracker = new ServiceTracker(context, ConfiguratorService.class.getName(), null);
                configuratorTracker.open();
ConfiguratorService configuratorService = (ConfiguratorService) configuratorTracker.getService();
                
                if(logService != null) {
logService.log(LogService.LOG_INFO, "LogService succesfully loaded.");
                        
                        if(configuratorService != null) {
logService.log(LogService.LOG_INFO, "ConfiguratorService succesfully loaded.");
                                
                                // Get the properties.
Dictionary<String, Object> properties = configuratorService .getServiceProperties(DeviceRegistryServiceImpl.getPid());
                                
                                if(properties != null) {
                                        // Create a new DeviceRegistryService.
DeviceRegistryService service = new DeviceRegistryServiceImpl(logService, configuratorService, properties);
                                        
                                        // Register DeviceRegistryService 
implementation.
ServiceRegistration deviceRegistryServiceRegistration = context.registerService(DeviceRegistryService.class.getName(), service, properties);
                                        
                                        if(deviceRegistryServiceRegistration != 
null)
logService.log(LogService.LOG_INFO, "DeviceRegistryService successfully registered.");
                                        else
logService.log(LogService.LOG_ERROR, "Error while registering DeviceRegistryService. Reference to it is equal to null.");
                                }
                        }
                        else
logService.log(LogService.LOG_DEBUG, "Mandatory service ConfiguratorService is not available. Services of bundle aparat- configurator are not registered.");
                }
                else
System.out.println("Mandatory service LogService is not available. Services of bundle aparat-registry are not registered.");
        }

On Oct 5, 2009, at 10:51 AM, Richard S. Hall wrote:

On 10/4/09 22:02, Guo Du wrote:
On Sun, Oct 4, 2009 at 8:37 PM, Vlatko Davidovski<[email protected] > wrote:

Or, should I use ServiceTrackerCustomizer in such a case?

Regards,
Vlatko

You may also register a org.osgi.framework.ServiceListener from
aparat-registry to take action on ServiceEvent.REGISTERED for your
service interface.


If you need to listen for service events, using the ServiceTracker is probably easier than using the base API...or you could use something like DS or iPOJO.

The whole point, though, is if one of your components depends on the other, this dependencies should be realized via a service where it listens for the service to become available. This eliminates the startup ordering issue. How you achieve this (i.e., base API, ServiceTracker, iPOJO, etc.) is just an implementation detail.

-> richard

-Guo

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to