二.背上铺盖带上干粮SCA服务框架之路启程
记得我在推广SCA规范的时候,常常和Spring作比较,Spring广为流传很大的一点就是在于它的IOC理念,SCA中也很彻底贯彻了这点(这点应该是个趋势,包括OSGI等等开源框架),但是也正是这个理念,在实际运用当中会带来困扰。当开发系统越来越大,一个工厂里面的bean组装复杂度不断增加,庞大的spring bean factory就好比一个大锅子,越来越多配置交织在一起,最终模块与模块之间无法分割,架构师虽然规划了很好的目录结构以及配置文件,但是在运行期的结构依然是耦合性极强,难以分割的业务模块逻辑团。这样的系统所面临的问题就像当初OO要解决的问题一样,只是上升到了业务级别:业务耦合性强,需求变更适应能力弱,维护成本高,无法剥离较为独立的业务组件提供复用,模块与模块之间牵制性强等。
SCA规范中描述的元数据就是Composite和Component,在代码级别的概念中Component就是Spring的bean,Composite可以看作Spring bean factory(其实使用Spring也可以实现SCA,只是如果使用factory来作为composite那么可能在性能上和可扩展性上还有一些问题)。在业务级别的设计中Composite就是业务模块,Component就是业务内部的业务实现逻辑单元,同时引入了Service和Reference的概念,将服务和引用单独作为内部逻辑单元,同时定义了Service和Reference的两种级别(Composite和Component),达到了业务实现作用域的控制,真正做到了业务组件级别的封装。
应该来说,除了开放性的特质以外,业务模块封装的特质是SCA的模块化最突出的优势,也是解决系统日益庞大情况下,如何降低维护成本,如何适应需求变更,如何提高开发效率的有效手段。但就是规范中的这一点,Tuscany的实现,不得不让我由原来的基于Tuscany架构二次扩展开发的想法做了转变,同时在后面对于服务框架的需求不断发展的情况下,对于Tuscany在服务框架中的定位不断的作着改变。
Tuscany在业务模块封装上面究竟有什么问题呢?在Tuscany中提供给第三方嵌入的SCA容器EmbeddedSCADomain结构如下:
EmbeddedSCADomain运行期结构图
上面的图展示了EmbeddedSCADomain如何载入外部的Composite到容器中,这里所用的一个技巧,就是include,Composite可以include多个Composite。下图是一个很简陋的活动图,主要就是大致描述了EmbeddedSCADomain是如何加载所有的Composites的。这里面省略了Tuscany对于插件扩展的载入以及一些细节方面的处理。
EmbeddedSCADomain启动活动图
根据上面两个图就出现了两个比较大的问题:
1. 首先EmbeddedSCADomain所有的Composite和资源都是根据固定的URI载入,但是这个或者是目录或者是jar,但是如果是目录中的jar将不会去解析,那么对于我们业务模块当前的开发要求,各个业务开发组会把不同的Composite最后打包到各个业务模块的jar中,这样就没有办法通过一个EmbeddedSCADomain去装载,互通就更加说不上了。不过这个问题不是根本性的问题。而后面2的问题是根本性的原则问题。
2. Tuscany让所有的Composite互通,是将所有的composite通过include到一个domainComposite中,在build的过程中将所有的Composite的内部components克隆到了domainComposite中,这样其实所有的Component就在一个Composite中,也就很方便的互通了。这样SCA框架的业务模型封装形同虚设,和spring一样一个大的factory没有什么区别,丢失了最大的一个优势。同时serivce和reference都没有两种级别之分,业务模块化就无法实现和控制。
就这样两个问题,让我需要考虑重新基于Tuscany的部分内核机制来重新构建容器装载,解析,组装机制。下图是ASF(Application Service FrameWork)的运行期结构设计图
ASF(Application Service FrameWork)的运行期结构设计图
问题一的解决方案:
ASF中定义了真正包容所有Composite的Service Container,创建的过程中,通过搜索Classpath中所有的有composite-load-config.xml文件的jar,composite-load-config.xml定义了需要装载的Composite,然后resolve这些jar的所有的resource,根据定义要加载的内容动态加载所有需要加载的composite。
问题二的解决方案:
基于问题一的解决,然后在Container中记录各个composite的必要信息和状态,然后按照不同级别的service和reference组装所有的composite,最后激活所有的composite。
这两个问题的解决,也标志着ASF的基础框架形成,后续的战斗真正开始。
分享到:
相关推荐
标题中的“全部的SCA&SDO中文规范”指的是Service Component Architecture (SCA) 和 Service Data Objects (SDO) 的中文版本规范集合。这些技术是IBM提出的用于构建面向服务架构(SOA)应用的关键组件。 1. **...
在"apache-tuscany-sca-1.6.zip"这个压缩包中,包含的是Apache Tuscany SCA 1.6版本的相关文件。这个版本可能包括了以下关键组件和资源: 1. **SCA模型**:SCA的核心是它的模型,它定义了服务、组件、接口、绑定和...
它通过内置的五大主要分析引擎:数据流、语义、结构、控制流、配置流等对应用软件的源代码进行静态的分析,分析的过程中与它特有的软件安全漏洞规则集进行全面地匹配、查找,从而将源代码中存在的安全漏洞扫描出来,...
在第一种类型中,本质上是将整个SCA应用视为一个更大应用的一部分,而第二种类型则将提供服务的SCA应用视作另一个SCA应用的客户端。本文提出的模型实现了SCA应用分布性的第一种类型。 7. 实际案例应用 在文章的部分...
Axis2是基于 Axis1 的下一代Web服务框架,它提供了更高级别的功能,如服务组件架构(SCA)、服务数据对象(SDO)以及更好的性能和可扩展性。 压缩包子文件的文件名称列表包括 "lib"、"META-INF" 和 "classes",这些...
- 它基于Murata的3D-MEMS技术,信号处理在一个混合信号ASIC中完成,并利用灵活的SPI数字接口。 - 传感器元件和ASIC被封装进一个12针的预模塑料外壳中,以保证产品在使用寿命期间的可靠性。 - 该组件被设计、制造...
**SCA_Java通用注解和API规范**是一份重要的文档,它不仅详细介绍了SCA框架的核心概念和技术细节,还为开发者提供了一套完整的工具集来构建和管理基于SOA的应用程序。通过理解和应用其中的注解和API,开发者可以更...
- **SCA(Service Component Architecture)**:服务组件架构是SOA的具体实现方式之一,它为开发基于SOA的应用程序提供了一套完整的规范。SCA不仅简化了开发过程,还将底层技术细节与业务逻辑分离,使开发者能更专注...
在"SCA核心框架CF"中,我们主要关注的是SCA2.2.2版本的实现,这是一个基于C++的实现,旨在为开发者提供一种高效、可靠的平台来构建SOA(Service-Oriented Architecture,面向服务的架构)应用。 在"framework-core-...
基于SCA的分布式Web应用研究是探讨如何在JavaEE平台上构建以SOA为基础,利用SCA的优势来构建分布式Web应用系统。SCA(Service Component Architecture)是实现SOA(面向服务的架构)的一种方式,其核心理念是服务...
**SCA(Service Component Architecture)**,即服务构件架构,是一种用于构建基于服务的应用程序和服务的技术规范。SCA旨在提供一个统一的方法来组合服务,使开发人员能够更加关注业务逻辑而非底层技术细节。这种...
【WebSphere基于OSGi的应用部署和SCA集成】 WebSphere应用服务器V7引入了对OSGi(开放服务网关倡议)应用程序和Java持久化API 2.0的支持,这两个技术的结合提供了更灵活和模块化的部署方案。OSGi Blueprint ...
本书《理解SCA:服务组件架构》详细介绍了这些概念,并提供了实际案例来演示如何在实际项目中应用SCA。通过阅读此书,读者可以学习到如何设计、实现和部署基于SCA的应用,以及如何利用SCA提高软件的可维护性和可扩展...
在学习和应用SCA规范时,应重点理解每个概念的含义及其相互关系,以及如何在实际项目中实现组件化和服务化的架构设计。 此外,开发者还需要关注SCA的实现框架,比如Apache Tuscany,这是一个开源的SCA实现,提供了...