下面列出了org.osgi.framework.ServiceListener#org.osgi.framework.ServiceEvent 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
@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));
}
@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<>());
}
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;
}
}
/**
* 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));
}
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();
}
}
}
@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));
}
@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);
}
}
@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);
}
}
@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;
}
}
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;
}
}
@Override
public void serviceChanged ( final ServiceEvent event )
{
switch ( event.getType () )
{
case ServiceEvent.REGISTERED:
addService ( event.getServiceReference () );
break;
case ServiceEvent.UNREGISTERING:
removeService ( event.getServiceReference () );
break;
}
}
@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 );
}
}
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));
}
@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));
}
/**
* 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));
}
}
}