Spring Hessian rpc

5991 ワード

一、概要
     Hessianは、Caucho Technologyによって開発された軽量級のバイナリRPCプロトコルであり、バイナリプロトコルを採用しているので、バイナリデータの送信に適しています.Hessian-3.0.20バージョンを例にとって、SpringにHessianを統合する方法を説明します.
二、配置の詳細
     1、web.xmlにおける配置
Xmlコード 
 
  <context-param>  
        <param-name>contextConfigLocation</param-name>  
        <param-value>  
            /WEB-INF/config/applicationContext.xml,  
            /WEB-INF/Hessian-servlet.xml  
        </param-value>  
    </context-param>  
              
    <servlet>  
        <servlet-name>Hessian</servlet-name>  
        <servlet-class>  
            org.springframework.web.servlet.DispatcherServlet  
        </servlet-class>  
        <load-on-startup>1</load-on-startup>  
    </servlet>  
              
    <servlet-mapping>  
        <servlet-name>Hessian</servlet-name>  
        <url-pattern>/hessian/*</url-pattern>  
    </servlet-mapping>  
       1)HessianはリモートサービスがServletを通じて暴露されることを要求しています.だから私たちはSpringのDispactch Servletを使ってサービスを暴露します.
       2)私たちはWEB-INFディレクトリの下でファイル名フォーマットを[Servlet Name]-servlet.xmlのプロファイルを作成しなければなりません.servlet-nameをHessianとして設定しますので、ここでHessian-servlet.xmlというファイルを作成します.
    2、Hessian-servlet.xmlファイルの配置
Xmlコード
  
 <!--     -->  
    <bean id="hessianService" class="com.cjm.webservice.hessian.HessianServiceImpl"/>  
              
    <!--      -->  
    <bean name="/hessianService" class="org.springframework.remoting.caucho.HessianServiceExporter">  
        <property name="service" ref="hessianService"/>  
        <property name="serviceInterface">  
            <value>  
                com.cjm.webservice.hessian.HessianService  
            </value>  
        </property>  
    </bean>  
        1)実際の業務類はSpringのHessian ServiceExport類によってクライアントに暴露されます.
        2)サービス対応の業務類を指定します.
        3)serviceInterface:業務種類を指定してどのインターフェースを実現しますか?Springはインタフェース向けにプログラミングすることを推奨していますので、Hessianサービスはインターフェースを通じて露出することを提案しています.
        4)Hessianのリモートサービス名は/hessian Serviceです.筆者が使っているwebサーバはTomcat-5.5.5.23で、ポートは8888で、webアプリケーションの名前はspring 2です.リモートサービスのURLは以下の通りです.http://localhost:8888/spring2/hessian/hessianService.
    3、業務類ソースコード
Javaコード
  
 //   :  
    public interface HessianService {  
        public String sayHello(String username);  
        public HessianModel getHessianModel(String username, String password);  
    }  
              
    //   :  
    public class HessianServiceImpl implements HessianService {  
        public String sayHello(String username){  
            return "Hello " + username;  
        }   
      
        public HessianModel getHessianModel(String username, String password) {  
            return new HessianModel(username, password);  
        }  
    }  
              
    //     :  
    public class HessianModel implements Serializable{  
        private String username;  
        private String password;  
                      
        public HessianModel(String username, String password){  
            this.username = username;  
            this.password = password;  
        }  
        ……  
    }  
    4、クライアント呼び出しサービスの例
         1)Jspページでサービスを呼び出す
Javaコード 
 
  String url = "http://localhost:8888/spring2/hessian/hessianService";  
    HessianProxyFactory factory = new HessianProxyFactory();  
    HessianService hessianServer =   
                (HessianService)factory.create(HessianService.class, url);  
    String ret = hessianServer.sayHello("Raymond.chen");  
    out.print(ret);  
              
    HessianModel model = hessianServer.getHessianModel("uid", "pwd");  
    out.print("username: " + model.getUsername() + "<br>");  
             A)結果表示:ハローRaymond.chen
             B)クライアントプログラムは、hessian-3.0.20.jarファイルとリモートサービスに対応するインターフェースクラスを参照しなければならない.
             C)呼び出した遠隔サービス方法がカスタムクラスに戻る場合、このカスタムクラスはSerializableインターフェースを実現しなければならない.
       2)Spring環境でサービスを呼び出す
Xmlコード
  
 <bean id="testHessianService" class="org.springframework.remoting.caucho.HessianProxyFactoryBean">  
        <property name="serviceUrl" value="http://localhost:8888/spring2/hessian/hessianService"/>  
        <property name="serviceInterface" value="com.cjm.webservice.hessian.HessianService"/>  
    </bean>  
                  
    <!- Struts2      -->  
    <bean id="orgAction" class="com.cjm.web.action.OrganizationAction" parent="baseAction">  
        <property name="organizationService" ref="organizationService"/>  
        <property name="testHessianService" ref="testHessianService"/>  
    </bean>  
    OrganizationAction.javaのソースコードの一部:
Javaコード
    private HessianService testHessianService;  
                  
    HessianModel model = testHessianService.getHessianModel("uid", "pwd");  
    System.out.println("username: " + model.getUsername()); 
        A)HessianProxyFactoryBeanを使ってサービスを接続します.
        B)serviceUrl:リモートサービスのURL.
        C)serviceInterface:サービス対応のインターフェース類.