DelegatingInvocationHandler(BundleContext context, Class<T> type, long timeout, TimeUnit unit) { dynamicReference = new DynamicReference<T>(type.getSimpleName(), timeout, unit); tracker = new ServiceTracker<T, T>(context, type, null) { @Override public T addingService(ServiceReference<T> reference) { T service = super.addingService(reference); dynamicReference.bind(service); return service; } @Override public void modifiedService(ServiceReference<T> reference, T service) { super.modifiedService(reference, service); dynamicReference.bind(service); } @Override public void removedService(ServiceReference<T> reference, T service) { super.removedService(reference, service); dynamicReference.unbind(service); } }; tracker.open(); }
DelegatingInvocationHandler(BundleContext context, Class<T> type, long timeout, TimeUnit unit) { dynamicReference = new DynamicReference<T>(type.getSimpleName(), timeout, unit); tracker = new ServiceTracker<T, T>(context, type, null) { @Override public T addingService(ServiceReference<T> reference) { T service = super.addingService(reference); dynamicReference.bind(service); return service; } @Override public void modifiedService(ServiceReference<T> reference, T service) { super.modifiedService(reference, service); dynamicReference.bind(service); } @Override public void removedService(ServiceReference<T> reference, T service) { super.removedService(reference, service); dynamicReference.unbind(service); } }; tracker.open(); }
DelegatingInvocationHandler(BundleContext context, Class<T> type, long timeout, TimeUnit unit) { dynamicReference = new DynamicReference<T>(type.getSimpleName(), timeout, unit); tracker = new ServiceTracker<T, T>(context, type, null) { @Override public T addingService(ServiceReference<T> reference) { T service = super.addingService(reference); dynamicReference.bind(service); return service; } @Override public void modifiedService(ServiceReference<T> reference, T service) { super.modifiedService(reference, service); dynamicReference.bind(service); } @Override public void removedService(ServiceReference<T> reference, T service) { super.removedService(reference, service); dynamicReference.unbind(service); } }; tracker.open(); }
/** * Finds or waits for the {@link org.jclouds.compute.ComputeService} that matches the specified name. */ public ComputeService getOrWait(String name) { assertValid(); computeServices.putIfAbsent(name, new DynamicReference<ComputeService>(name, COMPUTE_SERVICE_WAIT, TimeUnit.MILLISECONDS)); return computeServices.get(name).get(); }
@Override public ComputeService getIfPresent(String name) { assertValid(); computeServices.putIfAbsent(name, new DynamicReference<ComputeService>(name, COMPUTE_SERVICE_WAIT, TimeUnit.MILLISECONDS)); return computeServices.get(name).getIfPresent(); }
DelegatingInvocationHandler(ModuleContext context, Class<T> type, long timeout, TimeUnit unit) { dynamicReference = new DynamicReference<T>(type.getSimpleName(), timeout, unit); tracker = new ServiceTracker<T, T>(context, type, null) { @Override public T addingService(ServiceReference<T> reference) { T service = super.addingService(reference); dynamicReference.bind(service); return service; } @Override public void modifiedService(ServiceReference<T> reference, T service) { super.modifiedService(reference, service); dynamicReference.bind(service); } @Override public void removedService(ServiceReference<T> reference, T service) { super.removedService(reference, service); dynamicReference.unbind(service); } }; tracker.open(); }
void bindComputeService(ComputeService computeService) { String name = computeService.getContext().unwrap().getName(); if (!Strings.isEmpty(name)) { computeServices.putIfAbsent(name, new DynamicReference<ComputeService>(name, COMPUTE_SERVICE_WAIT, TimeUnit.MILLISECONDS)); computeServices.get(name).bind(computeService); } }