public boolean shutdownService(String serviceClass, Object service)
    {
        if (service == null)
            return false;
        if (bundleContext == null)
            return false;
        String filter = null;
        if (serviceClass == null)
            if (!(service instanceof String))
                serviceClass = service.getClass().getName();
        if (service instanceof String)
            filter = ClassServiceUtility.addToFilter("", BundleConstants.SERVICE_PID, (String)service);
        ServiceReference[] refs;
        try {
            refs = bundleContext.getServiceReferences(serviceClass, filter);

            if ((refs == null) || (refs.length == 0))
                return false;
            for (ServiceReference reference : refs)
            {
                if ((bundleContext.getService(reference) == service) || (service instanceof String))
                {
                    if (refs.length == 1)
                    {    // Last/only one, shut down the service
                        // Lame code
                        String dependentBaseBundleClassName = service.getClass().getName();
                        String packageName = ClassFinderActivator.getPackageName(dependentBaseBundleClassName, false);
                        if (service instanceof String)
                            packageName = (String)service;
                        Bundle bundle = this.findBundle(null, bundleContext, packageName, null);
                        if (bundle != null)
                            if ((bundle.getState() & Bundle.ACTIVE) != 0)
                        {
                            try {
                                bundle.stop();
                            } catch (BundleException e) {
                                e.printStackTrace();
                            }
                        }
                        return true;
                    }
                }
            }
        } catch (InvalidSyntaxException e1) {
            e1.printStackTrace();
        }
        return false;    // Not found?
    }
public boolean shutdownService ( String serviceClass , Object service ) { if ( service == null ) return false ; if ( bundleContext == null ) return false ; String filter = null ; if ( serviceClass == null ) if ( ! ( service instanceof String ) ) serviceClass = service . getClass ( ) . getName ( ) ; if ( service instanceof String ) filter = ClassServiceUtility . addToFilter ( "" , BundleConstants . SERVICE_PID , ( String ) service ) ; ServiceReference [ ] refs ; try { refs = bundleContext . getServiceReferences ( serviceClass , filter ) ; if ( ( refs == null ) || ( refs . length == 0 ) ) return false ; for ( ServiceReference reference : refs ) { if ( ( bundleContext . getService ( reference ) == service ) || ( service instanceof String ) ) { if ( refs . length == 1 ) { String dependentBaseBundleClassName = service . getClass ( ) . getName ( ) ; String packageName = ClassFinderActivator . getPackageName ( dependentBaseBundleClassName , false ) ; if ( service instanceof String ) packageName = ( String ) service ; Bundle bundle = this . findBundle ( null , bundleContext , packageName , null ) ; if ( bundle != null ) if ( ( bundle . getState ( ) & Bundle . ACTIVE ) != 0 ) { try { bundle . stop ( ) ; } catch ( BundleException e ) { e . printStackTrace ( ) ; } } return true ; } } } } catch ( InvalidSyntaxException e1 ) { e1 . printStackTrace ( ) ; } return false ; }
Shutdown the bundle for this service.
@param service The interface the service is registered under.
@param service The service or the package name of the service (service pid) that I'm looking for.
@return True if successful