package org.ow2.choreos.ee.bus; import java.util.List; import org.apache.log4j.Logger; import org.ow2.choreos.chors.datamodel.Choreography; import org.ow2.choreos.services.datamodel.DeployableService; import org.ow2.choreos.services.datamodel.ServiceDependency; import org.ow2.choreos.services.datamodel.ServiceInstance; public class TopologyConfigurator { private Choreography chor; private Logger logger = Logger.getLogger(TopologyConfigurator.class); /** * Configure topology (add neighbors) among deployed EasyESB nodes. * Note: This action is not related with EasyESB nodes used to run CDs. * * @param chor * Choreography whose service instances already have the * easyEsbNodeAdminEndpoint property */ public TopologyConfigurator(Choreography chor) { this.chor = chor; } /** * Configures a topology of EasyESB nodes according to the services * dependencies within a choreography. The topology is configured by * successive invocations to the addNeighbour operation on esb nodes. * * @throws TopologyNotConfigureException */ public void configureTopology() throws TopologyNotConfigureException { for (DeployableService service : chor.getDeployableServices()) { for (ServiceInstance instance : service.getInstances()) { EasyESBNode esbNode = getESBNode(instance); List<ServiceDependency> dependencies = service.getSpec().getDependencies(); if (dependencies != null) { for (ServiceDependency dependency : dependencies) { DeployableService providingService = chor.getDeployableServiceBySpecName(dependency .getServiceSpecName()); for (ServiceInstance providingInstance : providingService.getInstances()) { EasyESBNode neighbourEsbNode = getESBNode(providingInstance); try { esbNode.addNeighbour(neighbourEsbNode); neighbourEsbNode.addNeighbour(esbNode); } catch (EasyESBException e) { throw new TopologyNotConfigureException(); } } } } } } } private EasyESBNode getESBNode(ServiceInstance instance) { String adminEndpoint = instance.getProxification().getEasyEsbNodeAdminEndpoint(); EasyESBNode esbNode = ESBRegister.getEsbNode(adminEndpoint); if (esbNode == null) { logger.error("Could not retrieve EasyESBNode " + adminEndpoint + " from ESB Register"); throw new IllegalStateException(); } return esbNode; } }