public void handle()

in obr/src/main/java/org/apache/karaf/cellar/obr/ObrBundleEventHandler.java [115:174]


    public void handle(ClusterObrBundleEvent event) {

        // check if the handler is ON
        if (this.getSwitch().getStatus().equals(SwitchStatus.OFF)) {
            LOGGER.debug("CELLAR OBR: {} switch is OFF", SWITCH_ID);
            return;
        }

        if (groupManager == null) {
        	//in rare cases for example right after installation this happens!
        	LOGGER.error("CELLAR OBR: retrieved cluster event {} while groupManager is not available yet!", event);
        	return;
        }

        // check if the group is local
        if (!groupManager.isLocalGroup(event.getSourceGroup().getName())) {
            LOGGER.debug("CELLAR OBR: node is not part of the event cluster group {}", event.getSourceGroup().getName());
            return;
        }

        // check if it's not a "local" event
        if (event.getLocal() != null && event.getLocal().getId().equalsIgnoreCase(clusterManager.getNode().getId())) {
            LOGGER.trace("CELLAR OBR: cluster event is local (coming from local synchronizer or listener)");
            return;
        }

        String bundleId = event.getBundleId();
        boolean deployOptional = event.getDeployOptional();
        boolean start = event.getStart();
        try {
            if (isAllowed(event.getSourceGroup(), Constants.BUNDLES_CONFIG_CATEGORY, bundleId, EventType.INBOUND)) {
                Resolver resolver = obrService.resolver();
                String[] target = getTarget(bundleId);
                Resource resource = selectNewestVersion(searchRepository(target[0], target[1]));
                if (resource == null) {
                    LOGGER.warn("CELLAR OBR: bundle {} unknown", target[0]);
                    return;
                }
                resolver.add(resource);

                if ((resolver.getAddedResources() != null) &&
                        (resolver.getAddedResources().length > 0)) {
                    if (resolver.resolve(deployOptional ? 0 : Resolver.NO_OPTIONAL_RESOURCES)) {
                        resolver.deploy(start ? Resolver.START : 0);
                    }
                } else {
                    Reason[] reqs = resolver.getUnsatisfiedRequirements();
                    if (reqs != null && reqs.length > 0) {
                        LOGGER.warn("CELLAR OBR: unsatisfied requirement(s): ");
                        for (int reqIdx = 0; reqIdx < reqs.length; reqIdx++) {
                            LOGGER.warn("  {}", reqs[reqIdx].getRequirement().getFilter());
                            LOGGER.warn("    {}", reqs[reqIdx].getResource().getPresentationName());
                        }
                    } else LOGGER.warn("CELLAR OBR: could not resolve targets");
                }
            } else LOGGER.trace("CELLAR OBR: bundle {} is marked as BLOCKED INBOUND for cluster group {}", bundleId, event.getSourceGroup().getName());
        } catch (Exception e) {
            LOGGER.error("CELLAR OBR: failed to handle bundle event {}", bundleId, e);
        }
    }