org.osgi.framework.ServiceListener#org.osgi.framework.ServiceEvent源码实例Demo

下面列出了org.osgi.framework.ServiceListener#org.osgi.framework.ServiceEvent 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。

源代码1 项目: neoscada   文件: ServiceDiscoverer.java
@Override
public synchronized void serviceChanged ( final ServiceEvent event )
{
    switch ( event.getType () )
    {
        case ServiceEvent.REGISTERED:
            addReference ( event.getServiceReference () );
            break;
        case ServiceEvent.MODIFIED:
            update ();
            break;
        case ServiceEvent.UNREGISTERING:
            removeReference ( event.getServiceReference () );
            break;
    }
}
 
@Test
public void unknownServiceUnregistrationsAreTracked() {
    HashMap<String, Object> props = new HashMap<>();
    props.put(Constants.OBJECTCLASS, new String[] { "foo", "bar" });
    DummyServiceReference<Object> sr1 = new DummyServiceReference<>(props);
    
    HashMap<String, Object> props2 = new HashMap<>();
    props2.put(Constants.OBJECTCLASS, new String[] { "foo"} );
    DummyServiceReference<Object> sr2 = new DummyServiceReference<>(props2);
    
    ServiceRestartCountCalculator srcc = new ServiceRestartCountCalculator();
    srcc.serviceChanged(new ServiceEvent(ServiceEvent.REGISTERED, sr1));
    srcc.serviceChanged(new ServiceEvent(ServiceEvent.UNREGISTERING, sr1));
    
    srcc.serviceChanged(new ServiceEvent(ServiceEvent.REGISTERED, sr2));
    srcc.serviceChanged(new ServiceEvent(ServiceEvent.UNREGISTERING, sr2));
    
    assertThat(srcc.getRegistrations().size(), equalTo(0));
    Map<String, Integer> unidentifiedRegistrations = srcc.getUnidentifiedRegistrationsByClassName();
    assertThat(unidentifiedRegistrations.size(), equalTo(2));
    assertThat(unidentifiedRegistrations.get("foo"), equalTo(2));
    assertThat(unidentifiedRegistrations.get("bar"), equalTo(1));
}
 
源代码3 项目: openhab-core   文件: MetadataRegistryImplTest.java
@Before
@SuppressWarnings("unchecked")
public void setup() throws Exception {
    initMocks(this);

    when(bundleContext.getService(same(managedProviderRef))).thenReturn(managedProvider);

    when(item.getName()).thenReturn(ITEM_NAME);

    registry = new MetadataRegistryImpl();

    registry.setManagedProvider(managedProvider);
    registry.activate(bundleContext);

    ArgumentCaptor<ServiceListener> captor = ArgumentCaptor.forClass(ServiceListener.class);
    verify(bundleContext).addServiceListener(captor.capture(), any());
    providerTracker = captor.getValue();
    providerTracker.serviceChanged(new ServiceEvent(ServiceEvent.REGISTERED, managedProviderRef));
}
 
@Before
@SuppressWarnings("unchecked")
public void setup() throws Exception {
    initMocks(this);

    when(bundleContext.getService(same(managedProviderRef))).thenReturn(managedProvider);

    when(item.getName()).thenReturn(ITEM_NAME);

    metadataRegistry = new MetadataRegistryImpl();

    metadataRegistry.setManagedProvider(managedProvider);
    metadataRegistry.activate(bundleContext);

    ArgumentCaptor<ServiceListener> captor = ArgumentCaptor.forClass(ServiceListener.class);
    verify(bundleContext).addServiceListener(captor.capture(), any());
    providerTracker = captor.getValue();
    providerTracker.serviceChanged(new ServiceEvent(ServiceEvent.REGISTERED, managedProviderRef));

    commandDescriptionProvider = new MetadataCommandDescriptionProvider(metadataRegistry, new HashMap<>());
}
 
@Before
@SuppressWarnings("unchecked")
public void setup() throws Exception {
    initMocks(this);

    when(bundleContext.getService(same(managedProviderRef))).thenReturn(managedProvider);

    when(item.getName()).thenReturn(ITEM_NAME);

    metadataRegistry = new MetadataRegistryImpl();

    metadataRegistry.setManagedProvider(managedProvider);
    metadataRegistry.activate(bundleContext);

    ArgumentCaptor<ServiceListener> captor = ArgumentCaptor.forClass(ServiceListener.class);
    verify(bundleContext).addServiceListener(captor.capture(), any());
    providerTracker = captor.getValue();
    providerTracker.serviceChanged(new ServiceEvent(ServiceEvent.REGISTERED, managedProviderRef));

    stateDescriptionFragmentProvider = new MetadataStateDescriptionFragmentProvider(metadataRegistry,
            new HashMap<>());
}
 
