<bean id="bookService"
class="com.service.impl.BookServiceImpl">
<property name="bookDao" ref="bookDao"></property>
</bean>
<bean name="/BookService" factory-bean="remoteFactory" factory-method="getExporter">
<property name="service" ref="bookService"></property>
<property name="serviceInterface" value="com.service.interf.IBookService" />
</bean>
<bean id="bookService" factory-bean="remoteFactory" factory-method="getAccessor">
<property name="serviceUrl" value="${remote.service.address}/BookService" />
<property name="serviceInterface" value="com.service.interf.IBookService" />
</bean>
<!-- remote factory -->
<bean id="remoteFactory"
class="com.RemoteFactory"
factory-method="getInstance">
<constructor-arg value="1"></constructor-arg>
</bean>
public class RemoteFactory {
private RemoteFactory() {
}
/**
* 远程代理集合
*/
protected static Map<Integer, Class<? extends UrlBasedRemoteAccessor>> remoteProxyMap = new HashMap<Integer, Class<? extends UrlBasedRemoteAccessor>>();
/**
* 远程导出集合
*/
protected static Map<Integer, Class<? extends RemoteExporter>> remoteExportMap = new HashMap<Integer, Class<? extends RemoteExporter>>();
static {
remoteProxyMap.put(1, HessianProxyFactoryBean.class);
remoteProxyMap.put(2, BurlapProxyFactoryBean.class);
remoteProxyMap.put(3, HttpInvokerProxyFactoryBean.class);
remoteProxyMap.put(4, RmiProxyFactoryBean.class);
remoteExportMap.put(1, HessianServiceExporter.class);
remoteExportMap.put(2, BurlapServiceExporter.class);
remoteExportMap.put(3, HttpInvokerServiceExporter.class);
remoteExportMap.put(4, RmiServiceExporter.class);
}
/**
* 返回默认实例(Hessian)
*
* @return
*/
public static RemoteFactory getInstance() {
return new RemoteFactory();
}
/**
* 根据类型返回实例 1: Hessian 2: Burlap 3: HttpInvoker 4: Rmi
*
* @param type
* @return
*/
public static RemoteFactory getInstance(int type) {
RemoteFactory factory = new RemoteFactory();
factory.setType(type);
return factory;
}
private int type = 1;
/**
* @param type
*/
public void setType(int type) {
this.type = type;
}
/**
* 返回远程代理
*
* @return
*/
public UrlBasedRemoteAccessor getAccessor() {
try {
Class<? extends UrlBasedRemoteAccessor> cls = remoteProxyMap
.get(this.type);
if (cls == null) {
throw new NullPointerException("can not find type " + this.type
+ " RemoteAccessor.");
}
UrlBasedRemoteAccessor accessor = cls.newInstance();
if (accessor instanceof HessianProxyFactoryBean) {
//nginx 报411错误
HessianProxyFactoryBean hessianAccessor = (HessianProxyFactoryBean)accessor;
hessianAccessor.setChunkedPost(false);
}
return accessor;
} catch (InstantiationException e) {
log.error(e);
} catch (IllegalAccessException e) {
log.error(e);
}
return null;
}
/**
* 返回远程导入
*
* @return
*/
public RemoteExporter getExporter() {
try {
Class<? extends RemoteExporter> cls = remoteExportMap
.get(this.type);
if (cls == null) {
throw new NullPointerException("can not find type " + this.type
+ " RemoteExporter.");
}
return cls.newInstance();
} catch (InstantiationException e) {
log.error(e);
} catch (IllegalAccessException e) {
log.error(e);
}
return null;
}
}
分享到:
相关推荐
Hessian远程调用框架是基于Java的轻量级RPC(Remote Procedure Call)解决方案,它允许开发者在分布式系统中实现高效、便捷的跨网络对象方法调用。本教程将引导你入门Hessian,通过一个简单的JAVA demo来理解其工作...
在IT行业中,远程调用是一种常见的技术,使得客户端可以跨网络调用远程服务器上的方法,就像调用本地方法一样方便。Hessian是Apache项目下的一个轻量级的RPC(Remote Procedure Call,远程过程调用)框架,它提供了...
本教程将详细介绍"Hessian远程调用RPC最简单demo",包括服务器端服务发布和客户端服务调用的实现,以及所需资源。 首先,我们来看一下`hessian-4.0.7.jar`这个文件。这是Hessian库的核心组件,包含了实现Hessian...
4. **执行远程调用**:现在,客户端可以像调用本地对象一样调用服务端的方法。例如,调用`CalculatorService`的`add`方法进行加法运算。Hessian会自动处理网络传输、序列化和反序列化的过程。 在提供的压缩包文件...
Hessian是一种二进制Web服务协议,它提供了一种轻量级、高效的远程方法调用方式。它基于HTTP协议,可以将Java对象序列化为二进制格式,减少了网络传输的数据量,从而提高了通信效率。 Spring框架提供了强大的依赖...
Hessian支持序列化Java对象,使得远程调用如同本地调用一样便捷,极大地提高了开发效率。 一、Hessian框架的核心特性: 1. **二进制协议**:Hessian采用高效的二进制协议,与基于文本的HTTP协议相比,数据传输量更...
首先,我们需要定义一个服务接口,例如`HelloService`,包含一个或多个方法,这些方法将被远程调用。然后,我们需要实现这个接口并部署为一个Hessian服务。在服务器端,通过HessianServlet来暴露这个服务,客户端则...
在分布式系统中,远程操作是常见且至关重要...总的来说,Hessian远程操作是分布式系统中一个实用的通信手段,它简化了远程调用的实现,提升了效率。通过学习和掌握Hessian,开发者可以更加灵活地构建和扩展分布式应用。
Spring通过HessianProtocolFactoryBean实现了Hessian服务的消费和发布,使得远程调用更加高效便捷。 4. **HTTP Invoker**:HTTP Invoker是Spring为Java对象提供的另一种远程调用方案,它基于HTTP协议,但提供了类似...
《Hessian远程调用技术详解》 在分布式系统中,远程调用是常见的通信方式,它使得服务可以跨越网络边界,实现组件之间的交互。Hessian,由Caucho公司开发,是一种高效的二进制RPC(Remote Procedure Call)协议,常...
1. 创建服务接口:定义远程调用的服务方法,例如: ```java public interface MyService { String sayHello(String name); } ``` 2. 实现服务接口:提供服务的具体实现。 ```java @Service("myService") public ...
4. **透明性**:Hessian允许远程调用像本地方法调用一样,提高了开发者的生产力。 ### 使用场景 Hessian适用于以下场景: 1. **微服务通信**:在微服务架构中,服务间需要频繁进行轻量级的通信,Hessian可以提供...
这种协议的优点在于,它可以将数据序列化为紧凑的字节流,减少了网络传输的数据量,从而提高了远程调用的性能。Hessian支持多种语言,包括Java、PHP、Python等,这使得跨平台的集成变得容易。 在提供的压缩包中,...
例如,在`hessionclient`目录下,可能有客户端代码,通过URL连接到服务端,创建Hessian Proxy,并执行远程调用。 在实际应用中,Hessian Demo可能包括以下步骤: 1. **创建服务接口**:定义一个Java接口,声明需要...
Hessian不仅支持基本数据类型,还能处理复杂对象和接口,使得服务端与客户端之间能透明地调用方法。 HessianServer文件通常包含了服务端的实现,它定义了对外提供的服务接口。开发者需要创建一个实现了特定业务逻辑...
Spring支持多种远程调用协议,如RMI(Remote Method Invocation)、Hessian、 Burlap以及HTTP Invoker等。这些协议允许我们跨越网络边界,像调用本地方法一样调用远程服务。 在本实例中,我们关注的是HTTP Invoker...
Hessian是一种高效的二进制RPC(Remote Procedure Call)协议,由Caucho Technology开发,旨在提供轻量级、高效的远程调用服务。在这个专题中,我们将以hessian-4.0.33.jar为例,详细探讨Hessian框架的核心特性和...
Hessian的轻量级特性使其在需要高效远程调用的场景中表现出色。与Java RMI相比,Hessian无需注册服务,也不需要客户端和服务端共享相同的类库,这降低了部署的复杂性。同时,由于Hessian使用二进制格式,相比于基于...
在这个场景中,Hessian4被用作一个轻量级的RPC(远程过程调用)协议,它允许应用程序在不同的Java虚拟机之间透明地调用方法。Spring4则扮演了管理和协调这些调用的角色,提供了一种优雅的方式去配置和管理服务。 ...