Шаблон бизнес-делегата
Бизнес-делегат — это шаблон проектирования Java EE . [1] Этот шаблон направлен на уменьшение связи между бизнес-сервисами и подключенным уровнем представления, а также на сокрытие деталей реализации сервисов (включая поиск и доступность архитектуры EJB ). [1] [2] Бизнес-делегаты действуют как адаптер для вызова бизнес-объектов с уровня представления. [3]
Структура
[ редактировать ]Запросы на доступ к базовым бизнес-сервисам отправляются от клиентов, а службы поиска используются бизнес-делегатами для поиска компонентов бизнес-сервисов. [1]
Компоненты
[ редактировать ]Базовыми компонентами являются бизнес-делегат, служба поиска и бизнес-служба.
Деловой делегат
[ редактировать ]Управление и защита обеспечиваются посредством бизнес-делегата, который может иметь два типа конструкций: без идентификатора и с идентификатором, где идентификатор — это строковая версия ссылки на удаленный объект, например EJBHome или EJBObject. [1]
Служба поиска
[ редактировать ]Бизнес-сервис находится с помощью службы поиска, которую использует бизнес-делегат. Детали реализации поиска бизнес-служб инкапсулируются службой поиска. [1]
Бизнес-услуги
[ редактировать ]Это компонент бизнес-уровня, такой как корпоративный компонент или компонент JMS, который предоставляет клиенту требуемый сервис. [1]
Последствия
[ редактировать ]Некоторые последствия заключаются в следующем:
- Повышенная гибкость и удобство обслуживания, поскольку промежуточный уровень бизнес-делегирования отделяет бизнес-уровень от уровня представления.
- Бизнес-делегат предоставляет унифицированный API для уровня представления для доступа к бизнес-логике. [1] [3]
Обеспокоенность
[ редактировать ]Можно рассмотреть следующие проблемы:
- Обслуживание за счет дополнительного слоя, увеличивающего количество классов в приложении.
- Бизнес-делегат должен позаботиться об изменениях интерфейсов удаленных бизнес-объектов, а такие изменения случаются редко. [3]
Пример кода
[ редактировать ]Ниже приведен пример кода для приложения профессиональных услуг (PSA), в котором клиенту веб-уровня требуется доступ к сеансовому компоненту, реализующему шаблон фасада сеанса.
Представитель ресурса:
public class ResourceDelegate { // Удаленная ссылка для сеанса частного ResourceSession фасада сеанса ; // Класс для домашнего объекта фасада сеанса Private static Final Class homeClazz = corepatterns . приложения . пса . эйб . ResourceSessionHome . сорт ; // Конструктор по умолчанию. Ищет домашний адрес и подключается // к сеансу, создавая новый public ResourceDelegate () выдает ResourceException { try { ResourceSessionHome home = ( ResourceSessionHome ) ServiceLocator . ПолучитьЭкземпляр (). getHome ( "Ресурс" , homeClazz ); сеанс = дом . создавать (); } catch ( ServiceLocatorException ex ) { // Транслируем исключение Service Locator в // исключение приложения throw new ResourceException (...); } catch ( CreateException ex ) { // Транслируем исключение создания сеанса в // исключение приложения throw new ResourceException (...); } catch ( RemoteException ex ) { // Транслируем исключение Remote в исключение // приложения throw new ResourceException (...); } } Общественный BusinessDelegate ( String id ) выдает ResourceException { super (); переподключиться ( идентификатор ); } Общественная строка getID () { попробуйте { вернуть ServiceLocator . getId ( сессия ); } catch ( Exception e ) { // Выдаем исключение приложения } } public void reconnect ( String id ) бросает ResourceException { try { session = ( ResourceSession ) ServiceLocator . ПолучитьСервис ( идентификатор ); } catch ( RemoteException ex ) { // Транслируем исключение Remote в исключение // приложения throw new ResourceException (...); } } Public ResourceTO setCurrentResource ( String resourcesId ) выдает ResourceException { try { return session . setCurrentResource ( идентификатор ресурса ); } catch ( RemoteException ex ) { // Транслируем исключение службы в исключение // приложения throw new ResourceException (...); } } Общественный ResourceTO getResourceDetails () выдает ResourceException { попробуйте { возвратите сеанс . getResourceDetails (); } catch ( RemoteException ex ) { // Транслируем исключение службы в исключение // приложения throw new ResourceException (...); } } Общественный недействительный setResourceDetails ( ResourceTO vo ) выдает ResourceException { try { session . setResourceDetails ( во ); } catch ( RemoteException ex ) { бросить новое ResourceException (...); } } Общественный недействительный addNewResource ( ResourceTO vo ) выдает ResourceException { try { session . добавитьресурс ( во ); } catch ( RemoteException ex ) { бросить новое ResourceException (...); } } // все остальные методы прокси для сеансового компонента ... }
Удаленный интерфейс для ResourceSession:
public class ResourceDelegate { // Удаленная ссылка для сеанса частного ResourceSession фасада сеанса ; // Класс для домашнего объекта фасада сеанса Private static Final Class homeClazz = corepatterns . приложения . пса . эйб . ResourceSessionHome . сорт ; // Конструктор по умолчанию. Ищет домашний адрес и подключается // к сеансу, создавая новый public ResourceDelegate () выдает ResourceException { try { ResourceSessionHome home = ( ResourceSessionHome ) ServiceLocator . ПолучитьЭкземпляр (). getHome ( "Ресурс" , homeClazz ); сеанс = дом . создавать (); } catch ( ServiceLocatorException ex ) { // Транслируем исключение Service Locator в // исключение приложения throw new ResourceException (...); } catch ( CreateException ex ) { // Транслируем исключение создания сеанса в // исключение приложения throw new ResourceException (...); } catch ( RemoteException ex ) { // Транслируем исключение Remote в исключение // приложения throw new ResourceException (...); } } Общественный BusinessDelegate ( String id ) выдает ResourceException { super (); переподключиться ( идентификатор ); } Общественная строка getID () { попробуйте { вернуть ServiceLocator . getId ( сессия ); } catch ( Exception e ) { // Выдаем исключение приложения } } public void reconnect ( String id ) бросает ResourceException { try { session = ( ResourceSession ) ServiceLocator . ПолучитьСервис ( идентификатор ); } catch ( RemoteException ex ) { // Транслируем исключение Remote в исключение // приложения throw new ResourceException (...); } } Public ResourceTO setCurrentResource ( String resourcesId ) выдает ResourceException { try { return session . setCurrentResource ( идентификатор ресурса ); } catch ( RemoteException ex ) { // Транслируем исключение службы в исключение // приложения throw new ResourceException (...); } } Общественный ResourceTO getResourceDetails () выдает ResourceException { попробуйте { возвратите сеанс . getResourceDetails (); } catch ( RemoteException ex ) { // Транслируем исключение службы в исключение // приложения throw new ResourceException (...); } } Общественный недействительный setResourceDetails ( ResourceTO vo ) выдает ResourceException { try { session . setResourceDetails ( во ); } catch ( RemoteException ex ) { бросить новое ResourceException (...); } } Общественный недействительный addNewResource ( ResourceTO vo ) выдает ResourceException { try { session . добавитьресурс ( во ); } catch ( RemoteException ex ) { бросить новое ResourceException (...); } } // все остальные методы прокси для сеансового компонента ... }
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ Перейти обратно: а б с д и ж г час я «Основные шаблоны J2EE – бизнес-делегат» . Оракул . Оракул . Проверено 22 июня 2016 г.
- ^ Технический проект скрининга – версия 2.0 . Индиана, США: Штат Индиана. п. 7.
- ^ Перейти обратно: а б с Каял, Д. (2008). Профессиональные шаблоны Spring EE для Java EE . Нью-Йорк: Апресс. стр. 161 –166.