源代码6 项目: knopflerfish.org   文件: Activator.java
public void serviceChanged(ServiceEvent event) { 
  switch (event.getType()) { 
  case ServiceEvent.REGISTERED: 
    log("ServiceEvent.REGISTERED"); 
    dateService = (DateService) Activator.bc.getService(event 
                                                         .getServiceReference()); 
    startUsingService(); 
    break; 
  case ServiceEvent.MODIFIED: 
    log("ServiceEvent.MODIFIED received"); 
    stopUsingService(); 
    dateService = (DateService) Activator.bc.getService(event 
                                                    .getServiceReference()); 
    startUsingService(); 
    break; 
  case ServiceEvent.UNREGISTERING: 
    log("ServiceEvent.UNREGISTERING"); 
    stopUsingService(); 
    break; 
  } 
}
 
源代码7 项目: knopflerfish.org   文件: LogFrameworkListener.java
/**
 * The service event callback method inserts all service events into the
 * log.
 * 
 * Event of types REGISTERED, UNREGISTERED are assigned the log
 * level info.
 * 
 * Events of type MODIFIED are assigned the log level DEBUG.
 * 
 * @param se
 *            the service event that has occurred.
 */
public void serviceChanged(ServiceEvent se) {
    ServiceReference<?> sr = se.getServiceReference();
    Bundle bundle = sr.getBundle();
    String msg = null;
    int level = LogService.LOG_INFO;
    switch (se.getType()) {
    case ServiceEvent.REGISTERED:
        msg = "ServiceEvent REGISTERED";
        break;
    case ServiceEvent.UNREGISTERING:
        msg = "ServiceEvent UNREGISTERING";
        break;
    case ServiceEvent.MODIFIED:
        msg = "ServiceEvent MODIFIED";
        level = LogService.LOG_DEBUG;
        break;
    }
    lrsf.log(new LogEntryImpl(bundle, sr, level, msg));
}
 
源代码8 项目: knopflerfish.org   文件: LogReaderDispatcher.java
public void open()
{
  final String filter = "(objectclass=" + LogReaderService.class.getName() + ")";

  try {
    final ServiceReference<?>[] srl =
      bc.getServiceReferences((String) null, filter);
    for (int i = 0; srl != null && i < srl.length; i++) {

      serviceChanged(new ServiceEvent(ServiceEvent.REGISTERED, srl[i]));
    }
    bc.addServiceListener(this, filter);
  } catch (final Exception e) {
    e.printStackTrace();
  }
}
 
@Override
public void serviceChanged(ServiceEvent event)
{
  ServiceReference<?> sr = event.getServiceReference();
  for (String cn : (String [])sr.getProperty(Constants.OBJECTCLASS)) {
    Set<ReferenceListener> rls = serviceListeners.get(cn);
    if (rls != null) {
      for (ReferenceListener rl : rls) {
        rl.serviceEvent(sr, event);
      }
    }
  }
  List<Runnable> postrun = afterServiceEvent.get(event);
  if (postrun != null) {
    for (Runnable r : postrun) {
      r.run();
    }
  }
}
 
源代码10 项目: smarthome   文件: MetadataRegistryImplTest.java
@Before
@SuppressWarnings("unchecked")
public void setup() throws Exception {
    initMocks(this);

    when(bundleContext.getService(same(managedProviderRef))).thenReturn(managedProvider);

    when(item.getName()).thenReturn(ITEM_NAME);

    registry = new MetadataRegistryImpl();

    registry.setManagedProvider(managedProvider);
    registry.activate(bundleContext);

    ArgumentCaptor<ServiceListener> captor = ArgumentCaptor.forClass(ServiceListener.class);
    verify(bundleContext).addServiceListener(captor.capture(), any());
    providerTracker = captor.getValue();
    providerTracker.serviceChanged(new ServiceEvent(ServiceEvent.REGISTERED, managedProviderRef));

}
 
