2014-09-18 3 views
0

Это вопрос структуры (что лучше всего использовать).Структура клиента Java Elasticsearch

У меня есть 50 сервлетов для доменного сайта, которым я управляю, где клиент делает js-вызовы в Java Servlet, который в свою очередь вызывает ElasticSearch, а затем сервлет отвечает клиенту.

В каждом из моих сервлетов сразу после имени класса я создаю статические настройки и конфигурацию клиента для моего ES-соединения. Это связано с тем, что в каждом сервлете могут быть два или более метода, которые называют один и тот же ES-кластер, и я не хочу создавать эту конфигурацию в каждом методе.

/** 
* Servlet implementation class Results 
*/ 
@WebServlet("/Results") 
public class Results extends HttpServlet { 
    private static final long serialVersionUID = 1L; 
    Settings settings = ImmutableSettings.settingsBuilder().put("cluster.name", "elastictest").build(); 
    Client client = new TransportClient(settings).addTransportAddress(new InetSocketTransportAddress("143.79.236.xxx", 9300)); 

ОДНАКО, теперь мне интересно, должен ли я сделать это 50 раз (1 конфиг в верхней части каждого класса)? Или я создаю один новый класс java с тем же самым конфигом и в каждой ссылке сервлета, что один новый класс java? Это экономит память и улучшает практику?

**--Inside name.java --** 

public static Settings settings = ImmutableSettings.settingsBuilder().put("cluster.name", "elastictest").build(); 
public static Client client = new TransportClient(settings).addTransportAddress(new InetSocketTransportAddress("143.79.236.xxx", 9300)); 

--Inside ВСЕ методы в 50 сервлетов ссылки name.client instead--

SearchResponse response = name.client.prepareSearch().setQuery(...... 

Кроме того, в нижней части моего doPost (после того, как я послал printWriter.println (результаты)) Я закрываю клиента? client.close();

спасибо.

ответ

1

Я не буду хранить эти объекты в классе. Я думаю, что лучше открыть клиентское соединение только в начале вашего doPost и закрыть его в конце. Таким образом, ресурсы памяти и сети принимаются только тогда, когда это необходимо, и вам не нужно заботиться о сохранении соединения в сети, сохраняя данные в хорошем состоянии.

Помимо этого, если вы хотите избежать дублирования кода во всех своих классах, просто создайте новый класс (вид «помощник» или «делегировать» или назовите его, как вам нравится), который содержит метод, который делает задание соединения и возврат клиента. Опять же, без какого-либо члена класса, просто все в методе.

Вообще, если вы хотите немного больше теории, я предлагаю читать на лицо без программирования Advantages of stateless programming?

+0

Это делает много смысла, я никогда не думал. Спасибо!^1 – Chris

Смежные вопросы