DATAES-9 : multiple elasticsearch cluster nodes not getting parsed if using property file

This commit is contained in:
Mohsin Husen 2013-05-13 17:51:00 +01:00
parent 7df712a3b6
commit 151c62361c
2 changed files with 61 additions and 63 deletions

View File

@ -27,83 +27,83 @@ import org.springframework.util.Assert;
import java.util.Properties; import java.util.Properties;
import static org.apache.commons.lang.StringUtils.substringAfter; import static org.apache.commons.lang.StringUtils.*;
import static org.apache.commons.lang.StringUtils.substringBefore;
import static org.elasticsearch.common.settings.ImmutableSettings.settingsBuilder; import static org.elasticsearch.common.settings.ImmutableSettings.settingsBuilder;
/** /**
* TransportClientFactoryBean * TransportClientFactoryBean
* *
* @author Rizwan Idrees * @author Rizwan Idrees
* @author Mohsin Husen * @author Mohsin Husen
*/ */
public class TransportClientFactoryBean implements FactoryBean<TransportClient>, InitializingBean, DisposableBean { public class TransportClientFactoryBean implements FactoryBean<TransportClient>, InitializingBean, DisposableBean {
private static final Logger logger = LoggerFactory.getLogger(TransportClientFactoryBean.class); private static final Logger logger = LoggerFactory.getLogger(TransportClientFactoryBean.class);
private String[] clusterNodes; private String clusterNodes;
private TransportClient client; private TransportClient client;
private Properties properties; private Properties properties;
static final String COLON = ":"; static final String COLON = ":";
static final String COMMA = ",";
@Override @Override
public void destroy() throws Exception { public void destroy() throws Exception {
try { try {
logger.info("Closing elasticSearch client"); logger.info("Closing elasticSearch client");
if (client != null) { if (client != null) {
client.close(); client.close();
} }
} catch (final Exception e) { } catch (final Exception e) {
logger.error("Error closing ElasticSearch client: ", e); logger.error("Error closing ElasticSearch client: ", e);
} }
} }
@Override @Override
public TransportClient getObject() throws Exception { public TransportClient getObject() throws Exception {
return client; return client;
} }
@Override @Override
public Class<TransportClient> getObjectType() { public Class<TransportClient> getObjectType() {
return TransportClient.class; return TransportClient.class;
} }
@Override @Override
public boolean isSingleton() { public boolean isSingleton() {
return false; return false;
} }
@Override @Override
public void afterPropertiesSet() throws Exception { public void afterPropertiesSet() throws Exception {
buildClient(); buildClient();
} }
protected void buildClient() throws Exception { protected void buildClient() throws Exception {
client = new TransportClient(settings()); client = new TransportClient(settings());
Assert.notEmpty(clusterNodes, "[Assertion failed] clusterNodes settings missing."); Assert.hasText(clusterNodes, "[Assertion failed] clusterNodes settings missing.");
for (String clusterNode : clusterNodes) { for (String clusterNode : split(clusterNodes,COMMA)) {
String hostName = substringBefore(clusterNode, COLON); String hostName = substringBefore(clusterNode, COLON);
String port = substringAfter(clusterNode, COLON); String port = substringAfter(clusterNode, COLON);
Assert.hasText(hostName, "[Assertion failed] missing host name in 'clusterNodes'"); Assert.hasText(hostName, "[Assertion failed] missing host name in 'clusterNodes'");
Assert.hasText(port, "[Assertion failed] missing port in 'clusterNodes'"); Assert.hasText(port, "[Assertion failed] missing port in 'clusterNodes'");
logger.info("adding transport node : " + clusterNode); logger.info("adding transport node : " + clusterNode);
client.addTransportAddress(new InetSocketTransportAddress(hostName, Integer.valueOf(port))); client.addTransportAddress(new InetSocketTransportAddress(hostName, Integer.valueOf(port)));
} }
client.connectedNodes(); client.connectedNodes();
} }
private Settings settings() { private Settings settings() {
if (properties != null) { if (properties != null) {
return settingsBuilder().put(properties).build(); return settingsBuilder().put(properties).build();
} }
return settingsBuilder().put("client.transport.sniff", true).build(); return settingsBuilder().put("client.transport.sniff", true).build();
} }
public void setClusterNodes(String[] clusterNodes) { public void setClusterNodes(String clusterNodes) {
this.clusterNodes = clusterNodes; this.clusterNodes = clusterNodes;
} }
public void setProperties(Properties properties) { public void setProperties(Properties properties) {
this.properties = properties; this.properties = properties;
} }
} }

View File

@ -33,8 +33,6 @@ import static org.apache.commons.lang.StringUtils.split;
public class TransportClientBeanDefinitionParser extends AbstractBeanDefinitionParser { public class TransportClientBeanDefinitionParser extends AbstractBeanDefinitionParser {
private static final String SEPARATOR_CHARS = ",";
@Override @Override
protected AbstractBeanDefinition parseInternal(Element element, ParserContext parserContext) { protected AbstractBeanDefinition parseInternal(Element element, ParserContext parserContext) {
BeanDefinitionBuilder builder = BeanDefinitionBuilder.rootBeanDefinition(TransportClientFactoryBean.class); BeanDefinitionBuilder builder = BeanDefinitionBuilder.rootBeanDefinition(TransportClientFactoryBean.class);
@ -43,7 +41,7 @@ public class TransportClientBeanDefinitionParser extends AbstractBeanDefinitionP
} }
private void setClusterNodes(Element element, BeanDefinitionBuilder builder) { private void setClusterNodes(Element element, BeanDefinitionBuilder builder) {
builder.addPropertyValue("clusterNodes", split(element.getAttribute("cluster-nodes"), SEPARATOR_CHARS)); builder.addPropertyValue("clusterNodes", element.getAttribute("cluster-nodes"));
} }
private AbstractBeanDefinition getSourcedBeanDefinition(BeanDefinitionBuilder builder, Element source, private AbstractBeanDefinition getSourcedBeanDefinition(BeanDefinitionBuilder builder, Element source,