`
tou3921
  • 浏览: 67948 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论

Spring HttpInvoker的封装

阅读更多


Spring HttpInvoker的简单封装,优点如下:

1、客户端无xml配置
2、客户端基于接口调用,无需知道接口的服务名。
(大众型使用方式:接口可以打成jar分发到服务端和客户端程序使用。我是使用maven构建项目,所以建立了一个service-code项目供serviceProject和clientProject引用)
3、服务端只需配置简单的2步骤,后面介绍。

封装文件一共7个类,先分别说下客户端和服务端的使用配置,再解释原理:

SpringMVCApplicationContextUtil.java

SpringRemoteServiceContext.java

RemoteServiceDescService.java

DefaultRemoteServiceDescServiceImpl.java

HttpInvokerRemoteServiceDescContainer.java

HttpInvokerClientServiceFactory.java

RemoteConnectFailureExceptionExt.java

 

客户端调用服务的示例代码如下:

HttpInvokerClientServiceFactory.init();//只需初始化一次
String serverURL = "http://localhost:8080/liangfa-analysis";//服务地址
//获得远程服务TestService,就像是调用本地服务那样(自行捕获通信异常)
TestService testService = HttpInvokerClientServiceFactory.getService(serverURL, TestService.class);
//调用服务
testService.sayHello();
//客户端api是不是很简单?? 只需要一个HttpInvokerClientServiceFactory就搞定了 : )

 

 

服务端的2处配置:

1、配置远程服务文件remoting-servlet.xml,除了配置业务有关的服务(如TestService),需要加入RemoteServiceDescService,服务名约定为“/remote/remoteServiceDesc”

(HttpInvokerRemoteServiceDescContainer中有常量配置)

<!--暴漏远程服务:服务列表描述 required-->
    <bean name="RemoteServiceDescService" class="com.ksource.liangfa.ws.core.util.remote.DefaultRemoteServiceDescServiceImpl">
    </bean>
    <bean name="/remote/remoteServiceDesc" class="org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter">
        <property name="service" ref="RemoteServiceDescService"></property>
        <property name="serviceInterface" value="com.ksource.liangfa.ws.core.util.remote.RemoteServiceDescService"/>
    </bean>

    <!--测试服务-->
    <bean name="/remote/TestService" class="org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter">
        <property name="service" ref="RemoteTestService"></property>
        <property name="serviceInterface" value="com.ksource.liangfa.ws.core.service.datacenter.TestService"/>
    </bean>
......其他服务.......

 
2、初始化服务描述的上下文(remoting-servlet.xml)

SpringRemoteServiceContext.initContext(SpringMVCApplicationContextUtil.getWebApplicationContext(config.getServletContext(), "springServletName"));

 

我的做法是在项目的初始化servlet(SystemInit.init)里调用,如下:
配置web.xm,在项目启动servlet里

<servlet>
        <servlet-name>SystemInit</servlet-name>
        <servlet-class>com.ksource.syscontext.SystemInit</servlet-class>
        <load-on-startup>3</load-on-startup>
  </servlet>

 

  

 public class SystemInit extends HttpServlet {
  
      @Override
      public void init(ServletConfig config) throws ServletException {
		SpringRemoteServiceContext.initContext(SpringMVCApplicationContextUtil.getWebApplicationContext(config.getServletContext(), "springServlet"));
	.......
	.......
	}
  }

  

   
实现思路:

SpringMVCApplicationContextUtil用于获取spring mvc的bean容器,这个容器包含了spring mvc配置文件里配置的bean(同样包含remoting-servlet.xml)

DefaultRemoteServiceDescServiceImpl本身也是暴漏的服务,但他的作用主要是用于描述服务端暴漏的服务,有点类WSDL的意味。

SpringRemoteServiceContext通过bean容器找出暴漏的服务,保存到map中

public class SpringRemoteServiceContext {
 private static Map<String, HttpInvokerServiceExporter> servicesMap;
 public static void initContext(
   ApplicationContext applicationContext) {
  servicesMap = applicationContext.getBeansOfType(HttpInvokerServiceExporter.class);
 }
 public static Map<String, HttpInvokerServiceExporter> getServicesMap(){
  return servicesMap;
 }
}

 
HttpInvokerRemoteServiceDescContainer用于保存一个服务端的全部接口的服务地址。

HttpInvokerClientServiceFactory用于根据接口名称,来获取远程服务对象。
HttpInvokerClientServiceFactory.getService(String serverUrl, Class<T> clazz)方法,会根据
serverUrl来获取HttpInvokerRemoteServiceDescContainer对象,然后通过服务描述来创建HttpInvokerProxyFactoryBean对象,然后HttpInvokerProxyFactoryBean.getObject()来得到远程服务。

 

大致思路如上,整理的比较乱,可参见源码,包名可自行修改后使用。

分享到:
评论
1 楼 BiLaHePan 2017-03-16  
博主,源码不全啊,把maven 构建的项目都发上来。

相关推荐

    spring jar 包详解

    (9) spring-remoting.jar 这个jar文件包含支持EJB、JMS、远程调用Remoting(RMI、Hessian、Burlap、Http Invoker、JAX-RPC)方面的类。 (10) spring-support.jar 这个jar文件包含支持缓存Cache(ehcache)、JCA、...

    最新最全的spring开发包

     这个jar文件包含支持EJB、JMS、远程调用Remoting(RMI、Hessian、Burlap、Http Invoker、JAX-RPC)方面的类。 (10) spring-support.jar  这个jar文件包含支持缓存Cache(ehcache)、JCA、JMX、邮件服务(Java ...

    Spring 2.5 jar 所有开发包及完整文档及项目开发实例

     这个jar文件包含支持EJB、JMS、远程调用Remoting(RMI、Hessian、Burlap、Http Invoker、JAX-RPC)方面的类。 (10) spring-support.jar  这个jar文件包含支持缓存Cache(ehcache)、JCA、JMX、邮件服务(Java ...

    开源框架 Spring Gossip

    RMI Hessian、 Burlap Http Invoker 邮件 对于邮件发送服务的支援是由Spring的 org.springframework.mail.MailSender介面所定义,它有两个实作类别, org.springframework.mail.cos....

    远程调用服务框架

    给予spring的框架。 封装了xfire、rmi、hessian、httpinvoker 客户端可以统一调用,省略了远程调用的编码。 服务通过服务ID和服务接口来调用。

    java开源包1

    它是 Spring HttpInvoker的一个轻量级选择,特别适合于当你不想在客户端程序中使用Spring框架。 API访问授权的开放标准 OAuth OAuth 协议为用户资源的授权提供了一个安全的、开放而又简易的标准。与以往的授权方式...

    java开源包11

    它是 Spring HttpInvoker的一个轻量级选择,特别适合于当你不想在客户端程序中使用Spring框架。 API访问授权的开放标准 OAuth OAuth 协议为用户资源的授权提供了一个安全的、开放而又简易的标准。与以往的授权方式...

    java开源包2

    它是 Spring HttpInvoker的一个轻量级选择,特别适合于当你不想在客户端程序中使用Spring框架。 API访问授权的开放标准 OAuth OAuth 协议为用户资源的授权提供了一个安全的、开放而又简易的标准。与以往的授权方式...

    java开源包3

    它是 Spring HttpInvoker的一个轻量级选择,特别适合于当你不想在客户端程序中使用Spring框架。 API访问授权的开放标准 OAuth OAuth 协议为用户资源的授权提供了一个安全的、开放而又简易的标准。与以往的授权方式...

    java开源包6

    它是 Spring HttpInvoker的一个轻量级选择,特别适合于当你不想在客户端程序中使用Spring框架。 API访问授权的开放标准 OAuth OAuth 协议为用户资源的授权提供了一个安全的、开放而又简易的标准。与以往的授权方式...

    java开源包5

    它是 Spring HttpInvoker的一个轻量级选择,特别适合于当你不想在客户端程序中使用Spring框架。 API访问授权的开放标准 OAuth OAuth 协议为用户资源的授权提供了一个安全的、开放而又简易的标准。与以往的授权方式...

    java开源包10

    它是 Spring HttpInvoker的一个轻量级选择,特别适合于当你不想在客户端程序中使用Spring框架。 API访问授权的开放标准 OAuth OAuth 协议为用户资源的授权提供了一个安全的、开放而又简易的标准。与以往的授权方式...

    java开源包4

    它是 Spring HttpInvoker的一个轻量级选择,特别适合于当你不想在客户端程序中使用Spring框架。 API访问授权的开放标准 OAuth OAuth 协议为用户资源的授权提供了一个安全的、开放而又简易的标准。与以往的授权方式...

    java开源包8

    它是 Spring HttpInvoker的一个轻量级选择,特别适合于当你不想在客户端程序中使用Spring框架。 API访问授权的开放标准 OAuth OAuth 协议为用户资源的授权提供了一个安全的、开放而又简易的标准。与以往的授权方式...

    java开源包7

    它是 Spring HttpInvoker的一个轻量级选择,特别适合于当你不想在客户端程序中使用Spring框架。 API访问授权的开放标准 OAuth OAuth 协议为用户资源的授权提供了一个安全的、开放而又简易的标准。与以往的授权方式...

    java开源包9

    它是 Spring HttpInvoker的一个轻量级选择,特别适合于当你不想在客户端程序中使用Spring框架。 API访问授权的开放标准 OAuth OAuth 协议为用户资源的授权提供了一个安全的、开放而又简易的标准。与以往的授权方式...

    java开源包101

    它是 Spring HttpInvoker的一个轻量级选择,特别适合于当你不想在客户端程序中使用Spring框架。 API访问授权的开放标准 OAuth OAuth 协议为用户资源的授权提供了一个安全的、开放而又简易的标准。与以往的授权方式...

    Java资源包01

    它是 Spring HttpInvoker的一个轻量级选择,特别适合于当你不想在客户端程序中使用Spring框架。 API访问授权的开放标准 OAuth OAuth 协议为用户资源的授权提供了一个安全的、开放而又简易的标准。与以往的授权方式...

    JAVA上百实例源码以及开源项目源代码

     Java实现HTTP连接与浏览,Java源码下载,输入html文件地址或网址,显示页面和HTML源文件,一步步的实现过程请下载本实例的Java源码,代码中包括丰富的注释,对学习有帮助。 Java实现的FTP连接与数据浏览程序 1个...

Global site tag (gtag.js) - Google Analytics