Hi I am having a very intermittent issue with getService on a prototype component. This is called hundreds of times and I put a breakpoint a few weeks ago and have now gotten the error.
I have this class: @Component(scope=ServiceScope.PROTOTYPE, property= org.osgi.framework.Constants.SERVICE_RANKING + ":Integer=10" ) public final class BaValidationManagerExt implements ValidationManagerExt { private final Logger log = LoggerFactory.getLogger(getClass()); @Reference(scope = ReferenceScope.PROTOTYPE_REQUIRED) private ComponentServiceObjects<Validator> validatorFactory; @Activate private void activate() { log.trace("Activating {}/{}", getClass(), System.identityHashCode(this)); //$NON-NLS-1$ } @Deactivate private void deactivate() { log.trace("Deactivating {}/{}", getClass(), System.identityHashCode(this)); //$NON-NLS-1$ } .... @Override public Diagnostic getDiagnosticForEObject(EObject eObj) { log.trace("Getting diagnostic for {}", eObj); //$NON-NLS-1$ Validator validator = validatorFactory.getService(); if (validator != null) { try { return validator.runValidation(false, Collections.singletonMap(eObj, new HashSet<>()), new NullProgressMonitor()).getB(); } finally { validatorFactory.ungetService(validator); } } else { log.error("Validator Service not found for {}", eObj, new Throwable()); //$NON-NLS-1$ return Diagnostic.CANCEL_INSTANCE; } } } and the validator: @Component( scope = ServiceScope.PROTOTYPE, property= org.osgi.framework.Constants.SERVICE_RANKING + ":Integer=10" ) public final class BaValidator implements Validator { private final Logger log = LoggerFactory.getLogger(getClass()); private Map<EObject, Set<EObject>> elementsToValidate; private Set<EObject> validated = Sets.newHashSet(); private boolean batch; private EditingDomain domain; private AdapterFactory adapterFactory; @Reference private volatile List<ValidationProvider> validationProviders; //NOSONAR as per OSGi 112.3.9.1 @Reference private ValidationUtils validationUtils; @Activate private void activate() { log.trace("Activating {}/{}", getClass(), System.identityHashCode(this)); //$NON-NLS-1$ } @Deactivate private void deactivate() { log.trace("Deactivating {}/{}", getClass(), System.identityHashCode(this)); //$NON-NLS-1$ } ... } The error is on the highlighted line, which happens since getService returns null. As can be seen here, ValidatorFactory serviceObjects is null which seems to be what makes it return null: ComponentServiceObjectsImpl [instances=[], serviceObjects=null, deactivated=false, hashCode=301166435] I am not seeing any special in the logs (tracing is on). Just before I see a number of successful call to the same code with the last one being: just before in the logs: 08:00:45.854 [Worker-1: Create Diagram] TRACE c.c.i.v.b.p.BaValidator - Activating class com.castortech.iris.validation.ba.provider.BaValidator/1297753057 08:00:45.857 [Worker-1: Create Diagram] TRACE c.c.i.v.b.p.BaValidator - Notify 4 listeners with diagnostics ([Diagnostic OK source=com.castortech.iris.ba.validation code=0 data=[RadialDiagramImpl{[cdoID->6558b1f9-dbcf-4e9d-b7b8-73779b5ada8f] 08:00:45.858 [Worker-1: Create Diagram] TRACE c.c.i.v.b.p.BaValidator - Deactivating class com.castortech.iris.validation.ba.provider.BaValidator/1297753057 Has anyone seen this before or can provide some pointers to address and/or debug this. Thanks Alain
_______________________________________________ OSGi Developer Mail List osgi-dev@mail.osgi.org https://mail.osgi.org/mailman/listinfo/osgi-dev