源代码11 项目: knopflerfish.org   文件: CMCommands.java
@Override
public void serviceChanged(ServiceEvent event)
{
  switch (event.getType()) {
  case ServiceEvent.REGISTERED:
    @SuppressWarnings("unchecked")
    final ServiceReference<ConfigurationAdmin> sr =
      (ServiceReference<ConfigurationAdmin>) event.getServiceReference();
    if (refCA != sr) {
      refCA = sr;
    }
    break;
  case ServiceEvent.MODIFIED:
    break;
  case ServiceEvent.UNREGISTERING:
    if (refCA != null) {
      refCA = null;
    }
    break;
  default:
    break;
  }
}
 
public void runTest() throws Throwable {
  boolean teststatus = true;
  int cnt = 1;

  teststatus = runStartStopTest( "FRAMEsl05A", cnt, buA,
                                 new int[]{
                                   ServiceEvent.REGISTERED,
                                   ServiceEvent.UNREGISTERING,
                                 },
                                 new int[]{
                                   ServiceEvent.REGISTERED,
                                   ServiceEvent.UNREGISTERING,
                                 } );

  if (teststatus == true) {
    out.println("### ServiceListenerTestsuite :FRAMEsl05A:PASS");
  }
  else {
    fail("### ServiceListenerTestsuite :FRAMEsl05A:FAIL");
  }
}
 
boolean checkEvents(int[] eventTypes)
{
  if (events.size() != eventTypes.length) {
    dumpEvents(eventTypes);
    return false;
  }

  for (int i=0; i<eventTypes.length; i++) {
    ServiceEvent evt = (ServiceEvent) events.get(i);
    if (eventTypes[i] != evt.getType() ) {
      dumpEvents(eventTypes);
      return false;
    }
  }
  return true;
}
 
private void processRegisteredAxis2ConfigServices() {
    try {
        //Processing Axis2 config services..
        ServiceReference[] references = bundleContext.getServiceReferences((String)null,
                "(" + AXIS2_CONFIG_SERVICE + "=*)");

        if (references != null) {
            for (ServiceReference sr : references) {
                processRegisteredAxis2ConfigServices(sr, ServiceEvent.REGISTERED);
            }
        }
    } catch (InvalidSyntaxException e) {
        log.error("Failed to obtain registerd services. Invalid filter Syntax.", e);
    }
}
 
源代码15 项目: netbeans   文件: NetigsoServices.java
@Override
public void serviceChanged(ServiceEvent ev) {
    final ServiceReference ref = ev.getServiceReference();
    if (ev.getType() == ServiceEvent.REGISTERED) {
        MainLookup.register(ref, this);
    }
    if (ev.getType() == ServiceEvent.UNREGISTERING) {
        MainLookup.unregister(ref, this);
    }
}
 
源代码16 项目: neoscada   文件: AbstractExporter.java
@Override
public synchronized void serviceChanged ( final ServiceEvent event )
{
    switch ( event.getType () )
    {
        case ServiceEvent.REGISTERED:
            addService ( event.getServiceReference () );
            break;
        case ServiceEvent.UNREGISTERING:
            removeService ( event.getServiceReference () );
            break;
    }

}
 
源代码17 项目: neoscada   文件: ConnectionInformationList.java
protected synchronized void handleServiceChanged ( final ServiceEvent event )
{
    switch ( event.getType () )
    {
        case ServiceEvent.UNREGISTERING:
        case ServiceEvent.MODIFIED_ENDMATCH:
            removeService ( event.getServiceReference () );
            break;
        case ServiceEvent.REGISTERED:
            addService ( event.getServiceReference () );
            break;
    }
}
 
源代码18 项目: neoscada   文件: Activator.java
@Override
public void serviceChanged ( final ServiceEvent event )
{
    switch ( event.getType () )
    {
    case ServiceEvent.REGISTERED:
        addService ( event.getServiceReference () );
        break;
    case ServiceEvent.UNREGISTERING:
        removeService ( event.getServiceReference () );
        break;
    }
}
 
