`
longgangbai
  • 浏览: 7250890 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Burlap中hessian协议研究-自定义远程协议实现(十一)远程服务注册类实现

阅读更多

服务端调用相关的代码将结果发送到客户端

package cn.com.huawei.socket.remote.rpc;

import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.lang.reflect.Method;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.HashMap;
import java.util.Map;

/**
 * 远程服务的服务端
 *
 * @author bailonggang 2009-2-21 下午05:48:58
 */
public class RemoteServerProxyFactory {
 private int port;

 public RemoteServerProxyFactory(int port) {
  this.port = port;
 }
    //使用缓存存放远程服务对象的
 private Map<String, Object> remoteObjects = new HashMap<String, Object>();

 /**
  *
  * @param className
  * @param remoteObject
  */
 public void register(String className, Object remoteObject) {
  this.remoteObjects.put(className, remoteObject);
 }

 /**
  *
  * @throws Exception
  */
 public void service() throws Exception {
  ServerSocket serversocket = new ServerSocket(port);
  System.out.println("服务器启动.....");
  while (true) {
   Socket socket = serversocket.accept();
   InputStream is = socket.getInputStream();
   OutputStream os = socket.getOutputStream();
   ObjectInputStream ois = new ObjectInputStream(is);
   ObjectOutputStream oos = new ObjectOutputStream(os);
   Call call = (Call) ois.readObject();
   System.out.println(call);
   call = invokeCall(call);
   oos.writeObject(call);
   ois.close();
   oos.close();
   socket.close();
  }
 }

 /**
  * 调用相关的远程方法应用
  * @param call
  * @return
  */
 public Call invokeCall(Call call) {
  Object result = null;
  try {
   String className = call.getClassName();
   String methodName = call.getMethodName();
   Object[] params = call.getParams();
   Class[] paramTypes = call.getParamTypes();
   Class target = Class.forName(className);
   Method method = target.getMethod(methodName, paramTypes);
   Object remoteObject = this.remoteObjects.get(className);
   if (remoteObject == null) {
    throw new Exception("ClassName " + className + " 的远程对象不存在!!");
   } else {
    result = method.invoke(remoteObject, params);
   }
  } catch (Exception e) {
   result = e;
  }
  // 设置方法运行的结果
  call.setResult(result);
  return call;
 }

}

分享到:
评论

相关推荐

    burlap-spring-demo

    Burlap是一个轻量级的XML RPC协议 这使得他可以移植到任何可以解析XML的语言中 比起Hessian 它的可读性更强 和其他基于Xml的远程技术(如SOAP和XML RPC)不同 它的消息结构尽可能简单 不需要额外的外部定义语言 如...

    Spring配置hessian远程服务

    使用eclipse maven工程搭建hessian远程服务demo 分服务端的整合和客户端 建议阅读相关博客http://blog.csdn.net/heisemuyangquan/article/details/79460528

    Spring 实现远程访问详解——rmi

    7. JMS:远程访问通过类JmsInvokerServiceExporter和JmsInvokerProxyFactoryBean使用JMS的底层协议实现。 二. 远程访问------RMI 1. RMI远程访问基本流程 1). 服务端定义远程访问接口; 2). 服务端通过...

    Java远程通讯可选技术及原理

    在分布式服务框架中,一个最基础的问题就是远程服务是怎么通讯的,在Java领域中有很多可实现远程通讯的技术,例如:RMI、MINA、ESB、 Burlap、Hessian、SOAP、EJB和JMS 等,这些名词之间到底是些什么关系呢,它们...

    burlap-2.1.12.jar

    burlap-2.1.12.jar

    hessian 实例

    远程调用方法就是HttpInvoker:他也是将参数和返回值通过Java的序列化机制进行编组和反编组,它具有RMI的支持所有可序列化对象的...试使用Http协议传输二进制流的,同时又具有Hessian、Burlap(传输xml文本)的优点。

    分布式服务架构之java远程调用技术浅析

    在分布式服务框架中,一个最基础的问题就是远程服务是怎么通讯的,在Java领域中有很多可实现远程通讯的技术,例如:RMI、MINA、ESB、Burlap、Hessian、SOAP、EJB和JMS等,这些名词之间到底是些什么关系呢,它们背后...

    burlap-2.1.7.jar

    jar包,亲测可用

    Mastering+Resin.rar

    Mastering Resin (英文版) by Richard Hightower and Joseph D. Gradecki ISBN:0471431036 ... Appendix D - Burlap and Hessian APIs Index List of Figures List of Tables List of Listings

    Python库 | burlap-0.9.2.tar.gz

    python库。 资源全名:burlap-0.9.2.tar.gz

    Spring-Reference_zh_CN(Spring中文参考手册)

    注册用户自定义的PropertyEditor 6. 使用Spring进行面向切面编程(AOP) 6.1. 简介 6.1.1. AOP概念 6.1.2. Spring AOP的功能和目标 6.1.3. Spring的AOP代理 6.2. @AspectJ支持 6.2.1. 启用@AspectJ支持 6.2.2. 声明...

    Spring中文帮助文档

    3.13. 注册一个LoadTimeWeaver 4. 资源 4.1. 简介 4.2. Resource接口 4.3. 内置 Resource 实现 4.3.1. UrlResource 4.3.2. ClassPathResource 4.3.3. FileSystemResource 4.3.4. ServletContextResource ...

    Spring 2.0 开发参考手册

    17.3. 使用Hessian或者Burlap通过HTTP远程调用服务 17.3.1. 为Hessian配置DispatcherServlet 17.3.2. 使用HessianServiceExporter暴露你的bean 17.3.3. 客户端连接服务 17.3.4. 使用Burlap 17.3.5. 对通过...

    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 chm文档

    17.3. 使用Hessian或者Burlap通过HTTP远程调用服务 17.3.1. 为Hessian配置DispatcherServlet 17.3.2. 使用HessianServiceExporter暴露你的bean 17.3.3. 客户端连接服务 17.3.4. 使用Burlap 17.3.5. 对通过...

    Spring API

    3.13. 注册一个LoadTimeWeaver 4. 资源 4.1. 简介 4.2. Resource接口 4.3. 内置 Resource 实现 4.3.1. UrlResource 4.3.2. ClassPathResource 4.3.3. FileSystemResource 4.3.4. ServletContextResource ...

    学生选课系统中所用的60个jar包

    antlr.jar asm.jar asm-attrs.jar burlap-2.1.12.jar c3p0-0.9.0.2.jar cglib-2.1.jar cglib-nodep-2.1_3.jar commons-attributes-api.jar commons-attributes-compiler.jar commons-beanutils.jar commons-...

Global site tag (gtag.js) - Google Analytics