<o:p></o:p>
在现代 J2EE 企业应用系统中,存在着 Hessian 、 HttpInvoker 、 XFire 、 Axis 等多种形式的远程调用技术。尽管有 Spring 等框架对这些技术进行了封装,降低了使用的复杂度,但对普通程序员而言仍是复杂的——至少需要要掌握这些技术的基础知识。
<o:p></o:p>
无论使用那种技术,其基本原理都是一样的:服务端生成骨架,对外暴露服务;客户端生成服务代理,访问调用服务。通常情况下,生成服务代理的代价比较高昂,这也是我们第一次访问远程服务速度比较慢的原因,为每个请求生成新的服务代理恐怕不是我们所期望的。更何况,如果采用这种方式,就要在代码里针对各种不同的技术(如 XFire 、 HttpInvoker )编写不同的服务生成和调用的处理代码。不仅麻烦,而且容易出错。我想,没有人愿意去直接操作各种框架技术的底层代码,这并不是一个好注意! <o:p></o:p>
<o:p> </o:p>
作为一种替代方案,我们设计了一个“服务池”的功能,或者说“服务工厂”更贴切一点。先看下面这张类图:
如上图所示,针对 HttpInvoker 、 XFire 、 Hessian 等各种远程调用技术,抽象出一个“远程服务池”(服务工厂)既 RemoteServicePool 接口。该接口提供了获取服务及一些其他的辅助功能,并针对 HttpInvoker 、 XFire 、 Hessian 等不同技术提供了相应的具体实现。采用这种方式,开发人员只需在代码中“注入” RemoteServicePool ,并以统一的方式(如 getService() )获取实际的服务,只是针对不同技术在配置上有些须差异而已。该技术的原理非常简单,在应用启动之前把所有存在的服务提供者提供的服务都配置好,并为它们分配一个唯一的 ID 。应用启动之后,框架会自动生成和这些地址相对应的服务代理( ServiceProxy ),这些代理已经是可用的服务,服务获取的细节被完全屏蔽掉,开发者只要知道如何从 RemoteServicePool 中获取服务就可以了。看一下服务池的接口定义:
<o:p>
java 代码
-
-
-
-
-
-
-
-
-
- public interface RemoteServicePool {
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Object getService(String serviceId);
-
- }
xml 代码
- <bean id="userServicePool" class="com. tonysoft .common.XFireRemoteServicePool">
- <property name="serviceInterface">
- <value>com. tonysoft .demo.service.UserServicevalue>
- property>
- <property name="serviceUrls">
- <map>
- <entry key=" server 1 ">
- <value>http://localhost:8080/server1/service/userService?WSDLvalue>
- entry>
- <entry key="server2">
- <value>http://localhost:8080/server2/service/userService?WSDLvalue>
- entry>
- map> J2EE 企业应用系统中,存在着 Hessian 、 HttpInvoker 、 XFire 、 Axis 等多种形式的远程调用技术。尽管有 Spring 等框架对这些技术进行了封装,降低了使用的复杂度,但对普通程序员而言仍是复杂的——至少需要要掌握这些技术的基础知识。 <o:p></o:p>
- property> 接下来看看如何配置服务:
- bean>
最后再来看一下访问服务的代码:
java 代码
-
- public RemoteServicePool userServicePool ;
-
-
-
-
- public void testAddUser() {
-
- UserService userService = null ;
- try {
- userService =(UserService) userServicePool .getService("server2");
- } catch (Exception e){
- throw new RuntimeException( " 获取服务失败,失败原因:" + e);
- }
-
- OperateResult result = userService .addUser( new User( "daodao" , " 技术部" ));
-
- assertEquals(result.isSuccess(), true );
-
- }
该方案还为“双向关联”的系统服务提供了一个很好解决办法。看下面一张图:
如图,系统 B 和系统 C 都调用系统 A 进行付款操作;同时系统 A 要用远程服务向系统 B 或系统 C 进行认证操作,认证操作的接口(契约)都是一样的,业务逻辑可能有所差异。在这种情况下,配置在系统 A 中的认证服务就比较麻烦,因为要根据不同的系统调用认证服务,既从 B 过来的请求要访问 B 的认证服务,从 C 过来的请求要访问 C 的认证服务。用服务池可以很好的解决这个问题,把两个系统( B 、 C )提供的认证服务地址都配置在同一个服务池中,根据不同的 ID (如 B 、 C )来决定使用那个系统的服务。
关于远程调用(XFire/HttpInvoker/Hessian etc.)及远程服务管理的一些随想(中)
关于远程调用(XFire/HttpInvoker/Hessian etc.)及远程服务管理的一些随想(下)
</o:p>
分享到:
相关推荐
通过定义一个`RemoteServicePool`接口,我们可以将具体的远程调用技术(如Hessian、HttpInvoker、XFire)的细节隐藏起来,开发者只需要通过接口方法`getService(String serviceId)`来获取服务,而无需关心服务的实现...
Spring通过RmiProxyFactoryBean支持RMI服务的透明调用,客户端无需关心底层的网络通信细节,只需要像调用本地方法一样调用远程服务。 3. **Hessian**:Hessian是一种轻量级的二进制RPC协议,由Caucho公司开发。它...
在1.2.6版本中,它提供了稳定、高效的服务,为游戏开发者提供了一种便捷的方式来构建和管理游戏网络架构。此压缩包文件包含了多个关键组件,让我们一一解析。 首先,`xfire-all-1.2.6.jar`是核心库文件,它集成了...
xfire-jar包包含了实现这些功能所需的类库,允许开发者通过Java代码与远程Web服务进行交互。 在描述中提到的"Demo样板",通常是一个预配置的示例程序,用于演示如何使用xfire客户端来连接和调用Web服务。然而,由于...
XFire提供了一个动态代理机制,使得我们可以像调用本地方法一样调用远程Web服务。客户端首先会创建一个服务代理,然后通过这个代理调用服务器端的方法。 ```java MyWebService service = (MyWebService) ...
- 访问XFire官方网站(http://xfire.codehaus.org/)下载XFire 1.2.6版本的压缩包。 - 解压压缩包,获取所需的`jar`包。 2. **从MyEclipse安装目录获取`jar`包**: - 从路径`...\myeclipse\eclipse\plugins\...
XFire(现称为CXF)是Java平台上的一个开源框架,专门用于构建和消费Web服务。本篇将深入探讨XFire Web服务的调用代码及其相关知识点。 一、Web服务基础 Web服务基于开放标准,如SOAP(Simple Object Access ...
这种服务可以被任何支持SOAP的客户端所调用,不论它们运行在何种操作系统或编程语言上。 二、XFire介绍 XFire是Apache CXF项目的一个前身,它提供了简单、高效的方式来创建和消费Web服务。XFire利用Java注解来简化...
Xfire是Java中的一个轻量级Web服务框架,它简化了Web服务的开发和部署,支持WSDL(Web Services Description Language)自动生成,使得服务消费者可以方便地找到并调用服务。 标题“Xfire调用WebService无法传递...
在本主题中,我们将深入探讨如何使用xFire来发布Web服务以及如何调用远程服务。 首先,让我们了解xFire的核心功能。xFire是一个基于Java的框架,它提供了对SOAP(Simple Object Access Protocol)协议的强大支持,...
1. **Web服务提供者**:通过XFire,Spring可以轻松地将Java方法暴露为Web服务,开发者只需简单地在方法上添加相应的注解,XFire会自动处理服务的发布和调用。 2. **Web服务消费者**:同样,Spring可以通过XFire来...
这些技术都是Java开发中的重要工具,Spring作为全面的框架提供了服务管理和依赖注入,Hibernate则是流行的ORM(对象关系映射)解决方案,而Xfire是用于构建SOAP Web服务的库。 首先,Spring框架在分布式系统中的...
"Java 使用 XFire 调用 webService 接口" 在本文中,我们将学习如何使用 XFire 框架在 Java 中调用 webService 接口。XFIRE 是一个基于 Java 的开源框架,用于简化 Web 服务的开发和集成。下面,我们将通过一个简单...
这篇博客“Java使用XFire调用WebService接口”显然是讨论如何利用XFire这个开源框架来与Web服务交互。 XFire是Apache CXF项目的前身,它提供了一种简单的方式来创建和消费SOAP Web服务。XFire的强项在于其轻量级和...
XFire是Java平台上的一个开源Web服务框架,它为开发者提供了简单、高效的方式来创建和消费Web服务。本教程将深入探讨如何使用XFire来返回自定义的实体类实例。 首先,了解XFire的基本概念。XFire是Apache CXF项目的...
标题 "spring远程调用和xfire aegis 源代码上传" 涉及到的是在Java开发中使用Spring框架进行远程过程调用(RPC)以及整合XFire和Aegis库来实现服务间的通信。这一主题是分布式系统设计中的一个重要组成部分,特别是...
### XFire开发指南知识点概述 #### 一、XFire简介 - **定义**: XFire是一个高性能的Java SOAP框架,用于构建面向服务架构(SOA)的应用程序。 - **特性**: - 支持多种标准:如SOAP、WSDL、WS-I Basic Profile、WS-...
3. **测试接口**:在MyEclipse中选择工具栏上的`Launch SOAP Web Service Explorer`,在Web Services Explorer窗口的WSDL Page中输入服务地址(如:`http://localhost:8080/Demo/services/IMyService?wsdl`),点击`...
在本案例中,"Xfire的client.zip"是一个包含了Xfire客户端代码的压缩包,主要用于调用Web服务。 Xfire客户端代码是实现与Xfire服务器通信的代码库,它可能包含了多种语言的实现,如Java、C#或Python等。这些代码...
import org.codehaus.xfire.client.XFireProxyFactory; import org.codehaus.xfire.service.Service; import org.codehaus.xfire.service.binding.ObjectServiceFactory; import com.xfire.core.entity.UserInfo; ...