服务构件架构(Service Component Architecture) 致力于为使用广泛的编程语言来构造服务构件提供一种编程模型,并且也为把这些服务构件组装为一个业务上的解决方案提供了一种模型,这种组装的活动正是采用面向服务的架构(service-oriented architecture)来搭建应用系统的核心。SCA是一种全新的、跟语言无关的编程模型,这种面向服务构件的编程模型可以大大简化客户的编程,提高应用的灵活性,将会对现有软件开发方式产生颠覆性的影响。
服务数据对象(Service Data Objects)致力于为应用系统中处理数据提供统一的方式,而不论数据的来源、格式是什么样的。SDO提供了一种对数据库和对服务来说统一的数据处理方式,它也提供了相应的机制,用来实现当数据同其来源分离时的处理。
SCA和SDO都可以独自使用,没有规定说在同一个应用程序中必须同时使用两种技术。然而SCA和SDO可以结合起来一起使用,从而为采用面向服务的架构搭建应用系统提供一种强有力的、灵活的方式。
SCA是为基于SOA思想的系统而制定的开发、部署规范,它首先必然是具备了SOA的一系列的优点,像跨语言、分布式、以服务的思想构建系统等。SCA对于组件中的服务的调用提供了异步调用的支持,在异步调用的支持上SCA的考虑也较为全面。
使用SOA构建业务解决方案主要的优势之一就在于其能按照业务需求的变化和革新快速组装新的解决方案。解决方案组装的关键是包含现有的应用和功能的能力,而不是什么都从头开始。的确,只有尽可能地复用现有的功能,才能完成快速开发的目标。
SCA一种是使用SOA的业务解决方案的编程模型。SCA提供了这么一个特性,使得将已存在的功能组装成新的解决方案尽可能的简单。该文档检验了这些特性中的一些。
SCA提供了实现面向服务的架构(SOA)的一个编程模型。
服务组件是SCA中的基本组成元素和基本构建单位,也是我们具体实现业务逻辑的地方。我们可以把它看成是构建我们应用的积木
=================================================================================
我都是用 CXF 的,我和你说一下 CXF 怎么调用吧。
1:到 http://cxf.apache.org/download.html 去下载最新的 Apache CXF 包,下载好后解压到某个目录中,比如:d:/apache/cxf-2.1.4 中;
2:在控制台中进入 d:/apache/cxf-2.1.4/bin 目录,执行这个命令:
wsdl2java -p com.bao.ws -d d:/ws -verbose http://www.ayandy.com/Service.asmx?WSDL
wsdl2java 命令会生成一些封装的类和 SOAP 接口。
-p 参数是个包名,表示生成的类、接口放在什么包下面
-d 是个目录名,生成的包放在什么目录下
-verbose 是在生成代码时产生一些日志输出
最后一个是 WSDL 地址
3:生成好后把这些文件复制到 Eclipse 某个工程的相同包下面去。
4:到 CXF 的 lib 目录中把这些文件加载到 Eclipse 的 classpath 中去:
cxf-2.2.3.jar
geronimo-activation_1.1_spec-1.0.2.jar
geronimo-annotation_1.0_spec-1.1.1.jar
geronimo-jaxws_2.1_spec-1.0.jar
geronimo-stax-api_1.0_spec-1.0.1.jar
geronimo-ws-metadata_2.0_spec-1.1.2.jar
jaxb-api-2.1.jar
jaxb-impl-2.1.12.jar
saaj-api-1.3.jar
wsdl4j-1.6.2.jar
wstx-asl-3.2.8.jar
XmlSchema-1.4.5.jar
4:写个 Test 类测试一下:
-
Java code
-
import javax.xml.namespace.QName; import javax.xml.ws.Service; import javax.xml.ws.soap.SOAPBinding; public class WebServiceTest { private static final QName SERVICE_NAME = new QName( " http://tempuri.org/ " , " ServiceSoap " ); private static final QName PORT_NAME = new QName( " http://tempuri.org/ " , " ServiceSoapPort " ); public static void main(String[] args) { Service service = Service.create(SERVICE_NAME); String endpointAddress = " http://www.ayandy.com/Service.asmx " ; service.addPort(PORT_NAME, SOAPBinding.SOAP11HTTP_BINDING, endpointAddress); ServiceSoap hw = service.getPort(ServiceSoap. class ); ArrayOfString as = hw.getWeatherbyCityName( " 上海 " , TheDayFlagEnum.TODAY); for (String str : as.getString()) { System.out.println(str); } } }
需要注意一下的是,我用的 CXF 2.1.3 生成的 Service 类有个 bug,只要把这个类 import 中的这行:import javax.xml.ws.Service; 去掉就行了。