`
BlueDavy
  • 浏览: 152681 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

再谈OSGi中的Service-Oriented Component Model

阅读更多
之前也写过关于Service-Oriented Component Model的blog了,Service-Oriented Component Model(以下简称SOCM)是OSGi R4中最为重要的改进,SOCM也是切实体现OSGi的动态性的模型,大家在使用SOCM的时候可能会因为受到原有思想的影响而一时无法理解,在这篇blog中将再次的对SOCM进行讲解,以便大家能够更好的理解和进行运用。
SOCM是一种模块化的详细设计思想,不属于架构级别的思想,相应的我们对比一下传统情况下基于Spring的模块化详细设计,在Spring中,对于一个模块的详细设计,通常可以这么来简述,模块由多个bean共同构成,bean通过注入其他bean实现的接口来获取相应的功能,同样通过实现接口来对外提供功能(加上xml中的描述),在系统启动时默认情况下所有的bean都自动的初始化了,当然,也可以通过类似lazy的属性使得bean延迟的进行加载,在bean启动后其依赖关系就已经确定,是一种静态的依赖关系,bean的生命周期可通过spring提供的接口来进行管理。
通常来讲习惯了基于spring实现的同学们在转变到使用SOCM时会碰到一些问题:
1、怎么样注入其他Component?
      这个思想呢,我个人觉得是在使用spring时本来就有些错误了,注入思想最重要的就是接口注入,所以在说注入其他Component这句话上是有一定的概念性的错误的,每个Component其实都是通过set接口来获得相应接口的功能,按照SOCM的说法,就是每个Component通过bind相应的服务的接口来获取需要使用的功能。
      在SOCM中,要引用其他的Service非常的简单,和Spring的DI没有很大的区别,也可以通过setService这样的方法来实现,和spring的不同只是spring在设置bean的依赖时是通过ref bean="beanID"来获取,而SOCM中呢,则是充分的Service-Oriented的表达方式:
      <reference name="LogService" policy="dynamic" unbind="unsetLog" bind="setLog" interface="org.osgi.service.log.LogService"></reference>
      通过的是interface属性来获取到所需的服务,而不是通过ref bean的那种方式,这里也是充分表达SOCM是一种动态化设计的思想。
2、怎么样管理Component的生命周期?
       这是大家最为迷惑的,当你查遍OSGi的相关文档后,会发现OSGi是没有提供接口来外部调用Component的呢,这和Spring提供了接口调用bean完全不同,在SOCM中Component的生命周期是由OSGi框架来负责管理的,外部没法通过接口去调用某个Component,这就会使大家产生疑问,那么Component中的方法是怎么被执行的呢,对于这个疑问,需要分成两种形式的Component来看待:
       (1)、只引用其他Service的Component;
                对于这种类型的Component,在启动Bundle后OSGi将会自动的对Component进行激活,Component激活的前提是Component所引用的Service满足条件,Component激活时将会通过调用bind属性对应的方法将相应的服务注入,在将所需的服务均注入后,将会调用Component中的activate方法,如没有此方法,则不进行调用,:),在这种情况下,我们会发现以前Bundle中的BundleActivator通常都会变得没有意义,完全可以通过编写一个POJO的Component来实现同样的功能和效果,而且更为简单。
               对于这种Component,我们现在可以清楚,只要Component所必须需要的服务都存在,那么它就会被自动的激活,这种Component的例子可以参见OSGi Opendoc所附带的ds部分代码中的LoginServlet。
       (2)、对外提供Service的Component;
               如果Component对外提供了Service,那么只有当这个service需要被使用时Component才会被激活,这是它区别于第一种形式Component的地方。
               对于这种Component,可以参见OSGi Opendoc所附带的ds部分代码中的DBValidatorImpl(如果你想看它是什么时候被激活的话,可以增加一个activate(ComponentContext context)方法来确定)。
        其实对于上面两种形式Component的激活原理,我们从设计角度去看的话很容易理解,第一种Component相当于消费型的,这种Component自然是直接就需要启动了,而对于第二种呢,是提供服务型的,当没人需要服务的时候,自然没必要激活了。
       为什么Component的生命周期需要交给OSGi框架去管理,而不能通过外部管理呢,这就是OSGi动态性特征的表现,Component什么时候能激活取决于系统运行时的状况,这和静态的设计思想是完全不同,例如当Component所必须的服务在系统中突然不存在了时,这个时候Component将会变成不激活的状态,这和传统的静态化的bean有很大的不同,Component的状态是会根据运行时的情况来动态改变的,这自然是远强于静态化的bean的系统了。

其实从上面的问题可以看出,当你将基于Spring的模块移植到OSGi中时,我相信你的系统的设计会随着使用SOCM而得到明显的提升,真正的做到面向服务、面向接口,SOCM本身就是一种很好的SOA的实现模型,在理解SOCM时,最重要的主要是要把握SOCM的三个核心思想:
1、模块是由一堆Component组成的;
2、Component通过注入服务接口和提供服务接口来实现Component之间的依赖设定,服务接口是Component之间依赖的桥梁;
3、Component的生命周期是由OSGi框架管理的。
其实上面仍然只是简要的讲了讲SOCM,SOCM在动态化的表现上其实还有更多的东西,象cardinality、policy、filter等等。
OSGi中实现SOCM的是Declarative Services,不能说SOCM就没有缺点了,SOCM没有提供调用Component的接口(准确的说应该是外部调用SOCM中的Service,例如要在普通的java object中调用SOCM中的service,目前是没办法的,只能把那个java object也作为Component才行),这也就使得系统必须完全遵循SOCM而构建,这使得基于SOCM而构建的模块很难与本地的程序做集成,这是它的一个缺点,但是这里面确实有个问题,就是OSGi的Component是动态化的,其实它是无法简单的通过提供一个接口来对外部的程序提供SOCM中的service的,必须同时还附带一个通知模型,以便在service状态发生改变时外部的程序能够得知,从而做出相应的动作,这个问题在SCA中是得到解决了的,EEG对这个问题也表示了关注,可以相信在不久的将来SOCM将会更加的完善和实用。

ps:之前看EclipseCon 2007中OSGi Long Talks的时候看到Bea的microServices也是基于OSGi的,:),果然没有出乎意料,也就是说BEA的所有软件产品将全部基于OSGi了,这对于OSGi的推进无疑是个很好的消息,呵呵,看来IBM的动作还得加快。
另外说说最近Equinox的一个最好的消息,那就是它的基于aspect实现AOP的bundle已经推出,:),可以想想这意味着什么,意味着面临的很多企业应用的问题就得以解决了,象跨Bundle的事务等等..
分享到:
评论
7 楼 soft4any 2007-07-24  
没研究过osgi,不过从本文的介绍看应该是类似于ejb webservice的东西,包含组件的声明周期管理,依赖管理,组件通信服务等。
不知道对不对?
6 楼 wolfsquare 2007-05-18  
ithero 写道
我关心的如果采用OSGI体系,那目前的如我的Struts+Spring+Hibernate如何来组织呢?事务控制,权限安全等等..它们之间如何组织调度?


OSGi 需求源自于部署和环境的要求,不是来自于普遍意义上的开发要求(事务..),更和普遍意义上业务需求没有关系(权限,工作流...)。
5 楼 独狼 2007-05-18  
[已删除]sorry...
4 楼 zhoufu24 2007-05-17  
原来认为OSGI中的最小元素是bundle了,现在看来component看来是比bundle还要小的OSGI结构体,不知道我这样理解对不,希望大师指点。怎么感觉component和bundle好像啊。
3 楼 ithero 2006-12-29  
我关心的如果采用OSGI体系,那目前的如我的Struts+Spring+Hibernate如何来组织呢?事务控制,权限安全等等..它们之间如何组织调度?
2 楼 ASDF1982 2006-12-13  
板凳 请楼主继续
1 楼 gao277 2006-12-13  
一篇不错的文章,先留个记号,回头仔细研究

相关推荐

    win64 CC2022.zip

    SmartTools InDesign插件

    深度学习课程的课程设计-------基于ResNet优化模型的阿尔茨海默症的识别.zip

    深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。

    机械设计课程设计说明书_带式输送机传送装置_西北工业大学.doc

    机械设计课程设计说明书_带式输送机传送装置_西北工业大学.doc

    风格化欧洲城镇建筑场景模型:Modular European Town v1.1

    使用 “模块化欧洲小镇” 包来改变你的游戏世界!这个套装提供了你设计一个充满活力的低多边形城市所需的一切。 套装包括: 模块化建筑:各种结构可创造多样化的建筑设计。 自然元素:树木、灌木丛和植物,以增加你的小镇的绿色景观。 基础设施:道路、人行道、边界和墙壁,以构建一个逼真的布局。 不同的道具:很多物品,如消防栓、路灯、咖啡馆桌椅、垃圾桶、长椅等等。 所有模型都采用低多边形美学制作,确保出色的性能和独特的视觉风格。这个套装非常适合所有平台上的游戏:移动设备、桌面电脑和虚拟现实。它易于使用且高度可定制,让你轻松构建自己独特的欧洲风格小镇。用 “模块化欧洲小镇” 将你的愿景变为现实!(解释说明:“lowpoly” 即低多边形,是一种在游戏和数字艺术中常用的风格,以较少的多边形数量来呈现模型,通常具有简洁的外观和较好的性能表现。

    机械工艺课程设计 挂轮架轴自由锻工艺设计(全套图纸).doc

    机械工艺课程设计 挂轮架轴自由锻工艺设计(全套图纸).doc

    nvm-window v1.1.12

    nvm-window v1.1.12

    python自动化测试10: multipart类型接口

    multipart类型接口的介绍与使用

    机械创新课程设计_自动翻书机设计.doc

    机械创新课程设计_自动翻书机设计.doc

    “机械原理”课程设计自动打印机的设计.doc

    “机械原理”课程设计自动打印机的设计.doc

    SAP系统中采购订单‘确认控制’的操作指南

    内容概要:介绍了两种不同类型的采购订单‘确认控制’操作——‘确认控制’一步法(0004)和两步法(0001),并且阐述了它们各自的操作流程以及后台配置方式。还涵盖了另一种收货类型'粗收货'(0002),并通过具体的系统功能与菜单选项展示了一般性的操作步骤,并解释了它的背景及意义。 适合人群:需要理解并能够执行采购确认控制流程的供应链管理从业人员以及系统管理员。 使用场景及目标:帮助用户理解采购流程,特别是涉及到确认步骤以及粗收货的情形。目的是保证采购流程的准确性,提升仓库收货效率。 其他说明:文章详细描述了一系列系统功能与配置,包括采购订单的创建与更新,通过特定的功能码实现采购确认,内向交货单的处理和收货的具体操作,强调每一种确认控制方法背后的原理及其应用场景。

    【6层】4837.9平米六层框架综合办公楼(含计算书、建筑、结构图纸).zip

    【6层】4837.9平米六层框架综合办公楼(含计算书、建筑、结构图纸) 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。

    AP9569GH-VB一款P-Channel沟道TO252的MOSFET晶体管参数介绍与应用说明

    -40V;-65A;RDS(ON)=10mΩ@VGS=10V;VGS=20V;Vth=-1.6V

    玻璃瓶印花机的设计机械原理课程设计.docx

    玻璃瓶印花机的设计机械原理课程设计.docx

    基于springboot+Vue的旅游推荐系统设计与实现源码+数据库(98分毕业设计)

    基于springboot+Vue的旅游推荐系统设计与实现源码+数据库(98分毕业设计),含有代码注释,小白都可以看懂,个人98分毕业设计。毕业设计、期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。 基于springboot+Vue的旅游推荐系统设计与实现源码+数据库(98分毕业设计),含有代码注释,小白都可以看懂,个人98分毕业设计。毕业设计、期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。 基于springboot+Vue的旅游推荐系统设计与实现源码+数据库(98分毕业设计),含有代码注释,小白都可以看懂,个人98分毕业设计。毕业设计、期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。基于springboot+Vue的旅游推荐系统设计与实现源码+数据库(98分毕业设计),含有代码注释,小白都可以看懂,个人98分毕业设计。毕业设计、期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。基于springboot+Vue的旅游推荐系统设计与实现源码+数据库(98分毕业设计),含有代码注释,小白都可以看懂,个人98分毕业设计。毕业

    阅读《Python深度学习-基于PyTorch》时的代码.zip

    深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。

    2024年中国低轨通信星座产业及海外拓展前景研究报告.pdf.zip

    2024年中国低轨通信星座产业及海外拓展前景研究报告.pdf

    基于几何约束的车辆3D检测的实现.zip

    基于几何约束的车辆3D检测的实现.zip

    【5层】4352.4平米框架办公楼(含计算书,建筑、结构图).zip

    【5层】4352.4平米框架办公楼(含计算书,建筑、结构图) 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 、本项目3比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看READme.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 、3本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REaDme.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REaDme.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。

    Suricata 下载 安装、使用- windows系统、linux系统 wincap或ncap软件需要另外下载安装

    Suricata 下载 安装、使用- windows系统、linux系统 wincap或ncap软件需要另外下载安装

    U.S.-infra-jobs-report(英文原版+中文翻译)美国电动汽车充电基础设施就业岗位的增长情况报告.zip

    美国充电基础设施

Global site tag (gtag.js) - Google Analytics