Шаблон бизнес-делегата
Бизнес-делегат — это шаблон проектирования Java EE . [1] Этот шаблон направлен на уменьшение связи между бизнес-сервисами и подключенным уровнем представления, а также на сокрытие деталей реализации сервисов (включая поиск и доступность архитектуры EJB ). [1] [2] Бизнес-делегаты действуют как адаптер для вызова бизнес-объектов с уровня представления. [3]
Структура
[ редактировать ]Запросы на доступ к базовым бизнес-сервисам отправляются от клиентов, а службы поиска используются бизнес-делегатами для поиска компонентов бизнес-сервисов. [1]
Компоненты
[ редактировать ]Базовыми компонентами являются бизнес-делегат, служба поиска и бизнес-служба.
Деловой делегат
[ редактировать ]Управление и защита обеспечиваются посредством бизнес-делегата, который может иметь два типа конструкций: без идентификатора и с идентификатором, где идентификатор — это строковая версия ссылки на удаленный объект, например EJBHome или EJBObject. [1]
Служба поиска
[ редактировать ]Бизнес-сервис находится с помощью службы поиска, которую использует бизнес-делегат. Детали реализации поиска бизнес-служб инкапсулируются службой поиска. [1]
Бизнес-услуги
[ редактировать ]Это компонент бизнес-уровня, такой как корпоративный компонент или компонент JMS, который предоставляет клиенту требуемый сервис. [1]
Последствия
[ редактировать ]Некоторые последствия заключаются в следующем:
- Повышенная гибкость и удобство обслуживания, поскольку промежуточный уровень бизнес-делегирования отделяет бизнес-уровень от уровня представления.
- Бизнес-делегат предоставляет унифицированный API для уровня представления для доступа к бизнес-логике. [1] [3]
Обеспокоенность
[ редактировать ]Можно рассмотреть следующие проблемы:
- Обслуживание за счет дополнительного слоя, увеличивающего количество классов в приложении.
- Бизнес-делегат должен позаботиться об изменениях интерфейсов удаленных бизнес-объектов, а такие изменения случаются редко. [3]
Пример кода
[ редактировать ]Ниже приведен пример кода для приложения профессиональных услуг (PSA), в котором клиенту веб-уровня требуется доступ к сеансовому компоненту, реализующему шаблон фасада сеанса.
Представитель ресурса:
public class ResourceDelegate {
// Remote reference for Session Facade
private ResourceSession session;
// Class for Session Facade's Home object
private static final Class homeClazz =
corepatterns.apps.psa.ejb.ResourceSessionHome.class;
// Default Constructor. Looks up home and connects
// to session by creating a new one
public ResourceDelegate() throws ResourceException {
try {
ResourceSessionHome home = (ResourceSessionHome)
ServiceLocator.getInstance().getHome(
"Resource", homeClazz);
session = home.create();
} catch(ServiceLocatorException ex) {
// Translate Service Locator exception into
// application exception
throw new ResourceException(...);
} catch(CreateException ex) {
// Translate the Session create exception into
// application exception
throw new ResourceException(...);
} catch(RemoteException ex) {
// Translate the Remote exception into
// application exception
throw new ResourceException(...);
}
}
public BusinessDelegate(String id)
throws ResourceException {
super();
reconnect(id);
}
public String getID() {
try {
return ServiceLocator.getId(session);
} catch (Exception e) {
// Throw an application exception
}
}
public void reconnect(String id)
throws ResourceException {
try {
session = (ResourceSession)
ServiceLocator.getService(id);
} catch (RemoteException ex) {
// Translate the Remote exception into
// application exception
throw new ResourceException(...);
}
}
public ResourceTO setCurrentResource(
String resourceId)
throws ResourceException {
try {
return session.setCurrentResource(resourceId);
} catch (RemoteException ex) {
// Translate the service exception into
// application exception
throw new ResourceException(...);
}
}
public ResourceTO getResourceDetails()
throws ResourceException {
try {
return session.getResourceDetails();
} catch(RemoteException ex) {
// Translate the service exception into
// application exception
throw new ResourceException(...);
}
}
public void setResourceDetails(ResourceTO vo)
throws ResourceException {
try {
session.setResourceDetails(vo);
} catch(RemoteException ex) {
throw new ResourceException(...);
}
}
public void addNewResource(ResourceTO vo)
throws ResourceException {
try {
session.addResource(vo);
} catch(RemoteException ex) {
throw new ResourceException(...);
}
}
// all other proxy method to session bean
...
}
Удаленный интерфейс для ResourceSession:
public class ResourceDelegate {
// Remote reference for Session Facade
private ResourceSession session;
// Class for Session Facade's Home object
private static final Class homeClazz =
corepatterns.apps.psa.ejb.ResourceSessionHome.class;
// Default Constructor. Looks up home and connects
// to session by creating a new one
public ResourceDelegate() throws ResourceException {
try {
ResourceSessionHome home = (ResourceSessionHome)
ServiceLocator.getInstance().getHome(
"Resource", homeClazz);
session = home.create();
} catch(ServiceLocatorException ex) {
// Translate Service Locator exception into
// application exception
throw new ResourceException(...);
} catch(CreateException ex) {
// Translate the Session create exception into
// application exception
throw new ResourceException(...);
} catch(RemoteException ex) {
// Translate the Remote exception into
// application exception
throw new ResourceException(...);
}
}
public BusinessDelegate(String id)
throws ResourceException {
super();
reconnect(id);
}
public String getID() {
try {
return ServiceLocator.getId(session);
} catch (Exception e) {
// Throw an application exception
}
}
public void reconnect(String id)
throws ResourceException {
try {
session = (ResourceSession)ServiceLocator.getService(id);
} catch (RemoteException ex) {
// Translate the Remote exception into
// application exception
throw new ResourceException(...);
}
}
public ResourceTO setCurrentResource(
String resourceId)
throws ResourceException {
try {
return session.setCurrentResource(resourceId);
} catch (RemoteException ex) {
// Translate the service exception into
// application exception
throw new ResourceException(...);
}
}
public ResourceTO getResourceDetails()
throws ResourceException {
try {
return session.getResourceDetails();
} catch(RemoteException ex) {
// Translate the service exception into
// application exception
throw new ResourceException(...);
}
}
public void setResourceDetails(ResourceTO vo)
throws ResourceException {
try {
session.setResourceDetails(vo);
} catch(RemoteException ex) {
throw new ResourceException(...);
}
}
public void addNewResource(ResourceTO vo)
throws ResourceException {
try {
session.addResource(vo);
} catch(RemoteException ex) {
throw new ResourceException(...);
}
}
// all other proxy method to session bean
...
}
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ Jump up to: а б с д и ж г час я «Основные шаблоны J2EE – бизнес-делегат» . Оракул . Оракул . Проверено 22 июня 2016 г.
- ^ Технический проект скрининга – версия 2.0 . Индиана, США: Штат Индиана. п. 7.
- ^ Jump up to: а б с Каял, Д. (2008). Профессиональные шаблоны Spring EE для Java EE . Нью-Йорк: Апресс. стр. 161 –166.