1. 概要

以前の記事「HTTPInvokersを使用したSpringRemotingの概要」では、 Spring Remoting を介してリモートメソッド呼び出し(RMI)を活用するクライアント/サーバーアプリケーションを簡単にセットアップできることを確認しました。 。

この記事では、SpringRemotingが代わりにHessianとBurlapを使用してRMIの実装をサポートする方法を示します。

2. Mavenの依存関係

HessianBurlapはどちらも、pom.xmlファイルに明示的に含める必要がある次のライブラリによって提供されます。

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

最新バージョンはMavenCentralにあります。

3. ヘシアン

Hessian は、ResinアプリケーションサーバーのメーカーであるCauchoの軽量バイナリプロトコルです。 Hessian の実装は、Javaを含め、いくつかのプラットフォームと言語に対応しています。

次のサブセクションでは、前の記事で示した「タクシー予約」の例を変更して、クライアントとサーバーが Spring RemoteHTTPベースのプロトコルの代わりにHessianを使用して通信できるようにします。 。

3.1. サービスの公開

タイプHessianServiceExporterRemoteExporterを構成し、以前に使用した HttpInvokerServiceExporter を置き換えて、サービスを公開しましょう。

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

これで、サーバーを起動して、クライアントを準備している間、サーバーをアクティブに保つことができます。

3.2. クライアントアプリケーション

クライアントを実装しましょう。 ここでも、変更は非常に簡単です。HttpInvokerProxyFactoryBeanHessianProxyFactoryBeanに置き換える必要があります。

@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 は、 XML に基づく、Cauchoのもう1つの軽量プロトコルです。 Caucho はずっと前にそれを維持することをやめました、そしてそのために、それがすでに存在しているとしても、そのサポートは最新のSpringリリースで非推奨になりました。

したがって、すでに配布されており、別の Spring Remoting 実装に簡単に移行できないアプリケーションがある場合にのみ、Burlapを合理的に使用し続ける必要があります。

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. クライアントの実装

同様に、クライアント側でHessianBurlapに交換し、HessianProxyFactoryBeanBurlapProxyFactoryBeanに変更できます。

@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 にあり、HessianBurlapおよびJUnitテストの両方のクライアントがあります。 ]CabBookingServiceTest。javaは、サーバーとクライアントの両方の実行を処理します。