Spring Remoting: Hessian--转

原文地址:http://www.studytrails.com/frameworks/spring/spring-remoting-hessian.jsp

Concept Overview

The previous tutorial presents an overview of spring remoting and lists down various remoting protocols supported by Spring. In this tutorial we look at Spring support for Hessian. Hessian is a web service protocol that transfers binary data between a remote service and its client. Hessian has been released by Caucho Technology. It requires that the web service be hosted on an http server. The client uses HTTP protocol to invoke remote methods on the server. The important classes are : - 
org.springframework.remoting.caucho.HessianServiceExporter - This exports the specified service as a servlet based http request handler. Hessian services exported by this class can be accessed by any hessian client. 
org.springframework.remoting.caucho.HessianProxyFactoryBean - This is the factory bean for Hessian clients. The exposed service is configured as a spring bean. The ServiceUrl property specifies the URL of the service and theServiceInterface property specifies the interface of the implemented service.

Sample Program Overview

The example below is a GreetingService implemented as a remote Hessian service. 

Required Libraries

  • aopalliance.jar
  • commons-logging.jar
  • log4j.jar
  • org.springframework.aop.jar
  • org.springframework.asm.jar
  • org.springframework.beans.jar
  • org.springframework.context.jar
  • org.springframework.context.support.jar
  • org.springframework.core.jar
  • org.springframework.expression.jar
  • hessian-3.1.5.jar

Interaction Flow

  • Client sends a message call
  • This message call is handled by a Hessian Proxy created by HessianProxyFactoryBean
  • The Hessian Proxy converts the call into a remote call over HTTP
  • The Hessian Service Adapter created by HessianServiceExporter intercepts the remote call over HTTP
  • It forwards the method call to Service

Hessian Server Code Package Structure

Hessian Server Source Code

Create the GreetingService interface as shown below. 
Create a method named getGreeting() that takes a name as a parameter and returns the greeting message (see line 5 below).

GreetingService.java

1

2

3

4

5

6

package com.studytrails.tutorials.springremotinghessianserver;

public interface GreetingService {

String getGreeting(String name);

}

Create a class GreetingServiceImpl as shown below. 
It implements the GreetingService interface (described earlier) 
Implement the getGreeting() method by sending a greeting message (see lines 6-8 below).

GreetingServiceImpl.java

1

2

3

4

5

6

7

8

9

10

package com.studytrails.tutorials.springremotinghessianserver;

public class GreetingServiceImpl implements GreetingService{

@Override

public String getGreeting(String name) {

return "Hello " + name + "!";

}

}

Create the hessian-servlet.xml file (see below).

Declare the ‘greetingService‘ (see lines 14-15 below).

Export the ‘greetingService‘ using Spring‘s HessianServiceExporter class (see lines 17-21 below). 
Note the following properties of HessianServiceExporter class:

  • service: the service class bean which shall handle the Hessian call (see line 18 below)
  • serviceInterface: The interface to be used by Spring to create proxies for Hessian (see line 19 below)
hessian-servlet.xml

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

<?xml version="1.0" encoding="UTF-8" ?>

<beans xmlns="http://www.springframework.org/schema/beans"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"

xmlns:context="http://www.springframework.org/schema/context"

xsi:schemaLocation="http://www.springframework.org/schema/mvc

http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd

http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans-3.0.xsd

http://www.springframework.org/schema/context

http://www.springframework.org/schema/context/spring-context-3.0.xsd">

<bean id="greetingService"

class="com.studytrails.tutorials.springremotinghessianserver.GreetingServiceImpl" />

<bean name="/greetingService.http"

class="org.springframework.remoting.caucho.HessianServiceExporter">

<property name="service" ref="greetingService" />

<property name="serviceInterface" value="com.studytrails.tutorials.springremotinghessianserver.GreetingService"/>

</bean>

</beans>

Create the web.xml file (see below).

Create the servlet mapping for the url pattern ‘*.http‘ (see line 16 below) for Spring‘s DispatcherServlet (see line 10 below)

web.xml

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

<!DOCTYPE web-app PUBLIC

"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"

"http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>

<display-name>Spring Remoting: Hessian Server</display-name>

<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>*.http</url-pattern>

</servlet-mapping>

</web-app>

Hessian Client Code Package Structure

Hessian Client Source Code

Create the GreetingService interface as shown below. 
Copy the GreetingService interface created for Hessian Server (described above) and paste it in Hessian Client source code while retaining the java package structure.

