Лабораторная работа 2
В ранее разработанный веб-сервис (standalone-реализацию, см. ЛР1 часть 1) необходимо добавить методы для создания, изменения и удаления записей из таблицы БД.
Метод создания должен принимать значения полей новой записи, методы изменения и удаления - идентификатор изменяемой/удаляемой записи, методы изменения и удаления возвращают статус операции.
Соответствующим образом необходимо обновить клиентское приложение.
Получим исходные классы из первой лабораторной работы, в которой было реализовано standalone-приложение. База данных PostgreSQL также взята из первой лабораторной работы. Настройки окружения разработки описаны также в 1 лабораторной работе.
Необходимо добавить методы:
- Создания - CREATE: принимает значения полей новой записи в качестве аргументов;
- Получения / Чтения - READ: реализован в первой работе и позволяет находить записи по значениям их полей;
- Изменения - UPDATE: принимает идентификатор изменяемой записи, возвращает статус операции;
- Удаления - DELETE: принимает идентификатор удаляемой записи, возвращает статус операции.
Изначально сгенерируем новые классы по WSDL-описанию:
wsimport -keep -p com.labs.client.generated http://localhost:8080/CRUDService?wsdl
Далее необходимо внести изменения в класс WebServiceClient. Необходимо добавить возможность выбора метода и передачи соответствующих параметров через командную строку. В результате необходимо выводить сообщение о статусе операции для создания, изменения и удаления объектов.
Для разделения методов в классе WebServiceClient создадим под каждую операцию отдельны метод, т.е. созданный в первой лабораторной работе метод main теперь будет в зависимости от указанного в консоли запроса (CREATE - метод createStudentRow, READ - метод readStudentRowsByFields, UPDATE - метод updateStudentRowById, DELETE - метод deleteStudentRowById) вызывать соответствующий метод класса WebServiceClient, который и будет выполнять необходимый запрос. При выборе READ, будет вызван метод для поиска записей таблицы по указанным полям. Остальные методы будут соответствовать созданию, изменению и удалению записей из таблицы БД.
Изначально перенесем разработанный в первой лабораторной работе функционал в метод readStudentRowsByFields.
Метод будет private static, чтобы оставить доступ только из метода main. В качестве аргумента будет подаваться
объект CRUDService studentService
, а в результате работы будем получать список students, который будет
выведен в консоль без возврата return, т.е. данный метод будет void.
Выбор требуемой операции производится при помощи ввода в консоль: CREATE, READ, UPDATE, DELETE. Для этого используется метод main(), который определяет точку входа в клиентское приложение.
Если название метода указано неверно, то дается новая попытка выбора. Для выхода необходимо ввести exit
.
После выбора метода осуществляется соответствующий вызов:
- CREATE -> createStudentRow(CRUDService studentService): создание новой записи в таблице, для чего потребуется ввести значения полей. Если одно из значений введено не верно, то в консоль будет выведено сообщение "Your request is incorrect!". Проверка идет на возможность приведения полученных значений для полей
age, student_id
к целым числам, что обёрнуто в try-catch для исключения NumberFormatException, а также идет проверка всех полей на пустую строку и строку из пробелов (метод trim()). По результатам в консоль выводится сообщение о статусе операции, который может принимать значения "Bad" (что-то пошло не так) и "Good" (операция выполнена). - READ -> readStudentRowsByFields(CRUDService studentService): метод был описан подробно в первой лабораторной работе.
- UPDATE -> updateStudentRowById(CRUDService studentService): изменение записи в таблице. В консоли будет запрос на ввод идентификатора записи, которую требуется изменить, а также необходимых полей для изменения, после чего будет также запрос на значения данных полей. Далее идёт проверка на наличие значений, а также возможность приведения полей
age, student_id
к целым числам, что обёрнуто в try-catch для исключения NumberFormatException. Если определенные поля не были введены, то у них остаются прежние значения. Если введенные поля содержат пустые строки и строки из пробелов, либо не выбрано никаких полей для изменения, то выводится соответствующее сообщение в консоль. Дополнительно сделан запрос на подтверждение внесения изменений ввиду того, что подобное действие необратимо. Если идентификатор записи в таблице отсутствует, то изменения не будут внесены. В результате выполнения операции также будет выведен её статус. - DELETE -> deleteStudentRowById(CRUDService studentService): удаление записи из таблицы. При выполнении будет запрос на ввод идентификатора записи rowID. Далее идет проверка на пустую строку и строку из пробелов, а также перехват исключения NumberFormatException, если не получилось привести введенное значение к целому числу. Если в таблице в БД нет записи с указанным идентификатором, то изменения не будут внесены, но операция вернет статус "Good", т.к. строка отсутствует в таблице,, что можно сравнить с её удалением.