下面列出了org.osgi.framework.ServiceListener#org.osgi.framework.ServiceObjects 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
@SuppressWarnings("unchecked")
ServiceObjects<S> getServiceObjects(final Bundle bundle){
if(service == null)
return null; // service already unregistered
if(serviceObjects==null){
serviceObjects = new HashMap<Bundle, ServiceObjectsImpl>(1);
}
ServiceObjectsImpl so = serviceObjects.get(bundle);
if(so == null){
so = new ServiceObjectsImpl(bundle);
serviceObjects.put(bundle, so);
}
return so;
}
ServiceTuple(
CachingServiceReference<T> cachingServiceReference,
ServiceObjects<T> serviceObjects, T service) {
_serviceReference = cachingServiceReference;
_serviceObjects = serviceObjects;
_service = new AtomicReference<>(service);
}
public static <T> OSGi<ServiceTuple<T>> onlyGettables(
OSGi<CachingServiceReference<T>> program,
Consumer<CachingServiceReference<T>> whenAddedNotGettable,
Consumer<CachingServiceReference<T>> whenLeavingNotGettable,
Logger log) {
return bundleContext().flatMap(bundleContext ->
program.recoverWith(
(serviceReference, e) ->
notGettableResult(
whenAddedNotGettable, whenLeavingNotGettable,
serviceReference, log)
).flatMap(serviceReference -> {
ServiceObjects<T> serviceObjects =
bundleContext.getServiceObjects(
serviceReference.getServiceReference());
T service = serviceObjects.getService();
if (service == null) {
return notGettableResult(
whenAddedNotGettable, whenLeavingNotGettable,
serviceReference, log);
}
return
just(new ServiceTuple<>(
serviceReference, serviceObjects, service)).
effects(__ -> {}, ServiceTuple::dispose).
effects(
ifDebugEnabled(
log,
() -> "Obtained instance from " + serviceReference),
ifDebugEnabled(
log,
() -> "Released instance from " + serviceReference)
);
}));
}
public PrototypeServiceReferenceResourceProvider(
CachingServiceReference<?> serviceReference,
Class<?> serviceClass, ServiceObjects<?> serviceObjects) {
_serviceReference = serviceReference;
_serviceClass = serviceClass;
_serviceObjects = serviceObjects;
_messageKey = _MESSAGE_INSTANCE_KEY_PREFIX + _serviceClass;
}
@Override
@SuppressWarnings({ "unchecked", "rawtypes" })
public void releaseInstance(Message m, Object o) {
((ServiceObjects)_serviceObjects).ungetService(o);
m.remove(_messageKey);
}
/**
* Returns the {@link ServiceObjects} object for the service referenced by
* the specified {@code ServiceReference} object.
*
* @see org.osgi.framework.BundleContext#getServiceObjects
*/
public <S> ServiceObjects<S> getServiceObjects(ServiceReference<S> reference) {
checkValid();
bundle.fwCtx.perm.checkGetServicePerms(reference);
ServiceReferenceImpl<S> sr = (ServiceReferenceImpl<S>)reference;
if (sr.isAvailable()) {
return new ServiceObjectsImpl(this, sr);
}
return null;
}
@Override
public <S> ServiceObjects<S> getServiceObjects(ServiceReference<S> sr) {
return delegate.getServiceObjects(sr);
}
@Override
public <S> ServiceObjects<S> getServiceObjects(ServiceReference<S> serviceReference) {
throw new UnsupportedOperationException();
}
public ServiceObjects<T> getServiceObjects() {
return _serviceObjects;
}
public <S> ServiceObjects<S> getServiceObjects(
final ServiceReference<S> reference) {
checkValid();
return ((ServiceReferenceImpl) reference).getServiceObjects(bundle);
}