Note: For reference, the source code is shown below.

GreetingService.java

1

2

3

4

5

6

package com.studytrails.tutorials.springremotinghessianserver;

public interface GreetingService {

String getGreeting(String name);

}

Create a class TestSpringRemotingHessian shown below to test Spring Hessian Remoting. 
Load spring configuration file (see line 11 below) 
Get a reference to GreetingService using the bean name ‘greetingService‘ (see line 12 below) 
Call the GreetingService.getGreting() method by passing the name ‘Alpha‘ (see line 13 below) 
Print the greeting message (see line 14 below).

TestSpringRemotingHessian.java

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

package com.studytrails.tutorials.springremotinghessianclient;

import org.springframework.context.ApplicationContext;

import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.studytrails.tutorials.springremotinghessianserver.GreetingService;

public class TestSpringRemotingHessian {

public static void main(String[] args) {

ApplicationContext context = new ClassPathXmlApplicationContext("spring-config-client.xml");

GreetingService greetingService = (GreetingService)context.getBean("greetingService");

String greetingMessage = greetingService.getGreeting("Alpha");

System.out.println("The greeting message is : " + greetingMessage);

}

}

Create the spring-config-client.xml file (see below). 
Declare the ‘greetingService‘ using Spring‘s HessianProxyFactoryBean class (see lines 13-16 below). 
Note the following properties of HessianProxyFactoryBean class:

  • serviceUrl : refers the URL of the remote service (see line 14 below). 
    Note URL part ‘greetingService‘ corresponds to bean name property of HessianServiceExporter bean defined in hessian-servlet.xml (defined earlier)
  • serviceInterface: The interface to be used by Spring to create proxies for Hessian (see line 15 below)
spring-config-client.xml

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"

xmlns:context="http://www.springframework.org/schema/context"

xsi:schemaLocation="

http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans-3.0.xsd

http://www.springframework.org/schema/aop

http://www.springframework.org/schema/aop/spring-aop-3.0.xsd

http://www.springframework.org/schema/context

http://www.springframework.org/schema/context/spring-context-3.0.xsd">

<bean id="greetingService" class="org.springframework.remoting.caucho.HessianProxyFactoryBean">

<property name="serviceUrl" value="http://localhost:8080/springremotinghessianserver/greetingService.http"/>

<property name="serviceInterface" value="com.studytrails.tutorials.springremotinghessianserver.GreetingService"/>

</bean>

</beans>

Running Sample Program

Hessian Server Sample Program

This sample program has been packaged as a jar installer which will copy the source code (along with all necessary dependencies)on your machine and automatically run the program for you as shown in the steps below. To run the sampleprogram, you only need Java Runtime Environment (JRE) on your machine and nothing else.

Download And Automatically Run Hessian Server Sample Program

  • Save the springremotinghessianserver-installer.jar on your machine
  • Execute/Run the jar using Java Runtime Environment


(Alternatively you can go the folder containing the springremotinghessianserver-installer.jar and execute the jar using java -jar springremotinghessianserver-installer.jar command)

  • You will see a wizard page as shown below

  • Enter the location of the directory where you want the program to install and run (say, C:\Temp)

  • The installer will copy the program on your machine and automatically execute it. The expected output indicating that the program has run successfully on your machine is shown in the image below. 
    This shows that the Hessian Server program has run successfully on your machine

Hessian Client Sample Program

This sample program has been packaged as a jar installer which will copy the source code (along with all necessary dependencies)on your machine and automatically run the program for you as shown in the steps below. To run the sampleprogram, you only need Java Runtime Environment (JRE) on your machine and nothing else.

Download And Automatically Run Hessian Client Sample Program

  • Save the springremotinghessianclient-installer.jar on your machine
  • Execute/Run the jar using Java Runtime Environment


(Alternatively you can go the folder containing the springremotinghessianclient-installer.jar and execute the jar using java -jar springremotinghessianclient-installer.jar command)

  • You will see a wizard page as shown below

  • Enter the location of the directory where you want the program to install and run (say, C:\Temp)

  • The installer will copy the program on your machine and automatically execute it. The expected output indicating that the program has run successfully on your machine is shown in the image below. 
    This shows that the Hessian Client program has run successfully on your machine

Browsing the Program

Hessian Server Sample Code

