in jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/Whiteboard.java [514:573]
private OSGi<?> applications(
OSGi<CachingServiceReference<Application>> applications) {
OSGi<CachingServiceReference<Application>> validApplications =
onlyValid(
applications,
_runtime::addInvalidApplication,
_runtime::removeInvalidApplication);
OSGi<ApplicationReferenceWithContext> applicationsWithContext =
waitForApplicationContext(
validApplications,
_runtime::addContextDependentApplication,
_runtime::removeContextDependentApplication);
OSGi<ApplicationReferenceWithContext> highestRankedPerPath =
highestPer(
arwc -> just(arwc.getActualBasePath()),
applicationsWithContext,
t -> _runtime.addShadowedApplication(
t.getApplicationReference(), t.getActualBasePath()),
t -> _runtime.removeShadowedApplication(
t.getApplicationReference())
);
return highestRankedPerPath.flatMap(application ->
onlyGettables(
waitForReadyService(
just(application.getApplicationReference())),
_runtime::addNotGettableApplication,
_runtime::removeNotGettableApplication, _log).
recoverWith(
(t, e) ->
just(t).map(
ServiceTuple::getCachingServiceReference
).effects(
_runtime::addErroredApplication,
_runtime::removeErroredApplication
).then(
nothing()
)
).
effects(
__ -> {},
this::clearApplicationState
).flatMap(at ->
deployApplication(at, application.getContextReference()).foreach(
registrator ->
_runtime.setApplicationForPath(
getApplicationBase(
at.getCachingServiceReference()::getProperty),
at.getCachingServiceReference(),
registrator),
registrator ->
_runtime.unsetApplicationForPath(
getApplicationBase(
at.getCachingServiceReference()::getProperty))
)
));
}