Java-сервлет со словарем в памяти, который является потокобезопасным и может быть повторно инициализирован - PullRequest
2 голосов
/ 28 октября 2011

Я хочу создать очень простой сервлет, который будет читать данные, отправленные http в одной конечной точке URL, например:

http://localhost:8080/post

Затем потребуется:

1. authenicate the request based appId and userId that was posted
2. if authentication went ok, gather the form fields and save it to the db.

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

Возможно, у меня будет 10K-50K пользователей, и я не хочу выполнять поиск в базе данных для аутентификации.

Я просто хочу сохранить эту информацию в словаре / хэше, она должна быть поточно-ориентированной.

Если регистрируется новый пользователь, я должен иметь возможность аннулировать этот словарь в памяти и перезагрузить приложение/ пользовательские данные из mysql, но только если регистрируется новый человек.

Спецификации требуют, чтобы это работало под большой нагрузкой, до 5 000 запросов в секунду.

Я новичок в Java ипросто экспериментирую, как это можно сделать в java / servlets.

Как я могу иметь этот словарь в качестве поля статического типа, доступного для метода doGet моего сервлета, и в то же время иметь возможность повторно инициализировать его при присоединении нового пользователя.

Вот простой сервлет, который я хочу построить поверх:

package test;

import java.io.*;

import javax.servlet.http.*;
import javax.servlet.*;

public class HelloServlet extends HttpServlet {
  public void doGet (HttpServletRequest req,
                     HttpServletResponse res)
    throws ServletException, IOException
  {
    PrintWriter out = res.getWriter();

    out.println("Hello, world!");
    out.close();
  }
}

Пожалуйста, не принимайте от меня многого, фрагменты кода очень важны для настройки этого словаря.

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

1 Ответ

2 голосов
/ 28 октября 2011

Ваш пост немного освещает, с чем конкретно у вас возникают проблемы, но класс ConcurrentHashMap , вероятно, будет вам интересен.

Это может быть статическое поле, и затем вы можете сохранять и извлекать необходимую информацию, используя методы get и put.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...