This source code for this program is downloaded in the folder specified by you (say, C:\Temp) as an eclipse project called springremotinghessianserver . All the required libraries have also been downloaded and placed in the same location. You can open this project from Eclipe IDE and directly browse the source code. See below for details of the project structure.

Redeploying this sample program in a different web server

The WAR file for this example is available as springremotinghessianserver.war in the download folder specified by you earlier (e.g. C:\Temp). The path for the WAR file is <DOWNLOAD_FOLDER_PATH>/springremotinghessianserver/dist/springremotinghessianserver.war. 
This WAR file can be deployed in any webserver of your choice and example can be executed. 

Hessian Client Sample Code

This source code for this program is downloaded in the folder specified by you (say, C:\Temp) as an eclipse project called springremotinghessianclient . All the required libraries have also been downloaded and placed in the same location. You can open this project from Eclipe IDE and directly browse the source code. See below for details of the project structure.

时间: 2024-10-03 15:48:04

Spring Remoting: Hessian--转的相关文章

Spring使用Hessian实现远程调用

1.Spring中除了提供HTTP调用器方式的远程调用,还对第三方的远程调用实现提供了支持,其中提供了对Hessian的支持. Hessian是由Caocho公司发布的一个轻量级的二进制协议远程调用实现方案,Hessian也是基于HTTP协议的,其工作原理如下: (1).客户端: a.发送远程调用请求: 客户端程序->发送远程调用请求->Hessian客户端拦截器->封装远程调用请求->Hessian代理->通过HTTP协议发送远程请求代理到服务端. b.接收远程调用响应:

Spring整合Hessian

整了一两天,终于把Spring整合Hessian整出来了,现在把这个过程以及过程中遇到的问题记录下来. 其实原理很简单,那么就让我们结合例子来理解吧(随着以后对这方面的理解加深,会随时更新) 声明:本文中使用的例子参考http://blog.csdn.net/harderxin/article/details/22720659 准备工作:去这里下载所依赖的所有jar包 http://download.csdn.net/detail/coincidencewq/8498797 那么开始吧第一部分

Spring整合Hessian访问远程服务

声明:该文章转载自Spring整合Hessian访问远程服务,本人搬过来只是为了记录下学习Hessian的过程,忘此博主理解,在此感谢,等本人有能力了再学一些原创的东东,本人实践了下,hessianServer项目不是web project,由于较菜,花了一个下午才把java project转换成为web project. 项目下载: hessianServer:http://files.cnblogs.com/ontheroad_lee/hessianServer.rar hessianCli

Spring Remoting: HTTP Invoker--转

原文地址:http://www.studytrails.com/frameworks/spring/spring-remoting-http-invoker.jsp Concept Overview In the earlier articles we saw an introduction to spring remoting and its support for RMI, Hessian and Burlap. In this tutorial we look at one more su

Spring Remoting: Remote Method Invocation (RMI)--转

原文地址:http://www.studytrails.com/frameworks/spring/spring-remoting-rmi.jsp Concept Overview Spring provides four ways to develop remote services. Remote services are services hosted on remote servers and accessed by clients over the network. For examp

Spring Remoting: Burlap--转

原文地址:http://www.studytrails.com/frameworks/spring/spring-remoting-burlap.jsp Concept Overview In the earlier tutorials we saw an introduction to Spring remoting and its support for RMI and Hessian. In this tutorial we look at another remoting protoco

Spring集成Hessian

Hessian是一个轻量级的远程调用工具,采用的是Binary RPC协议,很适合于发送二进制数据,基于HTTP具有防火墙穿透能力.Hessian一般是通过Web应用来提供服务,因此非常类似于平时我们用的Web Service.只是它不使用SOAP协议,但相比Web Service而言更简单.快捷. Burlap与Hessian相似,只是Burlap传输的将是XML而不是二进制的数据. RMI很难穿越防火墙,2端都必须基于Java开发,传输对象时还需要考虑对象版本的问题.而Burlap与Hess

Spring Remoting by HTTP Invoker Example--reference

Spring provides its own implementation of remoting service known as HttpInvoker. It can be used for http request than RMI and works well across the firewall. By the help of HttpInvokerServiceExporter and HttpInvokerProxyFactoryBean classes, we can im

Spring与Hessian整合

服务器端开发,分为以下3步: 第一步,在服务端定义好接口和实现 public interface EchoService { String say(String var1); } import com.caucho.hessian.server.HessianServlet; import org.springframework.stereotype.Service; @Service public class EchoServiceImpl implements EchoService { p