public Promise submit()

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;
	}