Перейти к основному содержимому

Spring Remoting с Hessian и Burlap

· 3 мин. чтения

1. Обзор

В предыдущей статье под названием «Intro to Spring Remoting with HTTP Invokers» мы увидели, как легко настроить клиент-серверное приложение, использующее удаленный вызов методов (RMI) через Spring Remoting .

В этой статье мы покажем, как Spring Remoting поддерживает реализацию RMI с использованием вместо этого Hessian и Burlap .

2. Зависимости Maven

И Hessian , и Burlap предоставляются следующей библиотекой, которую вам нужно явно включить в файл pom.xml :

<dependency>
<groupId>com.caucho</groupId>
<artifactId>hessian</artifactId>
<version>4.0.38</version>
</dependency>

Вы можете найти последнюю версию на Maven Central .

3. Гессен

Hessian — это легкий двоичный протокол от Caucho , создателей сервера приложений Resin . Реализации Hessian существуют для нескольких платформ и языков, включая Java.

В следующих подразделах мы изменим пример «заказа такси», представленный в предыдущей статье, чтобы клиент и сервер могли общаться с использованием Hessian вместо протокола на основе Spring Remote HTTP .

3.1. Разоблачение службы

Давайте представим службу, настроив RemoteExporter типа HessianServiceExporter , заменив ранее использовавшийся HttpInvokerServiceExporter :

@Bean(name = "/booking") 
RemoteExporter bookingService() {
HessianServiceExporter exporter = new HessianServiceExporter();
exporter.setService(new CabBookingServiceImpl());
exporter.setServiceInterface( CabBookingService.class );
return exporter;
}

Теперь мы можем запустить сервер и оставить его активным, пока мы готовим клиент.

3.2. Клиентское приложение

Реализуем клиент. Здесь снова изменения довольно просты — нам нужно заменить HttpInvokerProxyFactoryBean на HessianProxyFactoryBean :

@Configuration
public class HessianClient {

@Bean
public HessianProxyFactoryBean hessianInvoker() {
HessianProxyFactoryBean invoker = new HessianProxyFactoryBean();
invoker.setServiceUrl("http://localhost:8080/booking");
invoker.setServiceInterface(CabBookingService.class);
return invoker;
}

public static void main(String[] args) throws BookingException {
CabBookingService service
= SpringApplication.run(HessianClient.class, args)
.getBean(CabBookingService.class);
out.println(
service.bookRide("13 Seagate Blvd, Key Largo, FL 33037"));
}
}

Давайте теперь запустим клиент, чтобы подключить его к серверу с помощью Hessian .

4. Мешковина

Burlap — еще один облегченный протокол от Caucho , основанный на XML . Caucho давно прекратил его поддержку, и по этой причине его поддержка устарела в новейших выпусках Spring, хотя она уже присутствует.

Поэтому вам следует разумно продолжать использовать Burlap только в том случае, если у вас есть приложения, которые уже распределены и которые нельзя легко перенести в другую реализацию Spring Remoting .

4.1. Разоблачение службы

Мы можем использовать Burlap точно так же, как мы использовали Hessian — нам просто нужно выбрать правильную реализацию:

@Bean(name = "/booking") 
RemoteExporter burlapService() {
BurlapServiceExporter exporter = new BurlapServiceExporter();
exporter.setService(new CabBookingServiceImpl());
exporter.setServiceInterface( CabBookingService.class );
return exporter;
}

Как видите, мы только что изменили тип экспортера с HessianServiceExporter на BurlapServiceExporter. Весь код настройки можно оставить без изменений.

Опять же, давайте запустим сервер и продолжим его работу, пока мы работаем с клиентом.

4.2. Реализация клиента

Мы также можем заменить Hessian на Burlap на стороне клиента, заменив HessianProxyFactoryBean на BurlapProxyFactoryBean :

@Bean
public BurlapProxyFactoryBean burlapInvoker() {
BurlapProxyFactoryBean invoker = new BurlapProxyFactoryBean();
invoker.setServiceUrl("http://localhost:8080/booking");
invoker.setServiceInterface(CabBookingService.class);
return invoker;
}

Теперь мы можем запустить клиент и посмотреть, как он успешно подключается к серверному приложению с помощью Burlap .

5. Вывод

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

Как обычно, вы найдете исходники на GitHub с клиентами как для Hessian , так и для Burlap , а также тест JUnit CabBookingServiceTest.java , который позаботится о запуске как сервера, так и клиентов.