mvn clean package
Для демонстрации использован докер. Запуск:
mvn docker-compose:up
Запуск БД для тестовых целей (из директории docker):
docker-compose up postgres
* в контейнере для этого открыт порт 5432 ##Описание
####Ввод и проверка формы Форма отпавляется в webapp повторно валидируется (в случае неудачи, возвращиется обратно), затем сформированный объект отправляется в testejb, там он помещается в очередь txrequest и сервис ждет ответа из очереди txresponse (таймаут выставлен на 5 с из головы, используется селектор, чтобы получить ответ только на отправленное сообщение). Из очереди txrequest MDB в processejb достает сообщение, и с помощью hibernate JPA сохранаяет объект в БД, затем отправляет ответ в очередь txresponse (request-reply pattern). Сервис из testejb получает это сообщение и выдает результат в лог.
* приложение стратует с парметром hibernate.hbm2ddl.auto = create.
* во второй части не указано как должен вести себя веб сервис после вызова метода testejb, поэтому после прохождения валидаций он возвращается обратно на страницу создания ордера с сообщением 'success' независио от результатов работы других сервисов. (было удобно для создания несколькоих ордеров пачкой).
* order_id в форме немного странное поле. По хорошему приложение само должно присваивать id сущностям, которые хранаться в БД (id введение вручную могут дублироваться и меняться со временем), поэтому в EOrder`e созданополе id.
* веб-сервис не должен напрямую ходить в базу (описано в первой части) для получения списка заказов, этот функционал вынесен на самый нижний уровень (processejb) и веб-серис обращается к нему (т.к. testejb общается с processejb только через очередь) (не самое лучшее решение, но это сделано, для сохранения возможности получение всего списка заказов на фронте).
* request-reply pattern можно было бы проще реализовать через apache camel. Для этого требуется любо скачивать и устанавливать очень "тяжелый" патч, либо использовать кастомнуй докер образ (wildflyext/wildfly-camel).
Endpoint: http://localhost:8080/testweb/order/list
Запрос отправляется в testweb, testweb обращается к репозиторию из processejb за всеми заказами. В идеале это должно быть реализовано через пагинацию, чтобы не тянуть всю базу (не имеет смысла реализовывать в тестовом задании).