4.1.3. Использование сервисов среднего слоя

В предыдущем разделе мы рассмотрели инкапсуляцию бизнес-логики в бине клиентского уровня. Теперь мы пойдем дальше и поместим нашу логику в наиболее подходящее место: на средний слой. Сделав это, мы достигнем следующих целей:

  • Наши бизнес-методы будут доступны клиентам всех типов, включая Polymer UI.

  • Мы сможем использовать API, доступный только на middleware: EntityManager, transactions, и т.п.

Чтобы вызвать бизнес-метод среднего слоя, необходимо создать сервис. Studio может помочь в создании заготовки сервиса:

  • Переключитесь на вкладку Middleware и нажмите New > Service.

  • Измените имя интерфейса сервиса на DiscountService. Имена класса и самого сервиса будут изменены соответственно. Нажмите OK или Apply.

  • Нажмите IDE и откройте интерфейс сервиса в IDE. Создайте новый метод и реализуйте его в классе сервиса.

См. пример реализации в демо-приложении:

using services 1
  • CustomerBrowse.java and CustomerEdit.java - контроллер экрана, который вызывает сервис.

  • DiscountService.java - интерфейс сервиса.

  • DiscountServiceBean.java - класс реализации сервиса.

  • DiscountCalculator.java - бин среднего слоя, рассчитывающий скидки. Разумеется, сервис мог бы содержать бизнес-логику сам, но мы будем использовать этот делегат для того чтобы разделять логику с entity listener и JMX-бином (см. следующие разделы).

    Обратите внимание, что данный бин отличается от рассмотренного в предыдущем разделе: он расположен в модуле core и использует EntityManager для загрузки суммы заказов из базы данных.

Теперь давайте сделаем наш бизнес-метод доступным для внешних клиентов через REST API:

  • Откройте сервис на редактирование в Studio и переключитесь на вкладку REST Methods.

  • Установите для метода флажок REST invocation allowed.

Studio создаст файл rest-services.xml и зарегистрирует в нем метод. После перезапуска сервера вы сможете вызвать метод с помощью HTTP-запросов. Например, следующий GET-запрос должен работать с нашим онлайн демо-сервером:

https://demo1.cuba-platform.com/business-logic/rest/v2/services/sample_DiscountService/calculateDiscount?customerId=1797f54d-5bec-87a6-4330-d958955743a2

Имейте в виду, что демо-приложение имеет анонимный доступ. В большинстве реальных сценариев использования необходимо будет аутентифицироваться, прежде чем выполнять запросы.