本周任务:了解服务相关基本概念,WebService服务跑通并发布在网页上
1.SOA基本概念
SOA是一种面向服务的体系架构。一般的软件体系结构有C/S,基于web平台的B/S技术(J2EE+.NET——>SOA架构)
三层架构(3-tierarchitecture) 通常意义上的三层架构就是将整个业务应用划分为:表现层(UI)、业务逻辑层(BLL)、数据访问层(DAL)。区分层次的目的即为了“高内聚,低耦合”的思想。
SCA:服务组件架构,描述了利用SOA构建应用程序和系统的模型
SDO:服务数据对象,简化和统一了处理数据的方式
BPM:业务流程管理,企业各种业务环节整合的全面管理模式
SOA的核心体现在企业应用或者业务功能上的"重用"和"互操作",而不再把IT与业务对立起来,这可以被视为在IT驱动业务的方向上迈出的重要一步。
SOAP(简单对象访问协议):
Ø 简单对象访问协议是交换数据的一种协议规范,是一种轻量的、简单的、基于XML的协议,它被设计成在WEB上交换结构化的和固化的信息;
Ø SOAP=RPC+HTTP+XML。
2.SOA演变过程
三层架构向SOA体系转变
EAI->P2P->SOA
EAI用于解决信息孤岛问题
3.服务的概念
服务的概念:通过规范化的描述来表征,对外提供访问地址,并可被重复使用的业务功能单元。
服务是SOA的核心:
Ø 一个“服务”定义了一个与业务功能或业务数据相关的接口,以及约束这个接口的契约,如服务质量要求、业务规则、安全性要求、法律法规的遵循、关键业绩指标(Key Performance Indicator,KPI)等;
Ø 业务被划分为粗粒度的业务服务和业务流程;业务服务相对独立、自包含、可重用,由一个或者多个分布的系统所实现,而业务流程由服务组装而来;
Ø 具体的服务实现不依赖特定实现语言与工具。
Ø 技术和位置的透明性,使得服务的请求者和提供者之间高度解耦。
从服务的角度来看SOA——本质上是服务的集合。服务间彼此通信,这种通信可能是简单的数据传送,也可能是两个或更多的服务协调进行某些活动。服务间需要某些方法进行连接。所谓服务就是精确定义、封装完善、独立于其他服务所处环境和状态的函数。
4.不同角度看SOA
1) SOA要素
从程序员的角度,SOA是一种全新的开发技术,新的组件模型,比如说Web Service;
从架构设计师的角度,SOA就是一种新的设计模式,方法学;
从业务分析人员的角度,SOA就是基于标准的业务应用服务。从概念的角度,SOA是一种构造分布式系统的方法,它将业务应用功能以服务的形式提供给最终用户应用或其他服务。
2)SOA体系结构模式:
1. 简单的webservice调用
2. 企业服务总线ESB异构系统集成为业务过程
3)SOA实现方式
3. 适配器模式——二次封装遗留系统的功能,开放接口
4. 发布-访问模式(WSDL+UDDI+SOAP)
5. 以上两种缺点是耦合度过大,解决方法,将绑定关系抽取出来
6. 服务代理(复杂,修改麻烦)
7. 服务集成器(降低耦合度,集成大力度的服务,集成器依靠配置信息分别调用小粒度的服务,通过修改配置做到变更)不足:服务之间独立存在,关系复杂。
8. ESB服务总线——ESB是一种在松散耦合的服务和应用之间标准的集成方式。ESB的作用在于实现服务间智能化集成与管理的中介
5.webservice服务发布实践
web service 的基本协议有SOAP,WSDL,UDDI
5.1实现原理
1. UDDI相当于webservice的黄页
2. JAX(Java Api for Xml)-WS规范是一组XML web services的JAVA API。JAX-WS允许开发者可以选择RPC-oriented或者message-oriented 来实现自己的web services。
3. 在 JAX-WS中,一个远程调用可以转换为一个基于XML的协议例如SOAP。在使用JAX-WS过程中,开发者不需要编写任何生成和处理SOAP消息的代码。JAX-WS的运行时实现会将这些API的调用转换成为对应的SOAP消息。
4. 在服务器端,用户只需要通过Java语言定义远程调用所需要实现的接口SEI (service endpoint interface),并提供相关的实现,通过调用JAX-WS的服务发布接口就可以将其发布为WebService接口。在客户端,用户可以通过JAX-WS的API创建一个代理(用本地对象来替代远程的服务)来实现对于远程服务器端的调用。当然JAX-WS 也提供了一组针对底层消息进行操作的API调用,你可以通过Dispatch 直接使用SOAP消息或XML消息发送请求或者使用Provider处理SOAP或XML消息。通过web service所提供的互操作环境,我们可以用JAX-WS轻松实现JAVA平台与其他编程环境(.net等)的互操作。JAX-WS2.0 (JSR 224)是Sun新的web services协议栈,是一个完全基于标准的实现。在binding层,使用的是the Java Architecture for XML Binding (JAXB, JSR 222),在parsing层,使用的是the Streaming API for XML(StAX, JSR 173),同时它还完全支持schema规范。
5.2 Webservice服务发布流程
环境:win10+myeclipse10+JDK1.8
使用jdk自带的Endpoint类来发服务,创建类hello.java
运行代码,发布服务
l 使用wsimport命令来生成客户端代码:
l 打开Cmd,输入默认路径
C:\Users\11966\AppData\Local\MyEclipse\Common\binary\com.sun.java.jdk.win32.x86_64_1.6.0.013\bin>
l 解析wsdl文件
wsimport -s C:\Users\11966\Desktop-p ws -keep http://localhost:9090/hello/hello?wsdl
其中 –s解析包存放路径 -keep 访问wsdl文件
l 编写测试代码
l 新建一个客户端工程java_jdk,将得到的代码拷入工程后,新建一个Test_Client类
通过运行Test_Client文件可得到控制台反馈如下:
Ø 还可以通过点击myeclipse的这个图标到浏览器中进行调用这个服务,在右上角选择wsdl的图标,然后点击坐上角的WSDL Main,输入wsdl的地址,点击Go
l 点击方法sayHello
l 点击Add,添加参数
l 点击Go得到结果,测试成功