SCA(Service Component Arichitecture)
效果:实现了业务组件和传输协议的分离,可以处理各种平台组件的集成。
内容:SCA思想的具体实现是SCA标准和SCA的容器环境。
SCA容器实现了将复杂的服务组件集成过程隐藏在容器内部,开发者之需要按照SCA的标准去开发和集成服务,最终部署到SCA的容器里面即可。SCA容器的实现很复杂,有关其容器的组成与架构也是一种商业秘密。
SCA服务组件 -->服务模块 --> 服务子系统-->example1—helloWorld -->example2—调用不同技术组件
1.1 服务组件
服务组件是SCA中的基本组成元素和基本构建单位,也是我们具体实现业务逻辑的地方。我们可以把它看成是构建我们应用的积木。
如上图,分别讲述服务组成的各个部分:
a)、服务(Service),用来让其他组件调用。是一个接口。如果是基于Java的SCA,它就是Java的接口;也可以是WSDL的ProtType接口,目前只有这两种形式。
b)、组件实现(Implementation),实现所创建的服务,对Java来说,就是接口的实现类。
c)、引用(Reference),一个组件可能需要调用其他组件,需要创建于igeqita组件的引用。对Java来说,就是其他组件的Java接口。
d)、属性(Property),对组件实现的一种属性参数注入。
服务组件提供给别的服务调用的入口叫Interface(接口)。而服务组件本身可能也需要调用别的服务,这个调用出口叫Reference(引用)。无论是接口还是引用,其调用规范都是WSDL或Java接口。
1.2 服务模块
SCA的模块是实际上是将SCA组件(做为零件)重新组合集成度更高的组建,从整体看来SCA模块和SCA组件的结构式一致的。从构成组件的“零件”角度看,SCA模块是用了组件作为零部件重新组装为新的组件(模块)。
其实道理也非常简单,下面是SCA模块的基本原理图:
模块从整体上也是个组件。模块是通过SCA的配置文件配置组装形成的,不需要程序的硬编码。
提升(Promote):就是将组件的接口、属性、或引用装配为模块的对应的接口、属性或引用。
连线(Wire):就是在模块内部,组件之间的调用关系。比如组件A的实现调用了组件B,那么组件AB间就存在一个连线。
当组件之间需要调用的时候,由于目前组件(如EJB、WS、JMS)传输协议的多样化,这样在相互的调用的时候,需要将绑定不同的协议去调用。这些绑定信息包括了目标服务或源服务的调用方式,位置信息,调用的方法等。
模块中的服务组件是不能直接被外部Java代码使用的,为了外部的Java代码,比如JSP/Servlet使用模块中的服务组件,WID工具在模块中提供了一个特殊的端点,叫做Standalone Reference。这个端点只有引用(Reference),而没有接口(Interface)。只要把这个端点的引用连接到需要调用的服务组件的接口,外部的Java代码通过这个引用的名称来调用相应的服务组件了
在一个大的项目里面,可能会有很多服务模块,多个服务模块之间如果需要相互调用,那么就可以将多个服务模块通过WS或者JMS等技术绑定在一起,形成服务子系统。
1.4 example-SCA实现的Hello World组件实例
完整SCA组