Spring Remoting mit Hessian und Sackleinen

Spring Remoting mit Hessisch und Sackleinen

1. Überblick

Inprevious article titled “Intro to Spring Remoting with HTTP Invokers” haben wir gesehen, wie einfach es ist, eine Client / Server-Anwendung einzurichten, die den Remote Method Invocation (RMI) überSpring Remoting nutzt.

In diesem Artikel zeigen wir stattdessenhow Spring Remoting supports the implementation of RMI using Hessian and Burlap.

2. Maven-Abhängigkeiten

SowohlHessian als auchBurlap werden von der folgenden Bibliothek bereitgestellt, die Sie explizit in Ihrepom.xml-Datei aufnehmen müssen:


    com.caucho
    hessian
    4.0.38

Sie finden die neueste Version aufMaven Central.

3. Hessisch

Hessian ist ein leichtes Binärprotokoll vonCaucho, den Herstellern desResin-Anwendungsservers. Hessian Implementierungen existieren für mehrere Plattformen und Sprachen, einschließlich Java.

In den folgenden Unterabschnitten werden wir das im vorherigen Artikel vorgestellte Beispiel für die Taxibuchung ändern, damit der Client und der Server mitHessian anstelle des aufSpring Remote HTTPbasierenden Protokolls kommunizieren.

3.1. Den Service verfügbar machen

Stellen Sie den Dienst bereit, indem SieRemoteExporter vom TypHessianServiceExporter konfigurieren und die zuvor verwendetenHttpInvokerServiceExporter ersetzen:

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

Jetzt können wir den Server starten und aktiv halten, während wir den Client vorbereiten.

3.2. Client-Anwendung

Lassen Sie uns den Client implementieren. Auch hier sind die Änderungen recht einfach - wir müssenHttpInvokerProxyFactoryBean durchHessianProxyFactoryBean ersetzen:

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

Führen Sie nun den Client aus, um mithilfe vonHessian eine Verbindung zum Server herzustellen.

4. Sackleinen

Burlap ist ein weiteres leichtes Protokoll vonCaucho, basierend aufXML. Caucho hat die Wartung vor langer Zeit eingestellt, und aus diesem Grund wurde die Unterstützung in den neuesten Frühjahrsversionen abgelehnt, obwohl sie bereits vorhanden ist.

Daher sollten SieBurlap vernünftigerweise nur dann weiter verwenden, wenn Sie Anwendungen haben, die bereits verteilt sind und die nicht einfach auf eine andereSpring Remoting-Implementierung migriert werden können.

4.1. Den Service verfügbar machen

Wir könnenBurlap genauso verwenden wieHessian - wir müssen nur die richtige Implementierung auswählen:

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

Wie Sie sehen, haben wir gerade den Exporteurentyp vonHessianServiceExporter inBurlapServiceExporter. geändert. Der gesamte Setup-Code kann unverändert bleiben.

Starten Sie den Server erneut und lassen Sie ihn weiterlaufen, während wir am Client arbeiten.

4.2. Client-Implementierung

Wir können auf der Client-Seite ebenfallsHessian gegenBurlap tauschen undHessianProxyFactoryBean gegenBurlapProxyFactoryBean austauschen:

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

Wir können jetzt den Client ausführen und sehen, wie er mitBurlap erfolgreich eine Verbindung zur Serveranwendung herstellt.

5. Fazit

Anhand dieser kurzen Beispiele haben wir gezeigt, wie einfach es ist, mitSpring Remoting zwischen verschiedenen Technologien zu wählen, um den Remote-Methodenaufruf zu implementieren, und wie Sie eine Anwendung entwickeln können, die die technischen Details des Protokolls zur Darstellung der Remote-Methode überhaupt nicht kennt Aufruf.

Wie üblich finden Sie die Quellenover on GitHub, wobei Clients sowohl fürHessian als auch fürBurlap und für denJUnit-TestCabBookingServiceTest.java verwendet werden, um beide auszuführen der Server und die Clients.