bboss 发布和使用hessian服务方法介绍

简介: hessian是一款性能非常不错的RPC通讯组件,最近抽空将bboss和hessian做了个整合,可以简单方便地将bboss ioc管理的组件直接发布为hessian服务,本文详细介绍之。 一、bboss hessian属性 bboss ioc为hessian组件定义了一组扩展属性,说明如...
hessian是一款性能非常不错的RPC通讯组件,最近抽空将bboss和hessian做了个整合,可以简单方便地将bboss ioc管理的组件直接发布为hessian服务,本文详细介绍之。
一、bboss hessian属性
bboss ioc为hessian组件定义了一组扩展属性,说明如下:
hessian:api 服务接口
hessian:servicePort 指定服务标识
				  hessian:serializable xml|bin 序列化类型,默认为bin
				  hessian:debug default false used by serializable="bin".
				  hessian:sendCollectionType used by serializable="bin". default true Set whether to send the Java collection type for each serialized collection.
				  hessian:serializerFactory used by serializable="bin".default com.caucho.hessian.io.SerializerFactory


服务定义示例:
	<property name="tokenservice" hessian:servicePort="tokenService"
	class="com.demo.common.action.TokenController" />

<property name="tokenservicebin" hessian:servicePort="tokenService" 
hessian:debug="true" hessian:sendCollectionType="true" 
hessian:serializerFactory="com.caucho.hessian.io.SerializerFactory"
	class="com.demo.common.action.TokenController" />

<property name="tokenserviceforxml" hessian:servicePort="tokenService"  
hessian:serializable="xml" 
	class="com.demo.common.action.TokenController" />


这些服务定义只需要放置在ioc配置文件中即可,通过 bboss ioc容器装载和实例化

二、hessian服务部署
依托bboss ioc模块,hessian服务发布非常简单,首先配置hessian 服务dispatchservlet用来接收hessian服务调用请求:
服务名称来自请求参数的配置方法
在web.xml文件中配置HessionDispatchServlet
<servlet>
					<servlet-name>HessionRemote</servlet-name>
					<servlet-class>org.frameworkset.spi.remote.hession.HessionDispatchServlet</servlet-class>
					
				</servlet>
				<servlet-mapping>
					<servlet-name>HessionRemote</servlet-name>
					<url-pattern>/hessian</url-pattern>
				</servlet-mapping>

客户端通过以下方式传递服务名称:
String url = "http://10.25.192.142:8081/context/hessian?service=tokenService";
CommonUserManagerInf tokenService = (CommonUserManagerInf) factory.create(CommonUserManagerInf.class, url);
		Result result = tokenService.getUserByUserAccount("yinbp");


