Player:
MySQL:
Контроллер:
Как я понял не получается у моего объекта PlayerService законнектиться с БД.
Я порылся в конфигурации, нашёл URL для подключения к MySQL отключил БД, подключил заново, убедившись что URL верный. Не сработало.
Ниже привожу свои сервис и репозиторий
Игорь Евгеньевич
41 уровень
Тестовое задание. Контроллер.
Комментарии (44)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Justinian Judge в Mega City One Master
15 января 2022, 10:57
Скидывай стектрейсы на pastebin.com/codeshare.io .
Самое интересное, причина не влезла на скриншот, она детализирована внизу или правее в первых строках
И покажи свою Энтити Player
0
Игорь Евгеньевич
15 января 2022, 11:17
https://pastebin.com/t1Q3jyXW
0
Игорь Евгеньевич
15 января 2022, 11:33
Энтити прикрепил👆
А так же БД - из консоли всё работает.
Логин, пароль, URL и драйвер, всё согласно ТЗ
Папку config вообще не трогал (только просматривал), так же как и pom и весь фронэнд.
0
Justinian Judge в Mega City One Master
15 января 2022, 11:56
, хм, пишут Message Request processing failed; nested exception is org.springframework.transaction.CannotCreateTransactionException: Could not open JPA EntityManager for transaction; nested exception is org.hibernate.exception.JDBCConnectionException: Unable to acquire JDBC Connection
У тебя datasource подключен в Идее? Если да - попробуй там сделать select * from player; и скинь скриншот результата и настроек подключения к этому датасорсу.
Если не подключен - попробуй подключить.
И тогда проверить как написано выше.
0
Игорь Евгеньевич
15 января 2022, 11:59
0
Justinian Judge в Mega City One Master
15 января 2022, 12:10
Хм, выходит с бд все ок.
Попробуй еще в пакет Service вставить класс и запустить:
чтобы убедиться что с паролем все ок.
В стектрейсе пишут, что отправляют запрос на сервер но ничего не получают. Хм. 0
Игорь Евгеньевич
15 января 2022, 12:20
Пишет примерно тоже самое. (19-я строка соответствует твоей)
Но пароль и логин точно были "root" при установке MySQL
0
Justinian Judge в Mega City One Master
15 января 2022, 12:30
эт хорошо, что воспроизводится.
Попробуй в pom.xml поставить версию драйвера mysql 8.0.25, нажать на Refresh чтобы мавен обновил зависимости , проверишь в проекте - слева там где дерево проекта, чуть ниже external libraries, найди там mysql коннектор и убедись что версия новая, и попробуй еще раз.
0
Влад Java Developer в Tinkoff
15 января 2022, 12:30
Stackoverflow
Вот тут есть несколько возможных решений.
0
Justinian Judge в Mega City One Master
15 января 2022, 12:31
если бы пароль был другим, оно по идее другое бы писало, я так понимаю, там сам бы сервер БД отправил ответ - не тот пароль, а у тебя проблема, что оно не может наладить связь с БД в принципе.
0
Justinian Judge в Mega City One Master
15 января 2022, 12:42
Попробуй еще в том классе для тестирования подключения вот такие варианты:
и
может какой-то сработает 0
Игорь Евгеньевич
15 января 2022, 12:46
После смены версии mysql-connector в pom.xml
DatabaseTester отработал сразу:
А вот запуск Tomcat привёл снова к этому:
0
Justinian Judge в Mega City One Master
15 января 2022, 12:50
стектрейс куда-то сбрось
0
Игорь Евгеньевич
15 января 2022, 12:54
https://pastebin.com/8HAbXAva
0
Justinian Judge в Mega City One Master
15 января 2022, 12:55
+я обновил коммент выше - там три URL с разными вариациями доппараметров.
Закомментируй исходный вариант урл в AppConfig,
и попробуй три этих варианта - меняешь, запускаешь томкат, смотришь, меняешь, запускаешь томкат, смотришь,
пофиксит хоть один из них или нет
0
Игорь Евгеньевич
15 января 2022, 13:03
с первым же URL вот такой результат. Я так понимаю это успех? Остальные тоже сейчас попробую
0
Игорь Евгеньевич
15 января 2022, 13:09
Все три юэрла отработали одинаково.☝
но дело в том что это они демонстрируют по адресу: localhost:8080
ранее по этому адресу я наблюдал такое
А на страницу с http - 500 попадал при попытке вызвать свой метод, то есть по адресу:
localhost:8080/rest/players
0
Justinian Judge в Mega City One Master
15 января 2022, 13:14
отлично, остальные для галочки попробуй, любую рабочую оставишь.
Только запомни этот момент - и перед сдачей на валидацию - ты верни назад оригинальные настройки. В pom.xml и AppConfig
Ну и приступай к заданию, я советую в таком порядке, там где классы с тестами в пакете тест:
GetCountTest
DeletePlayerTest
GetPlayerTest
CreatePlayerTest
UpdatePlayerTest
GetAllTest
как-то так, от более простого к более сложному. Как все тесты по одной категории проходят, идешь к другой категории, чтобы работать над конкретной темой, и контроллировать успешность, а не все и сразу.
0
Игорь Евгеньевич
15 января 2022, 13:18
Учитывая тот факт что приложение в таком виде работать не будет, валидатор это не смутит?
0
Justinian Judge в Mega City One Master
15 января 2022, 14:37
В таком виде приложение не работает у тебя, за три года вопрос с именно такой проблемой по стажировке не припомню.
Валидация будет происходит на сервере, там будут настройки и окружение другие.
Сделаешь чтобы у тебя все тесты зеленые, вернешь настройки и отправишь на валидацию
0
Игорь Евгеньевич
16 января 2022, 09:42
Понял, спасибо. Я конечно сам бы пока не дошёл до такого решения проблемы.
0
Justinian Judge в Mega City One Master
16 января 2022, 11:14
Дошел бы, просто времени бы больше заняло
0
Andrey
14 января 2022, 20:18
По поводу монструозности кода. Данный путь верен, но код не сильно большой
0
Justinian Judge в Mega City One Master
14 января 2022, 13:21
да, пользователь взаимодействует с содержимым веб-страницы, в которой есть какая-то логика и элементы управления, Фронт-енд отвечает за обработку логики , отвечающую за взаимодействие с пользователем на этой страничке.
Получил команду-экшен-событие, что-то сделал, например - отправил запрос на бекенд.
Бекенд принял этот запрос в контроллере, по соответствующему адресу и методу HTTP (get, post etc) , обработал запрос, отправил ответ.
как обсуждали раннее - в джава коде - тебе стектрейс пишет наллпойнтер эксепшен на playService.
Он у тебя не заинжектен как бин в этот код.
+ убедись что в сервисе @Component стоит.
Но если что - тебе стектрейс напишет.
РестКонтроллер это композитная аннотация - @Controller, @ResponseBody, ты эту аннотацию поставил, она будет работать, то есть да, в твоем случае она нужна.
0
Justinian Judge в Mega City One Master
14 января 2022, 13:15
Иы все делаешь правильно - читаешь, разбираешься, гуглишь, спрашиваешь.
Но есть момент который нужно улучшить, тебе выдается стектрейс где тебе прям пишут просто и много раз - в какой строке что и почему не так.
Тебе нужно больше внимания обращать стектрейсу и подружиться с ним, тебе там пишут playService у тебя null, попробуй в Идее выполнить код:
это простая ошибка с которой ты бы справился, а если бы и нет - вопрос звучал иначе.
Поэтому продложай, но вот про эксепшены постарайся со стектрейсом погрузиться и начать с ним работать - это сэкономит огромное количество времени. Если вываливается стектрейс, не закрывай все и не думай что не так. Стектрейс это твоя помощь понять что конкретно не так.
Инициализируй playService как написали ниже 0
Игорь Евгеньевич
15 января 2022, 04:05
Спасибо за совет. К сожалению с вновь возникшей проблемой он не сильно помог.
Впрочем я по честному переводил стектрейс по одной строчке что бы найти зацепку.
Я переделал шапку, добавил новые скрины, что бы показать что случилось.
И ещё, по поводу аннотации @Component, её нужно применять вместе с @Service, или @Service как и @Controller сама собой подразумевает @Component но с более широким применением?
0
Justinian Judge в Mega City One Master
15 января 2022, 10:53
Это не панацея, это инструмент, источник допинформации, часто очень важной. В любом случае стектрейсы нужно уметь читать, знать когда и на какую глубину их анализировать.
Обычно самое важное ввверху , второе по важнсти это упоминания классов, которые в проекте, там будут номера строки, в которой возникло исключение
0
Justinian Judge в Mega City One Master
15 января 2022, 10:55
Да, Сервис и Контроллер это композитные аннотации которые включают в себя Компонент. Ты можешь поставить курсор на аннотацию и нажать F4 или ctrl плюс левой кнопкой мыши клик, и ты увидишь что там в ней
0
ilya
14 января 2022, 13:14
аннотация должна стоять @RestController
0
ilya
14 января 2022, 13:10
у тебя NPE вылетает, потому что playerService не проинициализирован
0
ilya
14 января 2022, 13:00
Playservice инициализация где?
Я его использовал в конструкторе Контроллера.
public PlayerController(Playservice playservice){
this.playservice = playservise;
}
0
Игорь Евгеньевич
15 января 2022, 04:09
Сделал ровно как у тебя, только ещё @Autowired на конструктор поставил. Теперь PlayerService инициализирован, но всё равно не работает. Пишет что JPA EntityManager не получается открыть. Я скриншоты в шапке. Ясно только одно, что проблема возникает на вызове findAll()
0
Greatsky future developer в future developer
16 января 2022, 12:08
А в чем беда у меня тоже что MSQL не дружит походу с IDE
0
Игорь Евгеньевич
16 января 2022, 12:27
Симптомы были следующие: приложение отрывалось но без таблицы, а при попытке обратиться к методу через URL кидало ошибку http 500.
Для начала убедись что у тебя то же самое.
В IDE открой консоль MySQL и проверь что у тебя в целом БД отвечает.
Отправь запрос: SELECT * FROM player;
Должно получиться такое:
Ну а целом всё решение тут в комментариях есть, Justinian дал URL для конфигурации MySQL и версию MySQL в pom.xml посоветовал изменить. Всё заработало.
0
Greatsky future developer в future developer
16 января 2022, 13:42
Да это работает
0
Justinian Judge в Mega City One Master
16 января 2022, 14:10
Во-первых не ИДЕ, а твой код.
Код и Идея работают по разному с БД. Идея через плагин - ГУИ клиент работы с БД со своим драйвером (как например у Игоря - работал плагин-датасорс, но не работал код), а код работает через драйвер в класспасе (пом.хмл) и настройки AppConfig
Кроме того, ты пишешь про пустой экран, что ты подразуемваешь под этим?
Если бы были проблемы с MySQL и твоим кодом, ты бы видел не пустой экран, а 100 строк стектрейса исключений.
0
Greatsky future developer в future developer
16 января 2022, 14:13
Да, просто таблица пустая. просто да наверное не верно выражаюсь, приношу извинения
0
Justinian Judge в Mega City One Master
16 января 2022, 14:22
та не за что извиняться, я просто демонстирую то о чем говорил - ты суетишься и делаешь много действий, мыслей, проверяешь гипотезы, не продумав и не обдумав, у тебя еще кода реализовано с гулькин нос, а ты уже ищешь проблемы в БД. У тебя есть тесты - они используют H2 базу данных, если они проходят - а на страничке ты видешь пусто это один разговор. Если ты даже тесты не запускаешь, то вопрос, как ты можешь вообще оценивать работу с БД, если ты не пишешь код и не запускаешь тесты.
Работай над delete, сделаешь его, пойдешь на getAll тесты и /rest/players фунациональность
0
Greatsky future developer в future developer
16 января 2022, 15:19
Кстати по запросу /rest/players тоже такая проблема
0
Justinian Judge в Mega City One Master
16 января 2022, 17:33
Пустая таблица выше - говорит о том, что с БД либо все ок, либо БД не задействована. То есть это ничего не говорит о БД - были бы проблемы , был бы стектрейс.
Второй скриншот - нужен полный стектрейс, причина не влезла на скриншот. Есть сайты pastebin.com/codeshare.io к примеру.
0
Greatsky future developer в future developer
16 января 2022, 17:44
https://pastebin.com/jpvwrVWQ
0
Justinian Judge в Mega City One Master
16 января 2022, 17:51
Это тебе такой стектрейс вывело или ты его в гугль переводчик затащил?
ну вот же, все написано.
Ты delete тесты/функциональность уже реализовал? 0
Greatsky future developer в future developer
16 января 2022, 18:01
Сори переводчик вшит в браузер перевел как только вставил перезалил https://pastebin.com/yNEsP8wA -" Ты delete тесты/функциональность уже реализовал? в процессе "
0
Justinian Judge в Mega City One Master
16 января 2022, 20:28
давай, пока что все твои проблемы связаны с тем, что собственно не выполнено задание.
Задание разбито на куски - можешь увидеть перечень файлов в пакете test, или в самом Описании задания. Вот и иди кусочек за кусочком, функиональность за функциональностью и фокусируйся на конкретном текущем.
0