1概要

リンク:/spring-remoting-http-invoker[前回の記事「HTTP呼び出しを使用したSpring Remotingの紹介」]では、

Spring Remoting

を介してリモートメソッド呼び出し(RMI)を利用するクライアント/サーバーアプリケーションを設定するのがいかに簡単かを見ました。

この記事では、

Spring Remoting

が代わりに

Hessian



Burlap


を使用してRMIの実装をサポートする方法を

示します。


2 Mavenの依存関係


Hessian



Burlap

はどちらも次のライブラリによって提供されます。これらのライブラリは

pom.xml

ファイルに明示的に含める必要があります。

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

最新版はhttps://search.maven.org/classic/#search%7Cgav%7C1%7Cg%3A%22com.caucho%22%20AND%20a%3A%22hessian%22[Maven Central]で見つけることができます。


3ヘッシアン


Hessian

は、

Resin

アプリケーションサーバーの製造元である

Caucho

の軽量のバイナリプロトコルです。 Javaを含むいくつかのプラットフォームと言語のための

Hessian

実装が存在します。

次のサブセクションでは、前の記事で示した「cab booking」の例を変更して、クライアントとサーバーが

Spring Remote HTTP

ベースのプロトコルではなく

Hessian

を使用して通信するようにします。


3.1. サービスを公開する

以前に使用した

HttpInvokerServiceExporter

を置き換えて、

HessianServiceExporter

タイプの

RemoteExporter

を設定してサービスを公開しましょう。

@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("https://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

は、

XML

に基づく、

Caucho

のもう1つの軽量プロトコルです。


Caucho

はずっと前にそれを維持するのをやめました、そしてそれのために、それがすでに存在していても、そのサポートは最新のSpringリリースで推奨されなくなりました。

したがって、既に配布されていて、別の

Spring Remoting

実装に簡単に移行できないアプリケーションがある場合にのみ、

Burlap

を引き続き使用することをお勧めします。


4.1. サービスを公開する


Hessian

を使用したのとまったく同じ方法で

Burlap

を使用できます。適切な実装を選択するだけです。

@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("https://localhost:8080/booking");
    invoker.setServiceInterface(CabBookingService.class);
    return invoker;
}

これでクライアントを実行し、

Burlap

を使用してクライアントがサーバーアプリケーションに正常に接続する方法を確認できます。


5結論

これらの簡単な例を使用して、リモートメソッド呼び出しを実装するためのさまざまなテクノロジの中から

Spring Remoting

を選択するのがいかに簡単であるか、そしてリモートメソッド呼び出しを表すのに使用されるプロトコルの技術的詳細にまったく気付かないアプリケーションの開発方法を示しました。

いつもどおり、https://github.com/eugenp/tutorials/tree/master/spring-remoting/remoting-hessian-burlap[over GitHub]、

Hessian



Burlap

および

JUnit

の両方のクライアントがありますテスト

CabBookingServiceTest.java

は、サーバーとクライアントの両方を実行します。