hessian(转)

Hessian——轻量级远程调用方案

Hessian是caucho公司开发的一种基于二进制RPC协议(Remote Procedure Call protocol)的轻量级远程调用框架。具有多种语言的实现,但用的最多的当然是Java实现 :)

Creating a Hessian service using Java has four steps:

1、Create an Java interface as the public API
2、Create a client using HessianProxyFactory
3、Create the Service implementation class
4、Configure the service in your servlet engine.

下面,我们来实现1个例子:

首先下载hessian-4.0.37.jar,服务端和客户端都要用的。

然后编写程序。

server端:

package com.lin.hessian.service;
public interface Basic {
    public String sayHello();
}

package com.lin.hessian.service;
public class BasicService implements Basic{
    private String message = "balalala!";
    @Override
    public String sayHello() {
        return message;
    }
}

package com.lin.hessian.service;
import com.caucho.hessian.server.HessianServlet;
public class LinyService extends HessianServlet implements Basic{
    private String message = "wowwowowowowow";
    @Override
    public String sayHello() {
        return message;
    }
}

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>HessianWeb</display-name>
  <servlet>
        <servlet-name>hello</servlet-name>
        <servlet-class>com.caucho.hessian.server.HessianServlet</servlet-class>
        <init-param>
            <param-name>home-class</param-name>
            <param-value>com.lin.hessian.service.BasicService</param-value>
        </init-param>
        <init-param>
            <param-name>home-api</param-name>
            <param-value>com.lin.hessian.service.Basic</param-value>
        </init-param>
    </servlet>

    <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>

    <servlet>
        <servlet-name>liny</servlet-name>
        <servlet-class>com.lin.hessian.service.LinyService</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>liny</servlet-name>
        <url-pattern>/liny</url-pattern>
    </servlet-mapping>
</web-app>

在服务端其实定义了两个service: BasicService和LinyService,不同之处在于是否继承HessianServlet,BasicService是一个pojo,而LinyService是一个servlet。

在web.xml里,BasicService是通过home-class和home-api两个参数传递给HessianServlet,然后将HessianServlet配置到web.xml的<servlet>里来实现服务配置到容器的。

而LinyService是直接将自己(它自己就是个Servlet)配置到web.xml的<servlet>来实现配置到容器。如果我们在一个应用中要实现多个hessian服务,应该采用这种方式。

下面来看看客户端:

package com.liny.hessian.service;
public interface Basic {
    public String sayHello();
}

package com.lin.hessian.client;
import java.net.MalformedURLException;
import com.caucho.hessian.client.HessianProxyFactory;
import com.liny.hessian.service.Basic;
public class HessianClient {
    public static void main(String[] args) throws MalformedURLException{     //String url = "http://localhost:8080/HessianWeb/hello";
        String url = "http://localhost:8080/HessianWeb/liny";
        HessianProxyFactory factory = new HessianProxyFactory();
        Basic basic = (Basic)factory.create(Basic.class, url);
        System.out.println(basic.sayHello());
    }
}

客户端要定义一个同服务端一模一样的接口Basic,然后通过HessianProxyFactory获得代理,并调用远程服务的方法。

注意:这里笔者故意将客户端与服务端的Basic接口的包路径定义成不一样(一个是com.liny.hessian.service,一个是com.lin.hessian.service),经过验证这样是可以的,但是推荐最好两者一模一样。

日子过得艰苦,但更要坚韧不拔,每天都能进步一点的话,许多天之后必能精进。

时间: 2024-10-21 22:22:08

hessian(转)的相关文章

hessian与spring的结合

对于EJB将被取代的说法已经比比皆是了,虽然我不认同吧,但是实话实说对于大多数的项目来说使用企业级的java bean还真的是没什么必要,因为太重量级了,上篇博客不是说了一下简单的hessian吗,这里就来说说hessian和spring的结合. 1.引入jar包 需要的jar包有: 2.配置remote-servlet.xml文件(在src目录下) <?xml version="1.0" encoding="UTF-8"?> <beans xml

基于梯度场和Hessian特征值分别获得图像的方向场

一.?我们想要求的方向场的定义为: 对于任意一点(x,y),该点的方向可以定义为其所在脊线(或谷线)位置的切线方向与水平轴之间的夹角: 将一条直线顺时针或逆时针旋转 180°,直线的方向保持不变. 因此,指纹方向场的取值范围一般定义为[0,π)或[-π/2, π/2),前闭后开区间的意义在于保证方向场取值的唯一性. 二.基于梯度场计算方向场 论文 <Analyzing Oriented Patterns> 网址:https://wenku.baidu.com/view/f741d931cc17

