??xml version="1.0" encoding="utf-8" standalone="yes"?>
SCA
服务构g架构
(Service Component Architecture)
是一套规范,它描qC采用面向服务的体pȝ构来搭徏应用和系l时的模型?/span>
SCA
扩展q完善了以前实现服务的方法,q且
SCA
构徏在开攄标准之上Q?/span>
例如Q?/span>
Web Service
服务构g架构
SCA
Q?/font>
Service Component Architecture
QؓZ面向服务的体pȝ构的应用和系l提供了一U编E模型。这Z一U观点,即业务功能以一pd服务的Ş式被对外提供出来Q然后它们被l合在一起去实现满特定业务需求的解决Ҏ。这些复合的应用Q可以包含专门ؓ此应用程序创建的新服务,也可以包含来自已有的pȝ和应用程序的业务功能Q重复利用就像其中的一部分一栗?/font>
SCA
即ؓl合服务提供了模型,也ؓ服务构g的创建,包括?/font>
SCA
l装中重用已有应用系l的功能提供了模型?/span>
OSGi
OSGi
是什么,
OSGi
是一U服务运行^台。通过实现能够提供服务的符?/span>
OSGi
规范的组Ӟ用户可以其lg发布?/span>
OSGi
q行q_Q供用户和其他组件用?/span>
OSGi
lg提供的服务具有两个层面的含义Q系l层面,即一个组件ؓ其他lg提供服务Q这些服务体Cؓ
Java
接口的实玎ͼ业务层面Q即一个组件ؓ外部pȝ或用h供某U业务服务实现?/span>
从概늜我们可以很快发现他们的相同点和不同点?/span>
他们都是一U组件模型,而且是面向服务的~成模型Q都Ҏ务组件模型作了相应的定义。在两种模型中都有“模块”,“组件”,“服务”这
3
U共同的概念。我们分别从q三U感忉|看看他们之间的差?/span>
模块Q?/span>
可能
OSGi
对于模块的概念定义的更完善一点,支持模块的动态更新和依赖Q?/span>
SCA
对于模块的概念中没有涉及动态更新的概念
(
实际如果?/span>
SCA
中的模块映射?/span>
JEE
中的
EAR
块就可以做到?/span>
)
Q对于模块间依赖关系的定义也没有
OSGi
?/span>
Export/import
定义的完,对于一个包的引用,要存?/span>
2
个不同的副本Q至?/span>
WPS
Q?/span>
IBM
?/span>
SCA
的实玎ͼ中是q样。所以说模块的定?/span>
OSGi
要比
SCA
要完善,实际上这h两种模型出发Ҏ完全不同的,
OSGi
设计之初主要是面向网l设备的Q最后被
Eclipse
所采用才ؓ大家所知的Q?/span>
SCA
从一开始就是面向企业应用的,所以这斚w没有
OSGi
定义的完善。模块的定义
OSGi
是在
MANIFEST.MF
文g中通过元数据定义的Q?/span>
SCA
是在
sca.module
文g中定义的
xml
格式。从q点上我们就可以看出来,
OSGi
只能是在
java
q_上(他的规范中说明也是只适合
java
q_的,规范?/span>
0layer
定义了它的最?/span>
runtime
Q,?/span>
SCA
是一U跨q_的规范,它不依赖于^収ͼ你可以是
Java
环境也可?/span>
C++
环境?/span>
对于lg的概念,个h感觉
OSGi
是在
DS
Q?/span>
OSGI R4
?/span>
Declarative Services
Q出来以后才有了比较定性的定义Q?/span>
SCA
从一开始就非常lg的定义,对于
SCA
lg可以是一?/span>
webservice
Q一?/span>
java
对象Q一个有限状态机中的规则对象Q也可以是一?/span>
BPEL
程对象Q还可以一个h工干预的工作对象,更可以是许多lg的组合对象,q一?/span>
OSGi
lg是做不到Q也不要?/span>
OSGi
能够做到Q因Z们的设计出发Ҏ本是不同的,不要把企业应用的东西强加到
OSGi
中来Q在
OSGi
中的lg可以发布
/
查找服务Q?/span>
SCA
也可以这么做Q对于服务的引用Q?/span>
OSGi
只能是在
single JVM
中,不要?/span>
OSGi
要知道他当初设计的目标就是网l设备,不用考虑企业U应用中的分布式Q服务质量什么的。但是组件概念上
SCA
有一点还是弱?/span>
OSGi
Q?/span>
OSGi
Ҏ务的引用可以做到动态更斎ͼ一个服务改变了Q它可以动态的或者是静态的更新应用它服务的lg对象Q这一点在|络讑֤中是非常重要的,但是?/span>
SCA
q种企业U应用中到底需不许多要我们q需要考虑Q毕竟如果我们是面向接口~成Q而不用关心细节是什么,你的服务再怎么更新Q只要我们的接口不变׃会用什么问题?/span>
而服务,最大的差别可能是
OSGi
是在
single JVM
内的所以对于服务的引用永远都是直接的内存引用吧Q?/span>
SCA
在服务的引用上附加了
Binding
的概念也多了一个协议的选择层,很象
jmx
?/span>
distributed layer
Q?/span>
SCA
对于服务?/span>
Export/Import
都需?/span>
Binding
一个具体的实现Q你的服务可以通过
WebService
来发布,也可以通过
RMI
Q?/span>
JMS
{等来发布。这一Ҏ
SCA
的设计出发点来决定的Q面向企业的应用开发)。对于服务的调用Q不仅仅是必d环境内的调用Q也可以在环境外q行调用Q比如你在一?/span>
JSP
面惌调用
SCAExport
出来的服务,你就可以通过
SCA
提供?/span>
Tools
直接调用Q?/span>
OSGi
是不支持环境外调用的?/span>
从以上来?/span>
OSGi
?/span>
SCA
除了Z同样的设计方法,其他的不具什么可以比较性,因ؓ他们设计的根本意图上是不同的Q一个是用在单一个的
JVM
中的面向|络讑֤或者像
Eclipse
q种应用Q不需要考虑服务质量Q服务的可靠性,分布式,{等。?/span>
SCA
从诞生之初就Z解决
SOA
应用中的规范性,而且与他同别的q有
SDO
来定义服务的数据对象Q这一点也?/span>
OSGi
中没有定义的?/span>
有h会说
OSGi
最q正在定义在企业U应用的规范Q?/span>
EEG
Q,
Eclipse
?/span>
RSP
也在做相应的努力。但是如果是?/span>
SCA
之外另开辟出一个新的模型空_个h觉得不太可能Q毕?/span>
SCA
?/span>
IBM
Q?/span>
BEA
Q?/span>
Oracle
Q?/span>
Sap
q些厂商在认识到许多现有技术的不之后ȝ出来的设计模型,是这些厂商经验的U篏Q就?/span>
OSGi
?/span>
OSGi
l织在网l设备应用中的积累的一Pq两U技术只能出C补性,再说
SCA
模型的定义充分体现的软g界一贯的规则“重用”,不管?/span>
IBM
?/span>
WPS
Q还?/span>
Apache
?/span>
Tuscany
都是以现有^Cؓ出发点设计的Q是?/span>
SCA
q种模型与现实技术做一定的映射Q例如,如何实现异步调用可以以借助
JEE
环境中的消息或?/span>
Corba
中消息机制?/span>
真希望看?/span>
OSGi
?/span>
EEG
l织?/span>
SCA
规范定制l织合作的场景。这样不仅可以让lg服务思想得到升华Q还能ؓ企业U开发开辟一个新的天地?/span>
以上观点U属个h感触Q不代表M特别的言论,其实最q正打算吧原有的q_q移?/span>
OSGi
q_上,在研I过E中发现了许多有的地方?/span>
Ƣ迎大家一赯?/span>
OSGi
?/span>
SCA
技术?/span>