package org.jai.search.client.impl;
import org.jai.search.model.ElasticSearchReservedWords;
import org.elasticsearch.client.Client;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.ImmutableSettings;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
//@Service(value="searchClientService")
public class SearchClientServiceImpl // implements SearchClientService
{
private static final Logger logger = LoggerFactory.getLogger(SearchClientServiceImpl.class);
// private String searchServerClusterNodes = "localhost:9300";
private final String searchServerClusterName = "jaidev";
private Client client;
public Client getClient()
{
if (client == null)
{
client = createClient();
}
return client;
}
// @PostConstruct
protected Client createClient()
{
if (client == null)
{
if (logger.isDebugEnabled())
{
logger.debug("Creating client for Search!");
}
// Try starting search client at context loading
try
{
final Settings settings = ImmutableSettings.settingsBuilder()
.put(ElasticSearchReservedWords.CLUSTER_NAME.getText(), searchServerClusterName).build();
TransportClient transportClient = new TransportClient(settings);
transportClient = transportClient.addTransportAddress(new InetSocketTransportAddress("localhost", 9300));
if (transportClient.connectedNodes().size() == 0)
{
logger.error("There are no active nodes available for the transport, it will be automatically added once nodes are live!");
}
client = transportClient;
}
catch (final Exception ex)
{
// ignore any exception, dont want to stop context loading
logger.error("Error occured while creating search client!", ex);
}
}
return client;
}
public void addNewNode(final String name)
{
final TransportClient transportClient = (TransportClient) client;
transportClient.addTransportAddress(new InetSocketTransportAddress(name, 9300));
}
public void removeNode(final String name)
{
final TransportClient transportClient = (TransportClient) client;
transportClient.removeTransportAddress(new InetSocketTransportAddress(name, 9300));
}
}