zoukankan      html  css  js  c++  java
  • HSF源码

    HSF源码阅读笔记(一)

    HSF(highspeed service framework ) 是淘宝内部使用的一个rpc(remote procedure call) 框架,最近在看Apache Mina的应用层协议的编解码器时,想到了看HSF的源码。

    1、HSF单元测试环境的启动: 

    HSF组开发同事提供了一个HSFEasyStarter,支持HSF环境的快速启动。它的原理是: 从淘宝内网下载一个taobao-hsf.sar目录,这个目录下面有META-INF,lib,plugins三个目录. 其中lib目录下存放了hsf容器的jar (hsf.container-1.4.8.7.jar)和随着eclipse一起发布的osgi标准的实现(org.eclipse.osgi-framework-3.4.2.R34x_v20080826.jar)

    hsf.container-1.4.8.7.jar
    hsf.thirdcontainer.jboss-1.4.8.7.jar
    hsf.thirdcontainer.tomcat-1.4.8.7.jar
    org.eclipse.osgi-framework-3.4.2.R34x_v20080826.jar

    HSF容器启动的时候,会基于equinox的Declare Service的方式进行Service的定义,另外,plugins目录下的plugin(理解为一个bundle)里面打包了一个properties文件, 里面指明了bundle中需要导出给外部应用使用的HSF的一些Class,并且HSFEasyStarter在启动时使用的一个HSFMiniContainer对双亲委派的Classloader机制进行了改写,在App classloader和ext classloader之间插入了一个urlclassloader,这个Urlclassloader就从前面说的bundle导出的类去findClass,代码片段如下: 

    //---------------------创建一个Urlclassloader,指定其父classloader为ext classloader,因为ClassLoader.getSystemClassLoader()取到的是app

    //classloader

    ClassLoader hsfClassLoader = new URLClassLoader(new URL[]{}, ClassLoader.getSystemClassLoader().getParent()){
    @Override
    protected Class<?> findClass(String name) throws ClassNotFoundException {
    Class<?> clazz = exportedClassMap.get(name);
    if(clazz != null){
    return clazz;
    }
    throw new ClassNotFoundException(name);
    }
    };

    //-------下面的代码指定app classloader的父classloader为前面介绍的urlclassloader; 

    ClassLoader sysLoader = ClassLoader.getSystemClassLoader();
    Class<URLClassLoader> sysClass = URLClassLoader.class;
    Field parentField = sysClass.getSuperclass().getSuperclass().getDeclaredField("parent");
    parentField.setAccessible(true);
    parentField.set(sysLoader, hsfClassLoader);

     整个过程可以描述如下: 

  • 相关阅读:
    Python 爬虫-正则表达式
    Python 爬虫-信息的标记xml,json,yaml
    Python 爬虫-BeautifulSoup
    bzoj 1491
    bzoj 1406 数论
    Codeforces Round #496 (Div. 3) E2
    2017-2018 ACM-ICPC Northern Eurasia (Northeastern European Regional) Contest (NEERC 17) 日常训练
    Codeforces Round #496 (Div. 3) F
    bzoj 1415 期望dp + 记忆化搜索
    bzoj 1483 链表 + 启发式合并
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/2872230.html
Copyright © 2011-2022 走看看