Шаблон бизнес-делегата - Business delegate pattern

Деловой делегат это Java EE шаблон дизайна.[1] Этот шаблон направлен на уменьшение связь между бизнес-сервисами и подключенным уровнем представления, а также скрыть детали реализации сервисов (включая поиск и доступность EJB архитектура).[1][2] Бизнес-делегаты действуют как адаптер для вызова бизнес-объектов с уровня представления.[3]

Структура

Запросы на доступ к базовым бизнес-сервисам отправляются от клиентов, а бизнес-делегаты используют сервисы поиска для поиска компонентов бизнес-сервисов.[1]

Составные части

Основные компоненты - это бизнес-делегат, служба поиска и бизнес-служба.

Деловой делегат

Управление и защита обеспечивается с помощью бизнес-делегата, который может иметь два типа структур, без идентификатора и с идентификатором, где идентификатор - это строковая версия ссылки на удаленный объект, такой как EJBHome или EJBObject.[1]

Служба поиска

Бизнес-сервис находится в сервисе поиска, который используется бизнес-делегатом. Детали реализации поиска бизнес-службы инкапсулируются службой поиска.[1]

Бизнес Сервис

Это компонент бизнес-уровня, такой как корпоративный компонент или компонент JMS, который предоставляет клиенту необходимый сервис.[1]

Последствия

Вот некоторые последствия:

  • Повышенная гибкость и ремонтопригодность, поскольку промежуточный уровень бизнес-делегатов отделяет бизнес-уровень от уровня представления.
  • Бизнес-делегат предоставляет унифицированный API для уровня представления для доступа к бизнес-логике.[1][3]

Обеспокоенность

Можно принять во внимание следующие опасения:

  • Сопровождение за счет дополнительного слоя, увеличивающего количество классов в приложении.
  • Бизнес-делегат должен позаботиться об изменениях интерфейсов удаленных бизнес-объектов, а такие изменения редки.[3]

Образец кода

Ниже приведен пример кода для приложения профессиональных услуг (PSA), в котором клиенту веб-уровня необходимо получить доступ к компоненту сеанса, реализующему шаблон фасада сеанса.

Делегат ресурса:

