分散システム開発ツールパッケージ——Hessianに基づくHTTP RPC呼び出し技術

3016 ワード

caucho
Hessian公式サイト:http://hessian.caucho.com/
hessianはバイナリウェブserviceプロトコルです.
Hessianの紹介
Hessianサービスの作成には4つのステップが含まれています.
  • は、公開サービスを提供するためのJavaインターフェースを作成する
  • .
  • HessianProxyFactoryを用いてクライアント
  • を作成する.
  • サービス実現クラス
  • を作成します.
  • サービスをservletエンジンに配置する
  • .
    ハロルドサービス
    public interface BasicAPI {
      public String hello();
    }
    サービスの実現
    public class BasicService extends HessianServlet implements BasicAPI {
      private String _greeting = "Hello, world";
    
      public void setGreeting(String greeting)
      {
        _greeting = greeting;
      }
    
      public String hello()
      {
        return _greeting;
      }
    }
    クライアント実装
    String url = "http://hessian.caucho.com/test/test";
    
    HessianProxyFactory factory = new HessianProxyFactory();
    BasicAPI basic = (BasicAPI) factory.create(BasicAPI.class, url);
    
    System.out.println("hello(): " + basic.hello());
    展開標準web.xml
    
      
       hello
       com.caucho.hessian.server.HessianServlet
        
          home-class
          example.BasicService
        
        
          home-api
          example.Basic
        
      
    
      
        /hello
        hello
      
    
    Hessianプロローグ
    Hessian類は序列化と反前列化に利用できます.
    序文化
    Object obj = ...;
    
    OutputStream os = new FileOutputStream("test.xml");
    Hessian2Output out = new Hessian2Output(os);
    
    out.writeObject(obj);
    os.close();
    反プロローグ
    InputStream is = new FileInputStream("test.xml");
    Hessian2Input in = new Hessian2Input(is);
    
    Object obj = in.readObject(null);
    is.close();
    ベースタイプやStringタイプより複雑なjavaオブジェクトをプログレッシブにするには、必ずオブジェクトがjava.io.Serialzableインターフェースを実現していることを確認します.
    Hessianは大量のデータを処理します.
    分散アプリケーションは大量のバイナリデータを送信する必要がある場合、InputStreamを使用するとより効率的になります.メソッドパラメータの中で最後のパラメータだけがInputStreamである可能性があります.データは呼び出し中に読みます.
    以下はファイルをアップロードするAPIの例です.
    package example;
    
    public interface Upload {
      public void upload(String filename, InputStream data);
    }
    リターン結果がInputStreamである場合、クライアントは、すべてのデータが読み取られ、input streamがオフになるまで、Input Stream.close()メソッドをfinallyブロックで呼び出す必要があります.
        API:
    package example;
    
    public interface Download {
      public InputStream download(String filename, InputStream data);
    }
    
          :
    InputStream is = fileProxy.download("test.xml");
    
    try {
      ... // read data here
    } finally {
      is.close();
    }
    原文は以下の通りですhttp://www.yesdata.net/2018/03/11/hessian/