• org.apache.felix.framework-5.6.12源码解析——*framework中dto,hook,launch,namespace,startlevel部分


    DTO

    Felix中使用了DTO模式,在传统的编程中,我们一般都是前台请求数据,发送到Webservice,然后WebService向数据库发出请求,获取数据,然后一层层返回;模型如下:

    这种比较原始的请求方式带来的缺点有很多,多次请求耗费一定的网络资源,减慢效率。如果一次性返回整个实体类,还可能造成数据库表结构的泄漏。

    DTO模型

     

    这样带来的好处有:

    1.依据现有的类代码,即可方便的构造出DTO对象,而无需重新进行分析。

    2.减少请求次数,大大提高效率。

    3.按需组织DTO对象,避免传输整个表的字段,一定程度上提高了安全性。

    Hook

     

    Weaving Hook让用户模块可以获得在其他类加载时动态植入增强的能力。

    Resolver Hook和Bundle Hook代替了以前的OSGi框架嵌套和组合模块的功能,让用户可以创建虚拟的模块集合,使不同集合之间的模块互不可见这点在OSGi R5中提供了更完美的解决方案。

    Service EventListener Hook让用户可以插手服务事件分派的过程。

    这部分也体现了OSGI模块化的高耦合,低内聚的特点。

    StartLevel 

    用于查询和修改启动级别信息。

    OSGi的start level是一个数字,用来定义模块的优先级,告诉负责OSGi 生命周期的容器 (Equinox Container),某个特定的模块应该在什么时候被启动。这个数字越小,代表模块的优先级越高。只有所有高优先级的模块都被完全执行后,才会开始执行低优先级的模块。

    在整个容器启动的时候,会扫描所有模块的start level,然后从数字最小(优先级最高)的模块开始执行。具有相同start level的模块的执行顺序是不可控制的,默认的模块start level是4。

    1.框架有激活启动级别(active start level),用于确定可以启动哪些bundle。

    2.bundle都有一 个bundle启动级别(bundle start level)。

    OSGi拥有动态模块的特点,不同的Bundle有着独立的生命周期,可以独立进行安装、启动、停止、卸载的操作,

    1、  采用容器的架构思想 

    利用容器来组织业务组件、对象,管理和协调组件之间的关系。容器是框架的核心,它提供了组件植入的规范机制,让组件具有生命,提供给组件呼吸的空气。OSGi容器,实现了OSGi Framework 规范的要求,。一般采用逻辑分层描述其主要实现的功能如下:

    L1——模块层:定义了组件的装载(Classloader)机制,管理组件之间的隔离、依赖与协作;它在Java的类装载机制上加入了模块化的概念。

    L2——生命周期管理层:负责运行时组件的生命周期,包括动态安装、启动、停止、更新或卸载组件,同时容器提供了运行时管理组件的API。

    L3——服务注册层:提供了一个让组件动态注册服务的模型,同时组件可以发现、使用服务。

    基于容器机制,便于组件的统一组织和协调;同时让容器提供基础服务,组件只需要关注业务和实现。OSGi容器类似JBoss、Spring容器一样,提供了运行环境,同时让使用者有机可乘,通过API能扩展、监听容器的执行情况。

    2、  基于组件的开发思想

    OSGi框架鼓励基于组件、分模块开发的思想来实现应用项目,要求以组件的方式来规划、设计、实现项目。OSGi框架还提供了很多基于组件开发的服务,让这些组件在其容器中能有机地结合,良好地运转。主要几方面如下:

    (1)、基于OSGi框架开发,模块都必须以组件(Bundle)的方式来组织开发和部署。

    (2)、模块可单独形成一个工程,工程之间可没有依赖关系,在运行时,可动态选择需要加载的Bundle。

    (3)、模块可动态部署、更新和管理。项目运行期间,可动态卸载模块、更新模块。

    (4)、每个模块对应一个Bundle,它采用的是独立的Classloader机制,不能采用传统的引用其他Bundle的工程来实现Bundle间的协作。

    (5)、每个Bundle可提供BundleActivator去控制自己的生命周期,完成在Bundle启动、停止时所需要进行的工作,同时可发布或者监听整个框架的事件状态信息。

    采用OSGi框架,以组件的形式来开发项目,能更好地解决了模块之间的耦合性、消除循环依赖,提高了模块的稳定性,便于以增量的方式来完成项目。

    3、  组件之间的服务思想

    OSGi期初,主要是以包依赖的方式来实现,包括输出包到OSGi容器、引用容器里其他组件输出的包、引用容器里的其他组件;OSGi 又推出声明服务(Declarative Services)的方式来更加灵活地组织应用系统,解耦组件之间的依赖关系。

    采用声明服务(由Java接口定义)的方式,OSGi主要利用了面向服务(Service-Oriented)的思想,组件可以通过组件上下文注册对外提供的服务,同时也可以通过组件上下文来获得需要引用的其他服务。采用面向服务的方式可以使得对外提供的服务能够更加的封闭,不需要为了使用别的组件提供的服务而做环境依赖等的设置。

  • 相关阅读:
    CentOS7安装iptables防火墙
    Linux下ntpdate时间同步
    linux下的时间及时区设置
    linux下的DNS
    sysctl
    ab -n -c
    VIM 中 查看{}是否闭合,按%跳转到下个闭合
    要删除共享的初始登陆名 cmd下输入net use * /delete
    case in esac ` for in do done ` while true / false
    read op case $op in
  • 原文地址:https://www.cnblogs.com/ku1274755259/p/11108502.html
Copyright © 2020-2023  润新知