Главная » Spring » Экспортирование службы с  помощью  Hessian/Burlap Spring

0

Как и прежде, предположим, что в качестве службы необходи- мо экспортировать функциональность, реализованную в классе SpitterServiceImpl, но на этот раз с применением технологии Hessian. В этом нет ничего сложного, даже без использования возможностей фреймворка Spring. Достаточно определить класс службы, расши- ряющий класс com.caucho.hessian.server.HessianServlet, и сделать все методы API службы общедоступными (в Hessian все общедоступные методы считаются методами службы).

Благодаря простоте реализации служб на основе решения Hessian фреймворк Spring делает не так много, чтобы еще больше упростить эту модель. Но при использовании фреймворка Spring служба на ос- нове решения Hessian может использовать все преимущества Spring Framework, отсутствующие в самом решении Hessian. В число этих преимуществ входит использование Spring AOP для организации декларативного управления транзакциями.

Экспортирование службы Hessian

Настройка экспортирования службы Hessian в Spring близко напоминает экспортирование RMI-служб. Чтобы экспортировать компонент службы Spitter в виде RMI-службы, нам потребовалось настроить компонент RmiServiceExporter. Аналогично, чтобы экспор- тировать службу Spitter в виде службы Hessian, необходимо на- строить похожий компонент-экспортер. На этот раз HessianService- Exporter.

Компонент HessianServiceExporter выполняет те же операции, что и RmiServiceExporter: он экспортирует общедоступные методы POJO как методы службы Hessian. Но, как показано на рис. 11.6, детали операции экспортирования отличаются от того, как RmiServiceExporter экспортирует POJO в виде RMI-службы.

Рис. 11.6. HessianServiceExporter –

это контроллер Spring MVC, экспортирующий POJO как службу Hessian, который принимает Hessian-запросы

и преобразует их в вызовы методов POJO

Компонент HessianServiceExporter – это контроллер Spring MVC (подробнее об этом чуть ниже), принимающий Hessian-запросы и преобразующий их в вызовы экспортируемых методов POJO.

Следующее объявление компонента HessianServiceExporter экспор- тирует компонент spitterService  как службу Hessian:

<bean  id="hessianSpitterService" class="org.springframework.remoting.caucho.HessianServiceExporter" p:service-ref="spitterService" p:serviceInterface="com.habuma.spitter.service.SpitterService"      />

Как и в настройках компонента RmiServiceExporter, свойство service служит для внедрения ссылки на компонент, реализующий службу. В данном случае это ссылка на компонент spitterService. Свойство serviceInterface определяет интерфейс, который реализует служба SpitterService.

В отличие от компонента RmiServiceExporter, здесь нет необходи- мости определять свойство serviceName. В случае со службами RMI свойство serviceName используется для регистрации службы в реестре RMI. Решение Hessian не имеет реестра, и поэтому нет необходимо- сти определять имя службы Hessian.

Настройка контроллера Hessian

Другое важное отличие HessianServiceExporter от RmiServiceExporter обусловлено тем, что решение Hessian основано на использовании протокола HTTP, вследствие чего HessianServiceExporter реализован как контроллер Spring MVC. То есть в процессе экспортирования службы Hessian необходимо выполнить две дополнительные на- стройки:

#  настроить компонент Spring DispatcherServlet в файле web.xml и

развернуть приложение как веб-приложение;

# настроить обработчик URL в файле конфигурации Spring, что- бы обеспечить обработку URL-адресов службы Hessian в соот- ветствующем компоненте службы Hessian.

Процедура настройки компонента DispatcherServlet и обработчи- ков URL обсуждалась в главе 8. Поэтому эти настройки должны быть вам знакомы. Во-первых, необходимо определить компонент DispatcherServlet. К счастью, он уже определен в файле web.xml прило- жения Spitter. Но для поддержки службы Hessian этому компонен- ту DispatcherServlet  требуется сервлет, отображающий URL-адреса

*.service:

<servlet-mapping>

<servlet-name>spitter</servlet-name>

<url-pattern>*.service</url-pattern>

</servlet-mapping>

Благодаря этим настройкам любые запросы к указанным URL, оканчивающимся на .service, будут передаваться в DispatcherServlet, который, в свою очередь, передаст их контроллеру, полученному в результате отображения URL. То есть запросы с URL /spitter. service в конечном итоге будут обрабатываться компонентом hessian- SpitterService (который является всего лишь прокси-объектом для SpitterServiceImpl).

Но как обеспечить передачу запросов компоненту hessianSpitter- Service? Для этого необходимо настроить отображение URL так, что- бы DispatcherServlet отправлял запросы в hessianSpitterService. Все необходимое сделает следующий компонент SimpleUrlHandlerMapping:

<bean id="urlMapping" class=

"org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">

<property  name="mappings">

<value>

/spitter.service=hessianSpitterService

</value>

</property>

</bean>

Альтернативой двоичному протоколу Hessian является XML- протокол Burlap. Посмотрим, как организовать экспортирование службы Burlap.

Экспортирование службы Burlap

Компонент BurlapServiceExorter практически идентичен компо- ненту HessianServiceExporter во всех отношениях, кроме того что вместо двоичного протокола он пользуется протоколом на осно- ве XML. Следующее определение компонента демонстрирует, как экспортировать службу Spitter в виде службы Burlap, используя BurlapServiceExporter:

<bean  id="burlapSpitterService" class="org.springframework.remoting.caucho.BurlapServiceExporter" p:service-ref="spitterService" p:serviceInterface="com.habuma.spitter.service.SpitterService"      />

Как видно из этого примера, единственное различие между этим компонентом и родственным ему объявлением службы Hessian за- ключается в идентификаторе компонента и его классе. В остальном настройки службы Burlap ничем не отличаются от настройки служ- бы Hessian, включая настройки обработчика URL и DispatcherServlet.

Теперь обратимся к другой стороне диалога и задействуем службу, экспортированную средствами Hessian (или Burlap).

Источник:   Уоллс К., Spring в действии. – М.: ДМК Пресс, 2013. – 752 с.: ил.

По теме:

  • Комментарии