Hessian序列化的一个潜在问题

一. 最近的用rpc框架的时候,当用hessian序列化对象是一个对象继承另外一个对象的时候,当一个属性在子类和有一个相同属性的时候,反序列化后子类属性总是为null. 二. 示例代码: DTO对象 public class User implements Serializable { private String username ; private String password; private Integer age; } public class UserInfo extends Us

hessian序列化

1.什么是序列化 (1)序列化,是一种把对像流化的机制,即把对像写入二进制数组(byte[]),传输到另一个地方,将其读 出来之后,进行反序列化,得到对象含状态(状态就是属性的值) (2)为什么要序列化.方便在网络间进行传输,并且可以把对象持久化到数据库或者文件中. 2.什么是hessian Hessian是一个序列化协议.它的优点在于,比java原生的序列化更快,序列化出来的数据更小. (为什么比java快,体积小?)

Hessian原理分析

一.      远程通讯协议的基本原理 网络通信需要做的就是将流从一台计算机传输到另外一台计算机,基于传输协议和网络 IO 来实现,其中传输协议比较出名的有 http . tcp . udp 等等, http . tcp . udp 都是在基于 Socket 概念上为某类应用场景而扩展出的传输协议,网络 IO ,主要有 bio . nio . aio 三种方式,所有的分布式应用通讯都基于这个原理而实现,只是为了应用的易用,各种语言通常都会提供一些更为贴近应用易用的应用层协议. 二.      应

Java实现 Hessian接口测试

Hessian接口测试简单单例 Hessian是基于Binary –RPC(二进制远程过程调用协议)进行通讯. Hessian就是把Java对象转变成字节序列,然后通过Http传输到目标服务器上(主机),主机收到这个字节序列后,按照一定的协议标准进行反序列,提交给对应的服务处理.处理完成以后以同样的方式返回数据. 环境准备: Eclipse Hessian.jar 所测接口的API包 接口请求地址(含端口号) 接口文档说明 接口服务端开启 一.             参数设置 根据接口文档定义

hessian 通信,C#客户端调用java服务端服务

Hessian是一个轻量级的remoting onhttp工具,使用简单的方法提供了RMI的功能. 相比WebService,Hessian更简单.快捷.采用的是二进制RPC协议,因为采用的是二进制协议,所以它很适合于发送二进制数据(来自百度) 本次通过hessian简单实现C#调用java服务,并返回java方法的结果,其中C#以及java方法的参数可以是Entity. 1. 依赖 java包及DLL   1.1 hessian-4.0.37.jar   1.2 Hessiancsharp.d

EJB、RMI、XMLRPC、Hessian、Thrift 、Protobuf

Java中实现分布式的方式有:EJB.RMI.XMLRPC.Web Service.Hessian.Thrift .Protobuf.NIO(Netty.Mina) EJB 优势:可扩展性好,安全性强,支持分布式事务处理. 劣势:不能跨语言:配置相对复杂,不同J2EE容器之间很难做无缝迁移. RMI 优势:面向对象的远程服务模型:基于TCP协议上的服务,执行速度快. 劣势:不能跨语言:每个远程对象都要绑定端口,不易维护:不支持分布式事务JTA,RMI框架对于安全性.事务.可扩展性的支持非常有限.

Hessian入门(包括与Spring集成)

A.纯Hessian接口开发步骤 Hessian-JAVA服务器端必须具备以下几点: * 1.包含Hessian的jar包(hessian-4.0.37.jar) * 2.设计一个接口,用来给客户端调用(IHessian.java) * 3.实现该接口的功能(IHessianImpl.java) * 4.配置web.xml,配好相应的Servlet(web.xml) * 5.对象必须实现Serializable接口(Foo.java) Hessian-JAVA服务端代码预览图: 1.包含Hess

Jacobian矩阵和Hessian矩阵

1.Jacobian矩阵 在矩阵论中,Jacobian矩阵是一阶偏导矩阵,其行列式称为Jacobian行列式.假设 函数 $f:R^n \to R^m$, 输入是向量 $x \in R^n$ ,输出为向量 $f(x) \in R^m$ ,那么对应的Jacobian矩阵 $J$ 是一个 $m*n$ 的矩阵,其定义如下: \[\mathbf J = \frac{d\mathbf f}{d\mathbf x} = \begin{bmatrix}\dfrac{\partial \mathbf{f}}{\