- Разработать схему хранения авторизационных данных клиентов и их балансов.
- Номер телефона – мобильный, 10 цифр. Пароль должен храниться в защищенном виде. Балансы – с точность до копеек.
- Создать сервлет, принимающий xml-запросы методом POST, который может обрабатывать 2 запроса (см. ниже). Обеспечить целостность данных в БД. Так же учитывать, что к сервлету могут обращаться несколько пользователей одновременно, с одинаковыми запросами и данными в запросах. Регистрация нового агента: Запрос:
<?xml version="1.0" encoding="utf-8"?>
<request>
<request-type>new-agt</request-type>
<login>1234567890</login>
<password>password</password>
</request>
Ответ:
<?xml version="1.0" encoding="utf-8"?>
<response>
<result-code>0</result-code>
</response>
Где код ошибки: 0 – все хорошо 1 – такой агент уже зарегистрирован 2 – неверный формат телефона 3 – плохой пароль 5 – другая ошибка повторите позже
Получение баланса: Запрос:
<?xml version="1.0" encoding="utf-8"?>
<request>
<request-type>agt-bal</request-type>
<login>1234567890</login>
<password>password</password>
</request>
Ответ:
<?xml version="1.0" encoding="utf-8"?>
<response>
<result-code>0</result-code>
<bal>100.00</bal>
</response>
Коды ошибок дописать на свое усмотрение.
Сервлет реализован на языке Java ядра 1.8 в IDE Eclipse J2EE Oxygen. Также использовались фреймворки Spring, MyBatis, Log4J, JacksonXML. Для хранения данных используется СУБД MySQL, БД инициализиаруется автоматически посредством JDBC. Приложение автономно, с встроенным Tomcat сервером приложений. Из шаблонов проектирования использовался синглтон для соответствующих классов. Также использовались аннотации и наследование. Согласно канонам статика (константы) вынесены в файл конфигурации SpringBoot приложения. Для валидации значений использовались регулярные выражения. Объекты из БД получались в виде коллекий объектов. Кратко документировано в формате Javadoc.
На прослушивающий запросы контроллер XmlResponseController поступает XML post запрос Request заданного формата. Далее согласно запросу определяется его обработка. Обработчик запроса валидирует данные запроса (PasswordValidator, PhoneValidator) и выполняет саму обработку. Далее отвечает на запрос ответом Response. Для взаимодействия с СУБД используется менеджер баз данных DatabaseManager, который в свою очередь использует маппер ClientMapper. Client бизнес модель объекта данных. Согласно требованиям тестирование производилось JMeter (проектный файл MobileService test.jmx прилагается), для исключения очереди были исключены приватные объекты в полях сервлета, технология Spring сама по себе гарантирует однопроцессорную многопоточность. В коде имеются комментарии. Также в папке депозитария doc есть JavaDoc документация.
Программные требования:
- доступ к интернет
- Oracle JavaSE 1.8
- Git
- Maven
- MySQL
Действия для запуска:
- Создать папку для проекта (далее ПП)
- Запустить консоль ОС
- Перейти в ПП
- Клонировать проект с публичного GitHub сервера выполнив команду git clone https://github.com/Zhassulan/balance.git
- для инициализаии БД надо прописать пользователя с правами на создание базы данных на сервере СУБД в файле ..ПП\MobileService\src\main\resources\application.properties параметр spring.datasource.username и spring.datasource.password. Будет создана база mobile или если она существует то добавятся таблицы. Схему можно посмотреть в файле ..ПП\MobileService\src\main\resources\schema-mysql.sql.
- если сервер СУБД MySQL не локальный то указать сервер в параметрах spring.datasource.url и mysql.url, заменив слово localhost на ваш сервер
- в консоли войти в ..\ПП\balance\MobileService (на уровень pom.xml файла)
- скомпилировать приложение выполнив команду mvn compile
- скачать\собрать зависимости для приложения выполнив команду mvn package
- запустить приложение командой mvn spring-boot:run
- отправить xml post запрос в формате http://localhost:8080/xml/agt-bal например, можно через SoapUI, проектый файл MobileService-soapui-project.xml прилагается