Remoting da mola com Hessian e serapilheira

Remoting da mola com Hessian e serapilheira

1. Visão geral

Emprevious article titled “Intro to Spring Remoting with HTTP Invokers”, vimos como é fácil configurar um aplicativo cliente / servidor que aproveita a invocação de método remoto (RMI) por meio deSpring Remoting.

Neste artigo, mostraremoshow Spring Remoting supports the implementation of RMI using Hessian and Burlap.

2. Dependências do Maven

AmbosHessianeBurlap são fornecidos pela seguinte biblioteca que você precisará incluir explicitamente em seu arquivopom.xml:


    com.caucho
    hessian
    4.0.38

Você pode encontrar a versão mais recente emMaven Central.

3. Hessian

Hessian é um protocolo binário leve deCaucho, os fabricantes do servidor de aplicativosResin. Existem implementaçõesHessian para várias plataformas e linguagens, Java incluído.

Nas subseções a seguir, modificaremos o exemplo de “reserva de táxi” apresentado no artigo anterior para fazer o cliente e o servidor se comunicarem usandoHessian em vez do protocolo baseado emSpring Remote HTTP.

3.1. Expondo o serviço

Vamos expor o serviço configurando umRemoteExporter do tipoHessianServiceExporter, substituindo oHttpInvokerServiceExporter usado anteriormente:

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

Agora podemos iniciar o servidor e mantê-lo ativo enquanto preparamos o cliente.

3.2. Aplicativo Cliente

Vamos implementar o cliente. Aqui, novamente, as modificações são bastante simples - precisamos substituir oHttpInvokerProxyFactoryBean por umHessianProxyFactoryBean:

@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"));
    }
}

Vamos agora executar o cliente para conectá-lo ao servidor usandoHessian.

4. Serapilheira

Burlap é outro protocolo leve deCaucho, baseado emXML. Caucho parou de mantê-lo há muito tempo e, por isso, seu suporte foi descontinuado nas versões mais recentes do Spring, embora já esteja presente.

Portanto, você deve razoavelmente continuar usandoBurlap apenas se tiver aplicativos que já estão distribuídos e que não podem ser facilmente migrados para outra implementaçãoSpring Remoting.

4.1. Expondo o serviço

Podemos usarBurlap exatamente da mesma maneira que usamosHessian - só temos que escolher a implementação adequada:

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

Como você pode ver, acabamos de alterar o tipo de exportador deHessianServiceExporter paraBurlapServiceExporter.. Todo o código de configuração pode ser deixado inalterado.

Novamente, vamos iniciar o servidor e mantê-lo funcionando enquanto trabalhamos no cliente.

4.2. Implementação do Cliente

Da mesma forma, podemos trocarHessian porBurlap no lado do cliente, alterandoHessianProxyFactoryBean comBurlapProxyFactoryBean:

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

Agora podemos executar o cliente e ver como ele se conecta com sucesso ao aplicativo do servidor usandoBurlap.

5. Conclusão

Com esses exemplos rápidos, mostramos como é fácil comSpring Remoting escolher entre diferentes tecnologias para implementar a invocação de método remoto e como você pode desenvolver uma aplicação sem ter conhecimento dos detalhes técnicos do protocolo usado para representar o método remoto invocação.

Como de costume, você encontrará as fontesover on GitHub, com clientes paraHessian eBurlape o testeJUnitCabBookingServiceTest.java que cuidará da execução de ambos o servidor e os clientes.