CN101251796A - 基于依赖注入的分布式构件依赖关系管理方法 - Google Patents
基于依赖注入的分布式构件依赖关系管理方法 Download PDFInfo
- Publication number
- CN101251796A CN101251796A CNA2008100471752A CN200810047175A CN101251796A CN 101251796 A CN101251796 A CN 101251796A CN A2008100471752 A CNA2008100471752 A CN A2008100471752A CN 200810047175 A CN200810047175 A CN 200810047175A CN 101251796 A CN101251796 A CN 101251796A
- Authority
- CN
- China
- Prior art keywords
- container
- management
- dependence
- distributed
- component
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Stored Programmes (AREA)
Abstract
本发明提供了一种基于依赖注入的分布式构件依赖关系管理方法,属于软件构件化技术领域。包括了以下步骤:1)CORBA对象模型的扩展,通过定义了构件的四种状态,依赖注入接口和描述配置文件,形成了一个轻量级的CORBA构件模型:2)构件容器的实现,基于CORBA ORB内核改造,实现了一个轻量级的CORBA构件容器;3)分布式系统的节点管理构架,将分布式系统网络中所有节点划分为一个域管理节点和若干个非域管理节点,通过域管理服务和节点管理服务的协作,实现构件间分布式依赖关系的注入管理。本方法以声明的方式而不是编程的方式来对分布式的构件依赖关系进行管理,减轻了构件开发者的负担,增强了系统灵活性。
Description
技术领域
本发明涉及软件构件化技术领域,具体涉及了分布式构件化系统中构件依赖关系关管理的方法。
背景技术
构件是在软件生命周期各阶段可以被复用的软件实体,可独立配置与部署,具有良好的封装独立性和定义清晰的接口,与运行上下文环境和其他构件严格分离。通过构件化技术开发的软件系统不仅可以有效提高开发者的效率,降低开发者的成本,还使得构造出的系统具有良好的可扩展性和可维护性。目前,基于构件技术的软件开发技术已受到业界的普遍关注,并已成为软件开发的主流方法。
在传统结构化的应用系统中,整个系统是由若干模块(过程或函数)组成的,模块间存在一定调用关系,这种调用关系就称为模块间的依赖,这些依赖关系是在程序的编译连接过程中完成的。因此,在结构化的系统中,应用系统在运行时不可能对模块进行插入和替换,系统的可伸缩性受到极大限制。而在一个基于构件的分布式应用系统中,整个系统是由若干构件组成,构件间存在服务和被服务的关系,这种关系称之为构件间的依赖关系。增强系统复用性的关键问题是降低构件间的依赖关系,把这种依赖关系转换成可配置、可管理的方式。因此在运行时对通过构件间依赖关系的管理,实现构件的插入和替换,将极大提高系统的可伸缩性。
当前依赖关系的管理技术大致分为两大类:依赖查找技术和依赖注入技术。依赖查找是指依赖者根据一定条件(如被依赖者的逻辑名)主动查找应用系统中的被依赖者,典型的系统如CORBA技术中的命名服务,EJB的命名和目录服务等,它们存在一个名字注册数据库,所有构件都向命名服务器注册自己的构件服务,然后依赖构件在命名服务中查找以获得被依赖构件的服务。依赖查找的方式有着明显的缺陷,依赖构件必须了解运行时的上下文环境,这就造成了构件和构件运行环境的紧耦合,也加大了构件实现者的负担。依赖注入技术是指构件之间的依赖关系由容器在运行期决定,构件管理运行时查找被依赖构件,而依赖构件被动的接受运行时系统查找结果的注入,这样依赖管理就统一到运行时环境,依赖构件处于被动状态,把静态的依赖关系变成了动态的、可管理的方式,当前已有诸多依赖注入框架,例如Guice等。这些框架都存在如下几个缺陷:一是大都采用虚拟机语言(Java等)和动态语言实施(JavaScript等)实施,没有采用C/C++语言,运行的效率不高;二是只针对本进程内的对象进行依赖注入,无法应用到分布式构件系统中。
综上所述,虽然目前业界已有大量的依赖注入方案,但都是基于本地的对象间的依赖关系管理,还没有一种基于构件化系统的分布式依赖关系管理方案。
发明内容
本发明的目的在于针对现有技术的不足,基于CORBA ORB内核,通过对CORBA对象模型的扩展,提供基一种基于依赖注入的分布式构件依赖关系管理实现方法。
本发明基于依赖注入的分布式构件依赖关系管理方法,包括:CORBA对象模型的扩展、构件容器的实现以及分布式系统的节点管理构架。
(1)CORBA对象模型的扩展:常规CORBA系统没有定义构件对象模型(CCM定义了一个构件模型,但极其复杂难以实现,不具备实用价值),常规CORBA对象仅是一个C++对象,难以被构件容器所管理。因此本方案扩展CORBA对象形成一个构件模型,主要定义了一个抽象根类RootComp,包含了构件生命周期管理方法和依赖注入的管理方法。通过多继承的方式,构件实现体除了继承实现接口定义语言的服务端骨架类外,还需实现RootComp抽象根类。
(2)构件容器的实现:容器建立起构件运行的上下文环境,构件被容器加载后运行于容器的进程中。容器通过对大量构件实例进行有效管理来提高系统的资源利用率,所依赖的主要机制为构件实例池(如操作系统的线程池,数据库的连接池,互操作体系中的通信连接池),钝化/激活(将一个有状态构件实例序列化,并清出内存;当再次被访问的时候,容器先构造一个构件实例,然后从外存中取出实例的状态),对构件实施的生命周期管理。
(3)分布式系统的节点管理构架:将分布式系统网络中所有节点划分为一个域管理节点和若干个非域管理节点。域管理节点运行域管理服务,作为全局构件注册数据库,维护当前运行系统中所有激活构件的服务逻辑名和对象引用的映射数据库;非域管理节点运行节点管理服务,通过容器对构件运行生命周期进行管理,并通过构件配置文件获得构件的依赖关系。这样依赖关系管理统一到构件运行时环境,依赖构件处于被动状态,不必了解运行的环境上下文,只是被动接收被依赖对象的注入。
基于依赖注入的分布式构件依赖管理方法有如下优点:
1)以声明的方式而不是编程的方式来对依赖关系进行管理,减轻了
构件开发者的负担,增强了系统灵活性。
2)通过域管理服务、节点管理服务和容器三者间的合作实现了分布式依赖关系的注入。
附图说明
图1构件模型和容器示意图;
图2构件根类定义;
图3构件配置文件的XML Schema定义;
图4节点的分层管理结构图;
图5分布式依赖注入示意图。
具体实施方式
下面结合附图,对本发明的具体实施方案做进一步的说明:
(1)CORBA对象模型的扩展的实现,如图1所示,步骤如下:
①定义新的构件对象基类CompRoot,接口方法见图2所示,主要包括了生命周期管理方法和依赖关系管理方法;
②生命周期管理方法-提供容器进行构件状态转换时的回调接口,包括了4类状态操作(装载、激活、去活和卸载),构件实现可以通过改写这些方法在状态转换时实施资源的分配、回收等操作。
③依赖关系管理方法-提供容器进行依赖注入的注入点,set_complive方法把被依赖构件的有效对象引用传递给依赖构件;set_compdead方法通知依赖构件,其被依赖构件已无效。
④定义了构件配置描述文件格式,如图3所示,容器通过该配置文件来获取构件的所有信息,包括构件标识、构件代码文件以及构件的依赖信息等。
(2)基于CORBA ORB构件容器的实现,本发明利用CORBA的自定义伺服器管理器来实现容器,步骤如下:
①定义两个队列,已激活构件根对象指针队列和未激活构件根对象指针队列,已加载但未激活的构件对象指针进入未激活指针队列,已激活的构件对象指针进入已激活指针队列;
②实现一个自定义伺服器管理器类,该类从步骤①定义的激活指针队列中查找相应构件的伺服对象指针并返回给ORB内核,未命中则返回空值;这样就实现了服务端ORB POA查找构件对象的自定义策略;
③在容器进程的main函数中初始化ORB运行库,创建ORB对象,采用自定义伺服器的POA策略,将步骤②定义的伺服器管理器作为ORB的伺服器管理器,最后启动ORB监听循环;
④实现一个构件管理接口,包括构件的加载、激活、去活和卸载等操作,加载操作将构件代码加载进容器进程的地址空间,并创建构件对象,并将对象指针保存在步骤①创建的未激活指针队列中,激活操作将对象指针从未激活队列移往激活队列,去活操作将构件对象指针从激活队列移往未激活队列,卸载操作则将构件对象销毁并将构件代码从容器进程卸载。
(3)分布式系统的节点管理构架的实现,如图4和图5所示,步骤如下:
①实现域管理服务和节点管理服务,域管理服务作为中心注册数据库,包括了当前系统所有构件的对象引用,并接受来自节点管理服务的构件对象引用查询;节点管理服务则启动容器进程,并向域管理服务查询构件对象引用;
②容器在加载并激活构件后通过节点管理服务向域管理服务注册构件的对象引用;
③节点管理服务解析构件配置文件,获得构件所需的依赖构件列表,向域管理服务查询被依赖构件的对象引用;
④节点管理服获得被依赖构件的对象引用,将该对象引用传递给容器,容器在激活构件指针列表查找获得依赖构件指针RootComp,通过set_complive方法将被依赖构件的对象引用传递给依赖构件;
⑤如果节点管理服务没有发现相应的被依赖构件,则容器通过依赖构件RootComp指针的set_compdead方法将被依赖构件没有发现的消息注入给依赖构件;
⑥通过域管理服务的主动发现机制(根据节点服务上报的构件状态信息),域管理服务可主动通知节点管理服务进行构件依赖关系的注入。
Claims (6)
1. 一种基于依赖注入的分布式构件依赖关系管理方法,其特征在于:包括:CORBA对象模型的扩展、构件容器的实现以及分布式系统的节点管理构架。
2. 根据权利要求1所述的基于依赖注入的分布式构件依赖关系管理方法,其特征在于:CORBA对象模型的扩展为:本方案扩展CORBA对象形成一个构件模型,主要定义了一个抽象根类RootComp,包含了构件生命周期管理方法和依赖注入的管理方法,所有构件都需要继承该根类。
3. 根据权利要求1所述的基于依赖注入的分布式构件依赖关系管理方法,其特征在于:构件容器的实现为:容器建立起构件运行的上下文环境,构件被容器加载后运行于容器的进程中;容器通过对大量构件实例进行有效管理来提高系统的资源利用率,所依赖的主要机制为构件实例池,如操作系统的线程池,数据库的连接池,互操作体系中的通信连接池,钝化/激活为将一个有状态构件实例序列化,并清出内存;当再次被访问的时候,容器先构造一个构件实例,然后从外存中取出实例的状态,对构件实施的生命周期管理。
4. 根据权利要求1所述的基于依赖注入的分布式构件依赖关系管理方法,其特征在于:分布式系统的节点管理构架为:将分布式系统网络中所有节点划分为一个域管理节点和若干个非域管理节点;域管理节点运行域管理服务,作为全局构件注册数据库,维护当前运行系统中所有激活构件的服务逻辑名和对象引用的映射数据库;非域管理节点运行节点管理服务,通过容器对构件运行生命周期进行管理,并通过构件配置文件获得构件的依赖关系;这样依赖关系管理统一到构件运行时环境,依赖构件处于被动状态,不必了解运行的环境上下文,只是被动接收被依赖对象的注入。
5. 根据权利要求2所述的基于依赖注入的分布式构件依赖关系管理方法,其特征在于:生命周期管理方法为:生命周期管理类接口,提供容器进行构件状态转换时的回调接口,包括了四类状态操作:装载、激活、去活和卸载;构件实现可以通过改写这些方法在状态转换时实施资源的分配、回收等操作。
6. 根据权利要求2所述的基于依赖注入的分布式构件依赖关系管理方法,其特征在于:依赖注入的管理方法为:依赖关系管理类接口,提供容器进行依赖注入的注入点;set_complive方法把被依赖构件的有效对象引用传递给依赖构件;set_compdead方法通知依赖构件,其被依赖构件已无效。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNA2008100471752A CN101251796A (zh) | 2008-03-31 | 2008-03-31 | 基于依赖注入的分布式构件依赖关系管理方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNA2008100471752A CN101251796A (zh) | 2008-03-31 | 2008-03-31 | 基于依赖注入的分布式构件依赖关系管理方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN101251796A true CN101251796A (zh) | 2008-08-27 |
Family
ID=39955198
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNA2008100471752A Pending CN101251796A (zh) | 2008-03-31 | 2008-03-31 | 基于依赖注入的分布式构件依赖关系管理方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101251796A (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101980175A (zh) * | 2010-10-22 | 2011-02-23 | 中国科学院软件研究所 | 基于OSGi的软件构件监测方法与系统 |
CN106603594A (zh) * | 2015-10-15 | 2017-04-26 | 中国电信股份有限公司 | 一种分布式服务的管理方法和系统 |
WO2017066972A1 (en) * | 2015-10-23 | 2017-04-27 | Oracle International Corporation | System and method for booting application servers in parallel |
CN106951371A (zh) * | 2017-03-20 | 2017-07-14 | 南京大学 | 一种基于依赖注入的安卓应用半自动化测试方法 |
CN109388403A (zh) * | 2018-09-26 | 2019-02-26 | 广州视源电子科技股份有限公司 | 依赖注入方法、装置、设备和存储介质 |
CN111738875A (zh) * | 2020-06-23 | 2020-10-02 | 国网浙江省电力有限公司经济技术研究院 | 构件再利用方法、装置及系统 |
-
2008
- 2008-03-31 CN CNA2008100471752A patent/CN101251796A/zh active Pending
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101980175A (zh) * | 2010-10-22 | 2011-02-23 | 中国科学院软件研究所 | 基于OSGi的软件构件监测方法与系统 |
CN101980175B (zh) * | 2010-10-22 | 2012-07-04 | 中国科学院软件研究所 | 基于OSGi的软件构件监测方法与系统 |
CN106603594A (zh) * | 2015-10-15 | 2017-04-26 | 中国电信股份有限公司 | 一种分布式服务的管理方法和系统 |
CN106603594B (zh) * | 2015-10-15 | 2019-07-09 | 中国电信股份有限公司 | 一种分布式服务的管理方法和系统 |
WO2017066972A1 (en) * | 2015-10-23 | 2017-04-27 | Oracle International Corporation | System and method for booting application servers in parallel |
US10198271B2 (en) | 2015-10-23 | 2019-02-05 | Oracle International Corporation | System and method for booting application servers in parallel |
CN106951371A (zh) * | 2017-03-20 | 2017-07-14 | 南京大学 | 一种基于依赖注入的安卓应用半自动化测试方法 |
CN106951371B (zh) * | 2017-03-20 | 2019-07-09 | 南京大学 | 一种基于依赖注入的安卓应用半自动化测试方法 |
CN109388403A (zh) * | 2018-09-26 | 2019-02-26 | 广州视源电子科技股份有限公司 | 依赖注入方法、装置、设备和存储介质 |
CN109388403B (zh) * | 2018-09-26 | 2022-04-05 | 广州视源电子科技股份有限公司 | 依赖注入方法、装置、设备和存储介质 |
CN111738875A (zh) * | 2020-06-23 | 2020-10-02 | 国网浙江省电力有限公司经济技术研究院 | 构件再利用方法、装置及系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Mannaert et al. | Towards evolvable software architectures based on systems theoretic stability | |
US6640255B1 (en) | Method and apparatus for generation and installation of distributed objects on a distributed object system | |
Irmert et al. | Runtime adaptation in a service-oriented component model | |
US20050066338A1 (en) | Exstensibility application programming interface and framework for meta-model objects | |
CN102541996B (zh) | 一种基于jdbc的数据访问层构建方法及装置 | |
CN101251796A (zh) | 基于依赖注入的分布式构件依赖关系管理方法 | |
US7770159B2 (en) | Virtual types | |
Zhang et al. | A modeling framework for service-oriented architecture | |
US9183040B2 (en) | Method for manipulating objects in a SOA registry | |
US7984082B2 (en) | Provision of connections for program components | |
US8032560B2 (en) | Provision of persistence context to program components | |
Lipkind et al. | Object views: Language support for intelligent object caching in parallel and distributed computations | |
Tamai et al. | Objects as actors assuming roles in the environment | |
Johnsen et al. | Inheritance in the presence of asynchronous method calls | |
Zhang et al. | Architectural design of the health watch system with an integrated aspect-oriented modeling approach | |
Nikiel | Automating software development for distributed control systems with the OPC UA standard | |
Liu et al. | Mapping component specifications to Enterprise JavaBeans implementations | |
Zhuang et al. | Research on Data Interaction and System Integration of Heterogeneous Systems Based on Web Services | |
Qiao et al. | Implementing dynamic management for mediated service interactions | |
Tešanović | Developing Reusable and Reconfigurable Real-Time Software Using Aspects and Components | |
Grossniklaus et al. | Unified event model for object databases | |
US20100023923A1 (en) | Method for medeling objects in a hetrogenious computing environment | |
AlSobeh et al. | TransJ: An abstract independent-framework for weaving crosscutting concern into distributed transactions | |
Varela et al. | The SALSA Programming Language 2.0. 0alpha Release Tutorial | |
Anderson et al. | Model-Based Techniques in the Development of Net-Centric Applications |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C12 | Rejection of a patent application after its publication | ||
RJ01 | Rejection of invention patent application after publication |
Open date: 20080827 |