Spring
在很多企业级的应用系统中,Spring已经担负起可靠的细粒度的集成框架;
OSGi
正在成为Java世界里最为有效的解决依赖关系的技术;
SCA
SCA是被标准化组织接纳为新一代标准的SOA重要构成之一;
一些有力的机构正在促成这个趋势
- Spring正在实现让他的ApplicationContext运行于OSGi内核之上的方案。
- OSGi R4提出了可声明服务标准(DS)。该标准极大地推动了OSGi的服务化特征,包括,服务发现、服务发布和服务注册。
- SCA1.0标准明确提出了通过Spring实现SCA构建的内容。开源社区如Tuscany都提供了这种实现。
这种集成为Spring添加的分布式特性,在JVM上提供了非Java的技术实现环境(SOA是语言无关的)
而OSGi将可以在SCA中扮演多种角色,SCA为OSGi增加了分布式特性,将OSGi boundle发布为SCA构件,OSGi可以作为SCA的运行基础,并为SCA提供更加便利的扩展平台;
图中:SCA容器运行在OSGi内核中,SCA构件X借助OSGi注册服务确定boundle A的位置,并访问它
图中:OSGi的boundle A通过OSGi的注册服务访问到SCA容器中的构件X
图中:左侧是一个异构环境中的SCA容器,他可能支持如PHP、C++等技术;右侧是一个OSGi内核之上的java SCA容器,他为OSGi提供了与异构环境通讯的能力。
图中,构件X是一个通过implementation.osgi(非标准,但是软件提供商可能增加此扩展)实现的SCA构件,这里,构件X被绑定到一个web服务。反过来,构件X(boundle A)也可以通过SOAP访问议购系统中的构件Y(他也被绑定到一个web服务)。
SCA的先进思想在于:构件的实现(implementation)和引用(reference)将服务的实现和使用分离开来,同时将各种可能的通讯方式从业务代码中分离出来,转为由容器处理。
OSGi与SCA的结合提供了:
- 一个一致的服务/构件模型
- 将各种通讯方式以一种标准的方式统一到容器中
- 基于OSGi的容器,其扩展方式更加简单
- 多种可选的实现技术,使开发者可以选择最适合具体工作的技术
SCA与Spring
SCA与Spring具有很多相同点,如他们都提供了构件之间的引用和构件的可配置。但是SCA突出的优势在于:SCA是跨语言的,以及支持多种通讯方式的分布式架构:
SCA能够为基于Spring的的应用系统增加:
- 支持多种协议的远程访问
- 支持多种编程语言,超出JVM的限制
- 实现异步编程
- 能够通过WS-Policy实现安全和事务等