SOA架构
面向服务架构soa以其独特的优势越来越受到企业的重视,它可以根据需求通过网络对松散耦合的粗粒度应用组件进行分布式部署、组合和使用。服务层是SOA的基础,可以直接被应用调用,从而有效控制系统中与软件代理交互的人为依赖性。Soa的开发方法一般主要有开源的dubbo、mule、WSO2ESB、cxf,以及付费的oracle soa、ibm soa等。
SOA是一种粗粒度、松耦合的服务结构,是服务的集合,服务是最核心的抽象手段,业务被划分(组件化)为一系列粗粒度的业务服务和业务流程。服务通过基于标准、精确定义的接口通信,通信可能涉及简单数据传递、两个或更多的在一个活动中协作的服务。由此,SOA是一个其所有功能均被定义成精确定义的、可调用的、独立的服务,且能被有序编排、构建业务流程的应用架构。
SOA通过应用组件和传输协议的松散耦合,服务的即时绑定,从而实现业务组件的虚拟化,造就一个虚拟的集成架构或者集成平台服务总线,这样使得服务集成不受任何限制,可以同时集成.NET组件和J2EE组件,以及集成其他遗留系统的各种应用,同时也可以随时更换这些服务组件。最终达到敏捷的、不受限制的服务集成目标,从而使IT能够随着业务需求的变化而自由调整,达到所谓的“随需而变”的最高境界。
SOA是目前EAI领域最先进的体系结构,并得到了IBM、BEA等众多IT厂商的支持,并推出自己的解决方案和相关产品,已日益成为行业应用集成标准。SOA很适合于应用在像数字化校园这种分布式、松耦合、异构平台的场合,它可以彻底解决“信息孤岛”问题。并且充分利用已有的软件资源。所以,采用SOA框架信息化企业或构建数字校园是实现信息资源整合的最佳选择。
SOA的实施具有几个鲜明的基本特征。实施SOA的关键目标是实现企业IT资产的最大化作用。要实现这一目标,就要在实施SOA的过程中牢记以下特征:
可从企业外部访问
随时可用
粗粒度的服务接口分级
松散耦合
可重用的服务
服务接口设计管理
标准化的服务接口
支持各种消息模式
精确定义的服务契约
实现SOA架构的常用技术有Web Services,JMS和BPEL等。
(1)ESB技术。企业服务总线(Enterprise ServiceBus,ESB)是构建基于SOA解决方案时所使用基础架构的关键部分,是由中间件技术实现并支持SOA的一组基础架构功能。它是一种为进行连接服务提供的标准化的通信基础结构。基于开放的标准,为应用提供了一个可靠的、可度量的和高度安全的环境,并可帮助企业对业务流程进行设计和模拟。对每个业务流程实施控制和跟踪、分析并改进流程和性能。目前各大IT公司都推出了基于自己的平台工具的ESB产品,如IBM的WebSphere ESB、BEA的AqusLogic Service Bus等。除此之外,也出现了众多的开源ESB产品,如Mule、ServiceMix和Apache Synapse等。
(2)web Services技术。Web Services主要是为了使原来各孤立的站点之间的信息能够相互通信、共享而提出的一种接口。该接口隐藏了服务实现的细节,允许通过独立于服务实现、独立于硬件或软件平台、独立于编写服务所使用的编程语言的方式使用该服务。Web Services可以通过HTTP、SOAP(XML)、SMTP等协议的组合被访问,利用标准网络协议和XML数据进行通信,具有良好的普适性和灵活性,这使得基于web Services的应用程序具备松散耦合、面向组件和跨技术实现的特点例5。Web Services技术的主要目标是在各种异构平台的基础之上构建一个同样的、与平台与语言无关的技术层,各种应用都可以靠这个技术层来实施彼此的连接和集成。
(3)JMS技术。Java消息服务(Java Message Ser.vice,JMS)是访问企业消息系统的标准API,是Sun公司提出的Java消息服务规范,是用于访问消息系统的不依赖于某个具体厂商的API,它提供给应用程序创建、发送、接受和渎取消息的接口,具体实现可以不同。JMS技术采用异步通信模式,发送消息者将需要变更的数据消息提交到消息平台后,就完成了自己的任务,就可以进行其他的操作。不需要等待服务器端的消息处理结果。这时即使网络出现故障甚至服务器崩溃也不会造成数据的丢失或不一致,消息会保存在消息队列中直到被最终接收。
利用SOA架构开发的优点:
1、可重用
一个服务创建后能用于多个应用和业务流程。
2、松耦合
服务请求者到服务提供者的绑定与服务之间应该是松耦合的。因此,服务请求者不需要知道服务提供者实现的技术细节,例如程序语言、底层平台等等。
3、明确定义的接口
服务交互必须是明确定义的。Web服务描述语言(WebServices Description Language,WSDL)是用于描述服务请求者所要求的绑定到服务提供者的细节。WSDL不包括服务实现的任何技术细节。服务请求者不知道也不关心服务究竟是由哪种程序设计语言编写的。
4、无状态的服务设计
服务应该是独立的、自包含的请求,在实现时它不需要获取从一个请求到另一个请求的信息或状态。服务不应该依赖于其他服务的上下文和状态。当产生依赖时,它们可以定义成通用业务流程、函数和数据模型。
5、基于开放标准
当前SOA的实现形式是Web服务,基于的是公开的W3C及其他公认标准.采用第一代Web服务定义的SOAP、WSDL和UDDI以及第二代Web服务定义的WS-*来实现SOA。
下面详细论述几种主要的开发方法和工具:
1. Dubbo。
DUBBO是淘宝公司的一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。淘宝公司的许多应用就是采用dubbo,运行稳定成功。现在,不少企业采用dubbo开发应用系统。Dubbo是简单有效的soa架构,值得采用。
2. Mule
Mule是一个以Java为核心的轻量级的消息框架和整合平台,基于EIP(Enterprise Integeration Patterns,由Hohpe和Woolf编写的一本书)而实现的。Mule的核心组件是UMO(UniversalMessage Objects,从Mule2.0开始UMO这一概念已经被组件Componse所代替),UMO实现整合逻辑。UMO可以是POJO,JavaBean等等。它支持30多种传输协议(file,FTP,UDP,TCP,email,HTTP,SOAP,JMS等),并整合了许多流行的开源项目,比如Spring,ActiveMQ,CXF,Axis,Drools等。
Mule Studio是一个功能强大、用户界面友好的基于Eclipse的开发工具。使用者不需要深入了解Mule的XML配置语法,就可以在几分钟内轻松的创建、编辑、测试Mule ESB流程。Mule Studio基于Eclipse技术,包含3个主要部件:项目结构树、工具箱和画布。项目结构树包含整个项目的目录结构。
Mule是一个企业服务总线(ESB)消息框架.它的主要特性包括:
1.基于J2EE1.4的企业消息总线(ESB)和消息代理(broker).
2.可插入的连接性:比如Jms,jdbc,tcp,udp,multicast,http,servlet,smtp,pop3,file,xmpp等.
3.支持任何传输之上的异步,同步和请求响应事件处理机制.
4.支持Axis或者Glue的Web Service.
5.灵活的部署结构[Topologies]包括Client/Server,P2P, ESB 和Enterprise Service Network.
6.与Spring 框架集成:可用作ESB 容器,也可以很容易的嵌入到Spring应用中.
7.使用基于SEDA处理模型的高度可伸缩的企业服务器.
8.强大的基于EIP模式的事件路由机制等.
3. WSO2ESB
WSO2ESB是一种根据ApacheV2.0许可证发布的快速、轻量级和灵活的企业服务总线产品。使用ESB在HTTP、HTTPS、JMS、mail等协议基础上通过业务系统过滤、转换、路由和处理SOAP,二进制、纯XML和文本消息。
WSO2ESB是一个为企业准备的完全成熟的ESB。WSO2ESB是建立在Apache Synapse项目基础上的。Apache Synapse是使用Apache Axis2创建的。
4. CXF
ApacheCXF 是一个开源的Services框架,CXF帮助您利用Frontend 编程 API来构建和开发Services,像JAX-WS。这些Services可以支持多种协议,比如:SOAP、XML/HTTP、RESTful HTTP 或者 CORBA ,并且可以在多种传输协议上运行,比如:HTTP、JMS或者JBI,CXF大大简化了Services的创建,同时它继承了XFire传统,一样可以天然地和Spring进行无缝集成。
功能特性
CXF 包含了大量的功能特性,但是主要集中在以下几个方面:
支持Web Services标准:CXF支持多种Web Services标准,包含SOAP、BasicProfile、WS-Addressing、WS-Policy、WS-ReliableMessaging和 WS-Security。Frontends:CXF支持多种“Frontend”编程模型,CXF实现了JAX-WS API(遵循JAX-WS 2.0 TCK版本),它也包含一个“simplefrontend”允许客户端和 EndPoint 的创建,而不需要Annotation注解。CXF既支持 WSDL优先开发,也支持从Java的代码优先开发模式。容易使用: CXF设计得更加直观与容易使用。有大量简单的 API用来快速地构建代码优先的 Services,各种Maven的插件也使集成更加容易,支持 JAX-WS API,支持Spring 2.0更加简化的XML配置方式,等等。支持二进制和遗留协议:CXF的设计是一种可插拨的架构,既可以支持 XML,也可以支持非XML的类型绑定,比如:JSON和CORBA。
项目目标
下面列出了来自Apache CXF官方网站的项目目标。
概要
高性能可扩展简单且容易使用支持多种标准
支持 JAX-WS、JAX-RS、JSR-181和 SAAJ;支持SOAP 1.1、1.2、WS-IBasicProfile、WS-Security、WS-Addressing、WS-RM 和 WS-Policy;支持WSDL 1.1、2.0;支持MTOM;
多种传输方式、Bindings、DataBindings和Format
Bindings:SOAP、REST/HTTP;DataBndings:目前支持JAXB 2.0、Aegis两种,默认是JAXB 2.0。XMLBeans、Castor和JiBX数据绑定方式将在CXF 2.1版本中得到支持;格式(Format):XML、JSON;传输方式:HTTP、Servlet、JMS和Jabber;可扩展的API允许为CXF增加其它的Bindings,以能够支持其它的消息格式,比如:CSV和固定记录长度。
2Apache CXF特点编辑
灵活部署
轻量级容器:可在Tomcat或基于Spring的容器中部署Services;集成JBI:可以在如ServiceMix,OpenESB or Petals 等等的JBI容器中将它部署为一个服务引擎;集成 SCA:可以部署在如Tuscany之类的SCA容器中;集成J2EE:可以在J2EE 应用服务器中部署 Services,比如:Geronimo、JOnAS、JBoss、WebSphereApplication Server 和WebLogic Application Server,以及Jetty和Tomcat;独立的Java 客户端/服务器。
支持多种编程语言
全面支持JAX-WS 2.0 客户端/服务器编程模型;支持 JAX-WS 2.0 synchronous、asynchronous和one-way API's;支持JAX-WS 2.0 Dynamic Invocation Interface (DII) API;支持wrapped and non-wrapped风格;支持XML messaging API;支持JavaScript和ECMAScript 4 XML (E4X),客户端与服务端均支持;通过Yoko支持CORBA;通过Tuscany支持SCA;通过ServiceMix支持JBI;
CXF 框架支撑环境
CXF 框架是一种基于 Servlet 技术的SOA应用开发框架,要正常运行基于 CXF应用框架开发的企业应用,除了 CXF框架本身之外,还需要JDK和Servlet容器的支持。
代码生成
Java toWSDL;WSDLto Java;XSDto WSDL;WSDLto XML;WSDLto SOAP;WSDLto Service;