общественный учебный класс ResourceDelegate {  // Удаленная ссылка для Session Facade  частный ResourceSession сессия;  // Класс для домашнего объекта Session Facade  частный статический окончательный Учебный класс homeClazz =  corepatterns.Программы.psa.ejb.ResourceSessionHome.учебный класс;  // Конструктор по умолчанию. Смотрит домой и соединится  // в сессию, создав новую  общественный ResourceDelegate() бросает ResourceException {    пытаться {      ResourceSessionHome дома = (ResourceSessionHome)        ServiceLocator.getInstance().добраться до дома(          "Ресурс", homeClazz);      сессия = дома.Создайте();    } ловить(ServiceLocatorException бывший) {      // Перевод исключения Service Locator в      // исключение приложения      бросать новый ResourceException(...);    } ловить(CreateException бывший) {      // Преобразуем исключение создания сеанса в      // исключение приложения      бросать новый ResourceException(...);    } ловить(RemoteException бывший) {      // Преобразуем удаленное исключение в      // исключение приложения      бросать новый ResourceException(...);    }  }    общественный БизнесДелегат(Нить я бы)    бросает ResourceException {    супер();    переподключить(я бы);  }    общественный Нить getID() {    пытаться {      возвращаться ServiceLocator.getId(сессия);    } ловить (Исключение е) {      // Выбрасываем исключение приложения    } }  общественный пустота переподключить(Нить я бы)     бросает ResourceException {    пытаться {      сессия = (ResourceSession)                 ServiceLocator.getService(я бы);    } ловить (RemoteException бывший) {      // Преобразуем удаленное исключение в      // исключение приложения      бросать новый ResourceException(...);    }  }    общественный ResourceTO setCurrentResource(    Нить resourceId)    бросает ResourceException {    пытаться {      возвращаться сессия.setCurrentResource(resourceId);    } ловить (RemoteException бывший) {      // Преобразуем исключение службы в      // исключение приложения      бросать новый ResourceException(...);    }  }  общественный ResourceTO getResourceDetails()    бросает ResourceException {    пытаться {      возвращаться сессия.getResourceDetails();    } ловить(RemoteException бывший) {      // Преобразуем исключение службы в      // исключение приложения      бросать новый ResourceException(...);    }  }  общественный пустота setResourceDetails(ResourceTO vo)    бросает ResourceException {    пытаться {      сессия.setResourceDetails(vo);    } ловить(RemoteException бывший) {      бросать новый ResourceException(...);    }  }  общественный пустота addNewResource(ResourceTO vo)    бросает ResourceException {    пытаться {      сессия.addResource(vo);    } ловить(RemoteException бывший) {      бросать новый ResourceException(...);    }  }  // все остальные методы прокси для сессионного компонента  ...}

[1]

Удаленный интерфейс для ResourceSession:

общественный учебный класс ResourceDelegate {  // Удаленная ссылка для Session Facade  частный ResourceSession сессия;  // Класс для домашнего объекта Session Facade  частный статический окончательный Учебный класс homeClazz =  corepatterns.Программы.psa.ejb.ResourceSessionHome.учебный класс;  // Конструктор по умолчанию. Смотрит домой и соединится  // в сессию, создав новую  общественный ResourceDelegate() бросает ResourceException {    пытаться {      ResourceSessionHome дома = (ResourceSessionHome)        ServiceLocator.getInstance().добраться до дома(          "Ресурс", homeClazz);      сессия = дома.Создайте();    } ловить(ServiceLocatorException бывший) {      // Переводим исключение Service Locator в      // исключение приложения      бросать новый ResourceException(...);    } ловить(CreateException бывший) {      // Преобразуем исключение создания сеанса в      // исключение приложения      бросать новый ResourceException(...);    } ловить(RemoteException бывший) {      // Преобразуем удаленное исключение в      // исключение приложения      бросать новый ResourceException(...);    }  }  общественный БизнесДелегат(Нить я бы)    бросает ResourceException {    супер();    переподключить(я бы);  }  общественный Нить getID() {    пытаться {      возвращаться ServiceLocator.getId(сессия);    } ловить (Исключение е) {      // Выбрасываем исключение приложения    } }  общественный пустота переподключить(Нить я бы)     бросает ResourceException {    пытаться {      сессия = (ResourceSession)                 ServiceLocator.getService(я бы);    } ловить (RemoteException бывший) {      // Переводим удаленное исключение в      // исключение приложения      бросать новый ResourceException(...);    }  }    общественный ResourceTO setCurrentResource(    Нить resourceId)    бросает ResourceException {    пытаться {      возвращаться сессия.setCurrentResource(resourceId);    } ловить (RemoteException бывший) {      // Преобразуем исключение службы в      // исключение приложения      бросать новый ResourceException(...);    }  }  общественный ResourceTO getResourceDetails()    бросает ResourceException {    пытаться {      возвращаться сессия.getResourceDetails();    } ловить(RemoteException бывший) {      // Преобразуем исключение службы в      // исключение приложения      бросать новый ResourceException(...);    }  }  общественный пустота setResourceDetails(ResourceTO vo)    бросает ResourceException {    пытаться {      сессия.setResourceDetails(vo);    } ловить(RemoteException бывший) {      бросать новый ResourceException(...);    }  }  общественный пустота addNewResource(ResourceTO vo)    бросает ResourceException {    пытаться {      сессия.addResource(vo);    } ловить(RemoteException бывший) {      бросать новый ResourceException(...);    }  }  // все остальные методы прокси для сессионного компонента  ...}

[1]

Смотрите также

Рекомендации

  1. ^ а б c d е ж грамм час я «Основные шаблоны J2EE - бизнес-делегат». Oracle. Oracle. Получено 22 июн 2016.
  2. ^ Отбор технической документации - Версия 2.0. Индиана, США: штат Индиана. п. 7.
  3. ^ а б c Каял, Д. (2008). Шаблоны Pro Java EE Spring. Нью-Йорк: Апресс. стр.161 –166.