`
erylee
  • 浏览: 109415 次
社区版块
存档分类
最新评论

OpenCore: OSGi上实现IoC容器

阅读更多
Martin Fowler有一篇文章里称:说一个面向对象系统框架或结构是基于IoC的,就好像说汽车有四个轮子一样。非常精辟 ,IoC或者DI更多的是一个设计原则,一个设计良好的面向对象的系统或多或少都有这方面的特点,这与是否有一个IoC容器的关系不大,IoC容器的作用 是简化开发,强制系统遵循IoC原则而已。

OpenCore在最初设计的时候,没有考虑IoC容器的问题,主要是解决服务端的WEB开发、数据库访问、与REST远程通信等问题,我们完全使用 OSGi本身的服务注册机制,在插件启动时用代码实现依赖注射。直到今年8月份左右,我们把依赖注射的职责分离出来,在OSGi上实现了一个分级的IoC 容器,以简化开发,避免在插件启动类写依赖注射的代码。

OpenCore IoC容器有下面几个特性:
  1. 完全基于OSGi的插件体系结构。
  2. 简单,远没有Spring IoC容器复杂,支持属性注射(Property Injection)与构造函数注册(Constructor Injection)。
  3. 分级IoC容器,分为插件级、应用程序级、网络级
  4. IoC容器管理的服务与OSGi框架管理的服务可以互访,这样保证了OpenCore IoC不会屏蔽OSGi本身的模型,使得基于OpenCore IoC的插件与大量第三方基于完全基于OSGi服务模型的插件可以协作。
  5. 支持通过动态扩展点实现1对多的依赖注册机制。
OpenCore IoC的实现机制:

1. 每个插件(bundle)增加一个IoC的自描述文件META-INF/OPENCORE.XML,例如org.opengoss.web.core中,该文件的配置如下:

<plugin version="1.0" id="WebCore"></plugin>
xml 代码
 
  1. <plugin id="WebCore" version="1.0">  
  2.   
  3.     <service id="WebServerConfiguration" scope="application" class="org.opengoss.web.internal.WebServerConfiguration">  
  4.   
  5.         <interface name="org.opengoss.web.core.IWebServerConfiguration"/>  
  6.   
  7.     </service>  
  8.   
  9.     <service id="MarshallerRegistry" scope="application" class="org.opengoss.web.internal.MarshallerRegistry">  
  10.   
  11.         <interface name="org.opengoss.web.service.IMarshallerRegistry"/>  
  12.   
  13.     </service>  
  14.   
  15.     <service id="WSContainer" scope="application" class="org.opengoss.web.internal.WSContainer">  
  16.   
  17.         <interface name="org.opengoss.web.service.IWSContainer"/>  
  18.   
  19.         <property name="marshallerRegistry" ref="MarshallerRegistry"/>  
  20.   
  21.     </service>  
  22.   
  23.     <service id="WSExporter" scope="application" class="org.opengoss.web.internal.WSExporter">  
  24.   
  25.         <interface name="org.opengoss.web.service.IWSExporter"/>  
  26.   
  27.         <constructor>  
  28.   
  29.             <param ref="WSContainer"/>    
  30.   
  31.         </constructor>  
  32.   
  33.     </service>  
  34.   
  35.     <extension-point id="Marshaller" target="MarshallerRegistry"  
  36.   
  37.         bindMethod="addMarshaller" unbindMethod="removeMarshaller"/>  
  38.   
  39.     <extension-point id="WebService" target="WSExporter"   
  40.   
  41.         bindMethod="export" unbindMethod="unexport"/>  
  42.   
  43.     <extension-point id="Class" target="MarshallerRegistry"  
  44.   
  45.         bindMethod="addAliasClass" unbindMethod="removeAliasClass"/>  
  46.   
  47. </plugin>  


2. 插件的激活类(Activator)不是直接实现OSGi本身的"BundleActivator"接口,而是继承由OpenCore提供的 "org.opengoss.core.PluginActivator",启动时,PluginActivator负责完成XML文件解析与依赖注射。 例如org.opengoss.web.core中的Activator代码如下:

java 代码
 
  1. import org.opengoss.core.IPluginContext;  
  2. import org.opengoss.core.PluginActivator;  
  3. /** 
  4.  * Plugin activator. 
  5.  * 
  6.  * @author Ery Lee(ery.lee@gmail.com) 
  7.  * @version 1.0 2006-11-20 
  8.  * @since 1.0 
  9.  */  
  10. public class Activator extends PluginActivator {  
  11.    
  12.     @Override  
  13.     protected void startPlugin(IPluginContext pluginContext)  
  14.             throws Exception {  
  15.     }  
  16.    
  17.     @Override  
  18.     protected void stopPlugin(IPluginContext pluginContext)  
  19.             throws Exception {  
  20.     }  
  21.    
  22. }   


3. 我们注意到上的的服务配置中有"scope"的属性,该属性定义一个服务的使用范围,确定一个服务注册到哪一级IoC容器。

4. 另外一点,我们在IoC基础上增加了动态扩展点功能,实现多对1的注射。

OpenCore整个项目代码发布在www.sf.net/projects/opengoss与code.google.com/p/opengoss下。
分享到:
评论
2 楼 erylee 2007-02-11  
吸血鬼 写道
大哥大,sf和google上都不能下啊!


download the sample project from: http://code.google.com/p/linktalk

The core bundle is "org.opengoss.core.osgi" that implements the simple IoC container.

We are still busy on this project but there is some different ideas on how to evolve the opencore platform.
1 楼 吸血鬼 2007-02-11  
大哥大,sf和google上都不能下啊!

相关推荐

    未来10年:OSGi、Spring-DM.docx

    OSGi(Open Service Gateway Initiative)是一种基于Java的动态模块化框架,旨在解决Java EE开发及部署模型的局限性。该框架可以提供模块化、动态性和灵活性,解决研发、部署和维护等方面的挑战。 Java EE开发及...

    未来10年:OSGi、Spring_DM

    综上所述,《未来10年:OSGi、Spring_DM》这本书不仅系统地阐述了OSGi及其在企业应用中的重要性,而且还提供了大量的实践案例,对于希望深入了解OSGi和SpringDM的开发者来说是一本不可多得的好书。

    java源码:OSGi 分布式通讯组件 R-OSGi.jar

    java源码:OSGi 分布式通讯组件 R-OSGi.jar

    读书笔记:OSGI 实战 整合Maven 测试代码 .zip

    读书笔记:OSGI 实战 整合Maven 测试代码

    WEB容器托管OSGi容器(轻量级集成方式)

    标题中的“WEB容器托管OSGi容器(轻量级集成方式)”是指在Web应用程序服务器(如Tomcat、Jetty等)中嵌入OSGi(Open Service Gateway Initiative)框架,实现服务组件的轻量化管理和部署。OSGi是一种动态模块化系统...

    osgi-resource-locator-1.0.1-API文档-中文版.zip

    赠送jar包:osgi-resource-locator-1.0.1.jar; 赠送原API文档:osgi-resource-locator-1.0.1-javadoc.jar; 赠送源代码:osgi-resource-locator-1.0.1-sources.jar; 赠送Maven依赖信息文件:osgi-resource-locator...

    osgi规范r4..

    1. **OSGi Service Platform**:OSGi(Open Services Gateway Initiative)服务平台是用于构建动态、模块化Java应用程序的一种框架。它允许在运行时安装、更新或卸载软件模块(称为bundles),而不会影响其他正在...

    OSGi core

    综上所述,OSGi Service Platform Core Specification 是理解 OSGi 框架和技术的基础,对于开发者来说,了解其核心概念和技术是非常重要的。通过遵循这些规范,可以构建出高度模块化、灵活且易于维护的应用程序。

    精彩:OSGI入门以及提升

    OSGI(Open Services Gateway Initiative)是一种Java模块化系统,它允许开发者将应用程序分解为一系列可独立部署、更新和管理的模块。OSGI的核心是其服务导向架构,它为Java应用程序提供了一个动态、灵活的运行时...

    osgi-resource-locator-1.0.1-API文档-中英对照版.zip

    赠送jar包:osgi-resource-locator-1.0.1.jar; 赠送原API文档:osgi-resource-locator-1.0.1-javadoc.jar; 赠送源代码:osgi-resource-locator-1.0.1-sources.jar; 赠送Maven依赖信息文件:osgi-resource-locator...

    org.osgi.core-6.0.0.jar

    osgi的jar包,第一次上传,有需要的可以自取,联网下载很慢,希望对你们有帮助,偶然间遇到了

    org.osgi.core-4.2.0

    标题 "org.osgi.core-4.2.0" 指的是一个特定版本的 OSGi(Open Services Gateway Initiative)核心框架库,版本号为 4.2.0。OSGi 是一个 Java 平台的模块化系统和服务平台,它提供了一种标准的方式来组织和管理 Java...

    osgi规范实战进阶等等等

    OSGi(Open Services Gateway Initiative)是一种Java模块化系统和动态服务平台,旨在解决Java应用程序的复杂性和可扩展性问题。这个规范允许开发者将应用程序分解为独立的模块,这些模块可以独立地安装、更新和卸载...

    OSGi 入门+进阶+实战

    OSGi(Open Services Gateway Initiative)是一种开放标准,用于创建模块化和可管理的Java应用程序。它的核心特性是基于服务的架构,允许动态发现、安装、卸载和升级软件组件,从而提高了灵活性和可维护性。OSGi技术...

    osgi资料打包

    OSGi(Open Services Gateway Initiative)是一种Java模块化系统和服务平台,它允许开发人员将应用程序分解为可独立更新和管理的模块。这个平台的核心是它的模块系统,也称为OSGi框架,它提供了一种动态、模块化的...

    wsc:基于 OSGI 的 WebService 容器

    标题“wsc:基于 OSGI 的 WebService 容器”揭示了一个关键的技术概念,即在Java环境中使用OSGI(Open Service Gateway Initiative)框架来构建一个用于托管Web服务的容器。这个主题涉及了Java开发、OSGI模块化系统...

    osgi,林昊写的osgi实战和进阶

    3. **远程服务**:如何利用OSGI实现远程服务调用,使服务能在不同OSGI容器间通信。 4. **开发工具与环境**:推荐的开发工具和IDE插件,以及如何设置和优化开发环境。 5. **性能优化**:针对OSGI环境的性能调优技巧...

    spring osgi相关资源

    Spring OSGi是Spring框架与OSGi(Open Service Gateway Initiative)规范相结合的一种技术,它允许在OSGi容器中运行和管理Spring应用。OSGi是一种模块化系统,为Java应用程序提供了动态部署、版本控制和依赖管理的...

Global site tag (gtag.js) - Google Analytics