java-park-mail-ru / 2016-02-Lime-Pineapple

мультиплеерный whack-a-mole
0 stars 2 forks source link

Работа кода #5

Open d-frolov opened 8 years ago

d-frolov commented 8 years ago

Сервер стартует, но уже добавить пользователя я не могу. Он ошибочно возвращает мне ошибку. Хотя в реальности добавляет данные в map Проверьте работу api

d-frolov commented 8 years ago

Запускаем сервер, пытаемся добавить пользователя В логе две записи:

15:40:19.963 [qtp1523553211-24] ERROR server.rest.RestAppV1 - [+] Started application... 15:40:23.924 [qtp1523553211-24] ERROR class server.rest.UserServlet - Initialized 15:40:23.966 [qtp1523553211-24] ERROR server.rest.RestAppV1 - [+] Started application... 15:40:23.966 [qtp1523553211-24] ERROR class server.rest.UserServlet - Initialized

ну черт с ним, с error, напишите лучше logger.info(...) Но почему два раза? У вас дважды инициализируется AccountService.

И посмотрите когда проиходит эта инициализация. При первом вызове сервлета. O_o АккаунтСервис должен инициализироваться в процессе старта сервера, но никак не во время работы.

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

Для начала проверьте весь функционал по api

FakeEmperor commented 8 years ago

Да, при первом вызове сервлета :) Когда у RestAppV1 вызывается getSingletons():

@Override
public Set<Object> getSingletons() {
        logger.error("[+] Started application...");
        final HashSet<Object> objects = new HashSet<>();
        AccountService accountService = new db.services.impl.ExampleAccountService();
        objects.add(new UserServlet(accountService));
        objects.add(new SessionServlet(accountService));

        return objects;
 }

logger.error - это остаток от прошлой баги фичи, когда в джар не копировались настройки log4j2 и логгер игнорил любые записи в лог, кроме ошибок. Странно, что два лога за раз, я посмотрю, что там такое.

Хорошо, тогда посмотрим на инспекции и приведем в порядок кодстайл.

FakeEmperor commented 8 years ago

Просто у меня были проблемы с тем, как запихнуть два сервлета в один хэндлер, и я нашел на просторах интернетов способ, как это сделать:

final ServletHolder api_v1Holder = new ServletHolder(ServletContainer.class);
api_v1Holder.setInitParameter("javax.ws.rs.Application",RestAppV1.class.getCanonicalName());
contextHandler.addServlet(api_v1Holder,"/api/v1/*");

Я уверен, что это можно сделать лучше, но не знаю, как это сделать.

d-frolov commented 8 years ago

https://park.mail.ru/blog/topic/4443/

FakeEmperor commented 8 years ago

Спасибо, сделаем через контекст.