use of org.osgi.framework.ServiceReference in project aries by apache.
the class CdiBeanTests method testConstructorInjectedService.
public void testConstructorInjectedService() throws Exception {
Iterator<ServiceReference<BeanService>> iterator = bundleContext.getServiceReferences(BeanService.class, String.format("(objectClass=*.%s)", "ConstructorInjectedService")).iterator();
assertTrue(iterator.hasNext());
ServiceReference<BeanService> serviceReference = iterator.next();
assertNotNull(serviceReference);
BeanService bean = bundleContext.getService(serviceReference);
assertNotNull(bean);
assertEquals("PREFIXCONSTRUCTOR", bean.doSomething());
}
use of org.osgi.framework.ServiceReference in project aries by apache.
the class CdiBeanTests method testFieldInjectedService.
public void testFieldInjectedService() throws Exception {
Iterator<ServiceReference<BeanService>> iterator = bundleContext.getServiceReferences(BeanService.class, String.format("(objectClass=*.%s)", "FieldInjectedService")).iterator();
assertTrue(iterator.hasNext());
ServiceReference<BeanService> serviceReference = iterator.next();
assertNotNull(serviceReference);
BeanService bean = bundleContext.getService(serviceReference);
assertNotNull(bean);
assertEquals("PREFIXFIELD", bean.doSomething());
}
use of org.osgi.framework.ServiceReference in project aries by apache.
the class BlueprintURLContext method findBPCRef.
/**
* Look for a BluepintContainer service in a given bundle
* @param b Bundle to look in
* @return BlueprintContainer service, or null if none available
*/
private static ServiceReference findBPCRef(Bundle b) {
ServiceReference[] refs = b.getRegisteredServices();
ServiceReference result = null;
if (refs != null) {
outer: for (ServiceReference r : refs) {
String[] objectClasses = (String[]) r.getProperty(Constants.OBJECTCLASS);
for (String objectClass : objectClasses) {
if (objectClass.equals(BlueprintContainer.class.getName())) {
// Arguably we could put an r.isAssignableTo(jndi-url-bundle, BlueprintContainer.class.getName())
// check here. But if you've got multiple, class-space inconsistent instances of blueprint in
// your environment, you've almost certainly got other problems.
result = r;
break outer;
}
}
}
}
return result;
}
use of org.osgi.framework.ServiceReference in project aries by apache.
the class AbstractJPATransactionTest method getService.
protected <T> T getService(Class<T> clazz, String filter, long timeout) throws InvalidSyntaxException {
Filter f = FrameworkUtil.createFilter(filter == null ? "(|(foo=bar)(!(foo=bar)))" : filter);
ServiceTracker<T, T> tracker = new ServiceTracker<T, T>(context, clazz, null) {
@Override
public T addingService(ServiceReference<T> reference) {
return f.match(reference) ? super.addingService(reference) : null;
}
};
tracker.open();
try {
T t = tracker.waitForService(timeout);
if (t == null) {
throw new NoSuchElementException(clazz.getName());
}
return t;
} catch (InterruptedException e) {
throw new RuntimeException("Error waiting for service " + clazz.getName(), e);
} finally {
trackers.add(tracker);
}
}
use of org.osgi.framework.ServiceReference in project jackrabbit-oak by apache.
the class OsgiWhiteboard method track.
/**
* Returns a tracker for services of the given type. The returned tracker
* is optimized for frequent {@link Tracker#getServices()} calls through
* the use of a pre-compiled list of services that's atomically updated
* whenever services are added, modified or removed.
*/
@Override
public <T> Tracker<T> track(final Class<T> type) {
checkNotNull(type);
final AtomicReference<List<T>> list = new AtomicReference<List<T>>(Collections.<T>emptyList());
final ServiceTrackerCustomizer customizer = new ServiceTrackerCustomizer() {
private final Map<ServiceReference, T> services = newHashMap();
@Override
@SuppressWarnings("unchecked")
public synchronized Object addingService(ServiceReference reference) {
Object service = context.getService(reference);
if (type.isInstance(service)) {
services.put(reference, (T) service);
list.set(getServiceList(services));
return service;
} else {
context.ungetService(reference);
return null;
}
}
@Override
@SuppressWarnings("unchecked")
public synchronized void modifiedService(ServiceReference reference, Object service) {
// TODO: Figure out if the old reference instance
// would automatically reflect the updated properties.
// For now we play it safe by replacing the old key
// with the new reference instance passed as argument.
services.remove(reference);
services.put(reference, (T) service);
list.set(getServiceList(services));
}
@Override
public synchronized void removedService(ServiceReference reference, Object service) {
services.remove(reference);
list.set(getServiceList(services));
// TODO: Note that the service might still be in use
// by some client that called getServices() before
// this method was invoked.
context.ungetService(reference);
}
};
final ServiceTracker tracker = new ServiceTracker(context, type.getName(), customizer);
tracker.open();
return new Tracker<T>() {
@Override
public List<T> getServices() {
return list.get();
}
@Override
public void stop() {
tracker.close();
}
};
}
Aggregations