package org.ow2.choreos.ee.bus.selector; import java.util.List; import org.ow2.choreos.ee.bus.EasyESBNode; import org.ow2.choreos.ee.config.ChoreographyDeployerConfiguration; import org.ow2.choreos.ee.config.CloudConfiguration; import org.ow2.choreos.ee.nodes.NPMFactory; import org.ow2.choreos.nodes.NodePoolManager; import org.ow2.choreos.nodes.datamodel.ResourceImpact; import org.ow2.choreos.selectors.LimitedRoundRobinSelector; import org.ow2.choreos.selectors.NotSelectedException; public class LimitedRoundRobinESBNodeSelector implements ESBNodeSelector { private static final String ESB_NODES_LIMIT_PROPERTY = "ESB_NODES_LIMIT"; private LimitedRoundRobinSelector<EasyESBNode, ResourceImpact> selector; public LimitedRoundRobinESBNodeSelector() { int nodeLimit = this.getNodeLimit(); NodePoolManager npm = NPMFactory.getNewNPMInstance(CloudConfiguration.DEFAULT); ESBNodeFactory factory = new ESBNodeFactory(npm); ESBNodeRetriever retriever = new ESBNodeRetriever(); this.selector = new LimitedRoundRobinSelector<EasyESBNode, ResourceImpact>(nodeLimit, retriever, factory); } private int getNodeLimit() { int nodeLimit; try { nodeLimit = Integer.parseInt(ChoreographyDeployerConfiguration.get(ESB_NODES_LIMIT_PROPERTY)); } catch (NumberFormatException e) { final int INFINITE_NODES = 100000000; nodeLimit = INFINITE_NODES; } return nodeLimit; } @Override public List<EasyESBNode> select(ResourceImpact requirements, int objectsQuantity) throws NotSelectedException { return this.selector.select(requirements, objectsQuantity); } }