in cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ContainerState.java [311:349]
public <T, R> Promise<T> submit(Op op, Callable<T> task) {
try {
switch (op.mode) {
case CLOSE: {
// always perform close synchronously
_log.debug(l -> l.debug("CCR submit {}", op));
return _promiseFactory.resolved(task.call());
}
case OPEN:
// when closing don't do perform any opens
// also, don't log it since it's just going to be noise
if (_closing.get()) {
return _promiseFactory.resolved((T)new Object());
}
}
}
catch (Exception e) {
return _promiseFactory.failed(e);
}
_log.debug(l -> l.debug("CCR submit {}", op));
Promise<T> promise = _promiseFactory.submit(task);
for (Entry<CheckedCallback<?, ?>, Deferred<?>> entry : _callbacks.entrySet()) {
CheckedCallback<T, R> cc = (CheckedCallback<T, R>)entry.getKey();
if (cc.test(op)) {
((Deferred<R>)entry.getValue()).resolveWith(promise.then(cc, cc)).then(
s -> {
_callbacks.remove(cc);
return s;
},
f -> _callbacks.remove(cc)
);
}
}
return promise;
}