Необходимо разработать сервис, который с заданной периодичностью забирает информацию о погоде в трех произвольных городах с двух произвольных серверов, предоставляющих API для получения информации о погоде по протоколу REST или SOAP (погодные сервисы можно выбрать на свое усмотрение). Сервис должен представлять простейшее web-приложение написанное на java (любой версии) и размещаемое на сервере приложений (можно использовать любой сервер приложений). Информация о погоде (текущая температура, влажность, давление, погодные явления и т.п.) должна сохраняться в хранилище. Разработать web-интерфейс для просмотра текущей погоды и данных в базе. Критерии приемки:
- код приложения должен храниться в GitHub или BitBucket;
- в качестве хранилища использовать какую-либо embedded-DB;
- должны присутствовать тесты;
- должен присутствовать хотя бы одни rest-сервис;
- нельзя использовать Spring-Boot, Spring Data JPA.
Сервлет располагается на сервере Tomcat7. Данные забираются с периодичностью 30 минут с сервисов:
- api.openweathermap.org
- api.apixu.com для городов: Екатеринбург, Москва, Лондон. Данные записываются в объект класса-модели WeatherData. Объекты сохраняются в базу данных SQLite с использованием ORM-фреймворка Hibernate. Циклический опрос осуществляется в потоке, запускающемся при ининциализации сервлета. Сервлет запускается при старте работы сервера. Результат отображается на странице index.jsp. Также возможна фильтрация данных, содержащихся в БД по следующим критериям:
- с определённой даты
- до определённой даты
- по интересующему городу Фильтрация организована путём отправки POST-запроса на сервлет, в результате которого сервлет возвращает данные, отфлитрованные по заданным критериям.
Сервис apixu.com оказался менее надёжным, чем openweathermap.org, поскольку в результате работы на протяжении около 10 часов, периодически, на запрос отдавал 504 ошибку, что отразилось на данных в БД.