Jump to content

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

Бизнес-делегат — это шаблон проектирования 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
    ...
}

[1]

Удаленный интерфейс для 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
    ...
}

[1]

См. также

[ редактировать ]
  1. ^ Jump up to: а б с д и ж г час я «Основные шаблоны J2EE – бизнес-делегат» . Оракул . Оракул . Проверено 22 июня 2016 г.
  2. ^ Технический проект скрининга – версия 2.0 . Индиана, США: Штат Индиана. п. 7.
  3. ^ Jump up to: а б с Каял, Д. (2008). Профессиональные шаблоны Spring EE для Java EE . Нью-Йорк: Апресс. стр. 161 –166.
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: e30509d791481fd2865667140ab7bf32__1710410820
URL1:https://arc.ask3.ru/arc/aa/e3/32/e30509d791481fd2865667140ab7bf32.html
Заголовок, (Title) документа по адресу, URL1:
Business delegate pattern - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)