源代码19 项目: neoscada   文件: ServiceImpl.java
@Override
public synchronized void serviceChanged ( final ServiceEvent event )
{
    logger.debug ( "Service changed: {}", event );
    final ServiceReference<?> ref = event.getServiceReference ();

    try
    {
        switch ( event.getType () )
        {
            case ServiceEvent.REGISTERED:
                checkAddConditionQuery ( ref );
                checkAddEventQuery ( ref );
                break;
            case ServiceEvent.UNREGISTERING:
                final String id = getQueryId ( ref );
                final MonitorQuery query = this.conditionQueryRefs.remove ( id );
                if ( query != null )
                {
                    removeMonitorQuery ( id, query );
                    this.context.ungetService ( ref );
                }
                final EventQuery eventQuery = this.eventQueryRefs.remove ( id );
                if ( eventQuery != null )
                {
                    removeEventQuery ( id, eventQuery );
                    this.context.ungetService ( ref );
                }
                break;
        }
    }
    catch ( final Exception e )
    {
        logger.warn ( "Failed to handle service change", e );
    }
}
 
源代码20 项目: semweb4j   文件: RDF2GoActivator.java
private void handleUnregisteredEvent(ServiceEvent event) {
	ServiceReference ref = event.getServiceReference();
	String currClass = getCurrentFactoryClassName();
	if(ref == this.currentFactorySR) {
		RDF2Go.register((ModelFactory)null);
		this.currentFactorySR = null;
		log.debug("RDF2Go unregistered the ModelFactory " + currClass
		        + " as default ModelFactory. No ModelFactory available now. "
		        + "The Bundle of the ModelFactory was unregistered.");
	}
	this.bc.ungetService(ref);
	initalizeListener();
}
 
@Override
public void serviceChanged(ServiceEvent event) {
    
    if ( shouldIgnore(event) ) 
        return;

    ServiceIdentifier id = tryFindIdFromGeneralProperties(event);
    if ( id == null )
        id = tryFindIdFromSpecificProperties(event);
    
    if ( id == null ) {
        logUnknownService(event);
        if ( event.getType() == ServiceEvent.UNREGISTERING )
            recordUnknownServiceUnregistration(event);
        return;
    }

    ServiceRegistrationsTracker tracker;
    synchronized (registrations) {
        
        if ( event.getType() == ServiceEvent.REGISTERED ) {
            tracker = registrations.computeIfAbsent(id, ServiceRegistrationsTracker::new);
            tracker.registered();
        } else if ( event.getType() == ServiceEvent.UNREGISTERING ) {
            
            tracker = registrations.get(id);
            if (tracker == null) {
                Log.debug(getClass(), "Service with identifier {} was unregistered, but no previous registration data was found", id);
                return;
            }
            tracker.unregistered();
        }
    }
}
 
private ServiceIdentifier tryFindIdFromGeneralProperties(ServiceEvent event) {
    for ( String identifierProp : GENERAL_IDENTIFIER_PROPERTIES ) {
        Object identifierVal = event.getServiceReference().getProperty(identifierProp);
        if ( identifierVal != null )
            return new ServiceIdentifier(identifierProp, identifierVal.toString() );
    }
    
    return null;
}
 
private ServiceIdentifier tryFindIdFromSpecificProperties(ServiceEvent event) {
    for ( Map.Entry<String, Collection<String>> entry : SPECIFIC_IDENTIFIER_PROPERTIES.entrySet() ) {
        String[] classNames = (String[]) event.getServiceReference().getProperty(Constants.OBJECTCLASS);
        for ( String className : classNames ) {
            if ( entry.getKey().equals(className) ) {
                StringBuilder propKey = new StringBuilder();
                StringBuilder propValue = new StringBuilder();
                
                for ( String idPropName : entry.getValue() ) {
                    Object idPropVal = event.getServiceReference().getProperty(idPropName);
                    if ( idPropVal != null ) {
                        propKey.append(idPropName).append('~');
                        propValue.append(idPropVal).append('~');
                    }
                }
                
                if ( propKey.length() != 0 ) {
                    propKey.deleteCharAt(propKey.length() - 1);
                    propValue.deleteCharAt(propValue.length() - 1);
                    ServiceIdentifier id = new ServiceIdentifier(propKey.toString(), propValue.toString());
                    id.setAdditionalInfo(Constants.OBJECTCLASS + "=" + Arrays.toString(classNames));
                    return id;
                }
            }
        }
    }
    
    return null;
}
 