服务名称来自请求地址(restful)的配置方法
<servlet>
		<servlet-name>HessionRemote</servlet-name>
		<servlet-class>org.frameworkset.spi.remote.hession.HessionDispatchServlet</servlet-class>
		<init-param>
			<param-name>restful</param-name>
			<param-value>true</param-value>
		</init-param>
	</servlet>
	<servlet-mapping>
		<servlet-name>HessionRemote</servlet-name>
		<url-pattern>/hessian/*</url-pattern>
	</servlet-mapping>


客户端通过以下方式传递服务名称:
String url = "http://localhost/hessian/commonuserService";
		CommonUserManagerInf tokenService = (CommonUserManagerInf) factory.create(CommonUserManagerInf.class, url);
		Result result = tokenService.getUserByUserAccount("yinbp");


这样所有的bboss ioc容器中的组件(这些组件需要实现特定的服务接口)即可作为hessian服务接收客户端调用了。

三、客户端调用hessian服务
定义服务url
String url = "http://localhost:8080/context/hessian?container=bboss.hessian.mvc&containertype=mvc&service=basicservice";//指定容器标识和容器类型及服务标识
url = "http://localhost:8080/context/hessian?service=basicservice";//默认获取mvc容器中的组件
url参数说明
container:服务端ioc容器标识,一般是ioc容器根xml文件对应的类包路径,
   例如: org/frameworkset/spi/remote/hession/server/hessian-service.xml
               mvc类型容器值为bboss.hessian.mvc(也是container的默认值)
containertype: 容器类型
mvc mvc容器
simple 对应ioc容器类型为DefaultApplicationContext
    其他值 对应ioc容器类型为ApplicationContext
service:服务标识,ioc组件的名称
创建bin模式客户端代理
   
HessianProxyFactory factory = new HessianProxyFactory();
			    ServiceInf basic = (ServiceInf) factory.create(org.frameworkset.spi.remote.hession.server.ServiceInf.class, url);
			
			    System.out.println("Hello: " + basic.hello("John"));

创建xml模式客户端代理
   
BurlapProxyFactory factory = new BurlapProxyFactory();
			    ServiceInf basic = (ServiceInf) factory.create(org.frameworkset.spi.remote.hession.server.ServiceInf.class, url);
			
			    System.out.println("Hello: " + basic.hello("John"));

    通过bboss-ioc配置和获取客户端
<property name="clientservice" factory-class="com.caucho.hessian.client.HessianProxyFactory" factory-method="create">
					<construction>
						<property value="org.frameworkset.spi.remote.hession.server.ServiceInf"/>		
						<property value="http://localhost:8080/context/hessian?service=basicservice"/>	
					</construction>
				</property>

   
DefaultApplicationContext context = DefaultApplicationContext.getApplicationContext("org/frameworkset/spi/remote/hession/client/hessian-client.xml");
				//获取客户端组件实例
				ServiceInf basic = context.getTBeanObject("clientservice", ServiceInf.class);

使用bboss工厂模式,调用HessianProxyFactory的create方法创建hessian服务客户端调用组件,同时我们可以采用bboss ioc依赖注入特征,将hessian客户端的相关参数(connectionTimeout,readTimeout等)设置到HessianProxyFactory中.
org/frameworkset/spi/remote/hession/client/hessian-client.xml

ok,bboss 发布和使用hessian服务方法就介绍到此,欢迎大家留言交流。
目录
相关文章
|
3月前
|
Java
JDK序列化原理问题之Hessian框架不支持writeObject/readObject方法如何解决
JDK序列化原理问题之Hessian框架不支持writeObject/readObject方法如何解决
|
SQL 存储 Java
Java序列化案例demo(包含Kryo、JDK原生、Protobuf、ProtoStuff以及hessian)(一)
Java序列化案例demo(包含Kryo、JDK原生、Protobuf、ProtoStuff以及hessian)(一)
Java序列化案例demo(包含Kryo、JDK原生、Protobuf、ProtoStuff以及hessian)(一)
|
Dubbo 算法 安全
Java序列化案例demo(包含Kryo、JDK原生、Protobuf、ProtoStuff以及hessian)(二)
Java序列化案例demo(包含Kryo、JDK原生、Protobuf、ProtoStuff以及hessian)(二)
Java序列化案例demo(包含Kryo、JDK原生、Protobuf、ProtoStuff以及hessian)(二)
|
Dubbo Java 应用服务中间件
Dubbo3实践:基于 IDL 的 Triple 协议 Pojo 序列化兼容模式
这篇教程会通过从零构建一个简单的工程来演示如何基于 POJO 方式使用 Dubbo Triple, 在应用不改变已有接口定义的同时升级到 Triple 协议。**此模式下 Triple 使用方式与 Dubbo 协议一样。** 具体用例可以参考:[dubbo-samples-triple/pojo](https://github.com/apache/dubbo-samples/tree/mast
395 0
|
Dubbo Java 应用服务中间件
SpringBoot整合Dubbo的第二种方式——API(自定义Configuration配置类)
SpringBoot整合Dubbo的第二种方式——API(自定义Configuration配置类)
SpringBoot整合Dubbo的第二种方式——API(自定义Configuration配置类)
|
XML 负载均衡 Dubbo
手写类似dubbo的rpc框架第一章《自定义配置xml》
本案例通过三个章节来实现一共简单的rpc框架,用于深入学习rpc框架是如何通信的,当前章节主要介绍如何自定义xml文件并进行解析。想解析自定义的xml首先定义自己的xsd文件,并且实现spring的NamespaceHandlerSupport、BeanDefinitionParser,两个方法进行处理。
116 0
|
Dubbo Java 应用服务中间件
Springboot集成Dubbo(以注解形式)
Springboot集成Dubbo(以注解形式)
139 0
|
Java API 网络协议
|
XML Java 数据格式
Spring+Hessian+Maven+客户端调用实例
Hessian是一个采用二进制格式传输的服务框架,相对传统soap web service,更轻量,更快速。官网地址:http://hessian.caucho.com/ 先上个效果图,在客户端界面通过ID查询后调用后台的Hession服务获取用户数据。
934 0
bboss webservice引擎使用方法
bboss webservice引擎使用方法,请参考文档:bboss webservice引擎使用方法
578 0