private void logUnknownService(ServiceEvent event) {
    if ( event.getType() == ServiceEvent.UNREGISTERING ) {
        Map<String, Object> props = new HashMap<>();
        for ( String propertyName : event.getServiceReference().getPropertyKeys() ) {
            Object propVal = event.getServiceReference().getProperty(propertyName);
            if ( propVal.getClass() == String[].class )
                propVal = Arrays.toString((String[]) propVal);
            props.put(propertyName, propVal);
        }

        Log.debug(getClass(), "Ignoring unregistration of service with props {}, as it has none of identifier properties {}", props, Arrays.toString(GENERAL_IDENTIFIER_PROPERTIES));
    }
}
 
private void recordUnknownServiceUnregistration(ServiceEvent event) {
    String[] classNames = (String[]) event.getServiceReference().getProperty(Constants.OBJECTCLASS);
    synchronized (unidentifiedRegistrationsByClassName) {
        for ( String className : classNames )
            unidentifiedRegistrationsByClassName.compute(className, (k,v) -> v == null ? 1 : ++v);
    }
}
 
@Test
public void ignoredEventTypes() {
    
    ServiceRestartCountCalculator srcc = new ServiceRestartCountCalculator();
    srcc.serviceChanged(new ServiceEvent(ServiceEvent.MODIFIED, new DummyServiceReference<>(new HashMap<>())));
    srcc.serviceChanged(new ServiceEvent(ServiceEvent.MODIFIED_ENDMATCH, new DummyServiceReference<>(new HashMap<>())));
    
    assertThat(srcc.getRegistrations().size(), equalTo(0));
}
 
源代码27 项目: packagedrone   文件: ControllerTracker.java
@Override
public void serviceChanged ( final ServiceEvent event )
{
    switch ( event.getType () )
    {
        case ServiceEvent.REGISTERED:
            handleAddingService ( event.getServiceReference () );
            break;
        case ServiceEvent.UNREGISTERING:
            handleRemovedService ( event.getServiceReference () );
            break;
    }
}
 
@Test
public void unknownServiceIsNotTracked() {
    HashMap<String, Object> props = new HashMap<>();
    props.put(Constants.OBJECTCLASS, new String[] { "foo" });
    DummyServiceReference<Object> dsr = new DummyServiceReference<>(props);
    
    ServiceRestartCountCalculator srcc = new ServiceRestartCountCalculator();
    srcc.serviceChanged(new ServiceEvent(ServiceEvent.REGISTERED, dsr));
    
    assertThat(srcc.getRegistrations().size(), equalTo(0));
    assertThat(srcc.getUnidentifiedRegistrationsByClassName().size(), equalTo(0));
}
 
private void assertServiceWithPropertyIsTracked(String propertyName) {
    
    HashMap<String, Object> props = new HashMap<>();
    props.put(propertyName, new String[] { "foo.bar" });
    DummyServiceReference<Object> dsr = new DummyServiceReference<>(props);
    
    ServiceRestartCountCalculator srcc = new ServiceRestartCountCalculator();
    srcc.serviceChanged(new ServiceEvent(ServiceEvent.REGISTERED, dsr));
    
    assertThat(srcc.getRegistrations().size(), CoreMatchers.equalTo(1));
}
 
源代码30 项目: concierge   文件: ShellActivator.java
/**
 * called, when the bundle is started.
 * 
 * @param context
 *            the bundle context.
 * 
 * @see org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext)
 */
public void start(final BundleContext context) throws Exception {
	ShellActivator.context = context;
	List<ShellCommandGroup> plugins = new ArrayList<ShellCommandGroup>();

	final ServiceReference<?> pkgAdminRef = context
			.getServiceReference("org.osgi.service.packageadmin.PackageAdmin");
	if (pkgAdminRef != null) {
		plugins.add(new PackageAdminCommandGroup(context
				.getService(pkgAdminRef)));
	}

	shell = new Shell(System.out, System.err,
			(ShellCommandGroup[]) plugins
					.toArray(new ShellCommandGroup[plugins.size()]));
	context.addServiceListener(shell, "(" + Constants.OBJECTCLASS + "="
			+ ShellCommandGroup.class.getName() + ")");

	final Collection<ServiceReference<ShellCommandGroup>> existingGroups = context
			.getServiceReferences(ShellCommandGroup.class, null);
	if (existingGroups != null) {
		for (final ServiceReference<ShellCommandGroup> group : existingGroups) {
			shell.serviceChanged(new ServiceEvent(ServiceEvent.REGISTERED,
					group));
		}
	}
}