当前位置:文档之家› 面向服务的架构标准SOA

面向服务的架构标准SOA

面向服务的架构标准SOA
面向服务的架构标准SOA

面向服务的架构标准领先技术不意味厂商锁定XML和Web服务正在作为面向服务的架构(SOA)的平台来出现,它既可用于企业内部通信,也可用于企业间通信。作为第一个既支持SOA编写,也支持SOA 利用的Java集成开发环境(IDE),WebLogic Workshop天生就带上了专有创新的印记。从那时起,BEA通过多种机制,从开放标准到开放源代码,已经实现了对这些创新进行投资保护的承诺,使得开发人员可以充分利用BEA的尖端生产率和集成特性,而不必担心锁定在某一厂商。下面,让我们一起来看看在Workshop中基于SOA的关键创新,以及在每种情况下是如何保护投资的。

什么是SOA?

XML和Web服务是当今的热门技术,因为它们在实现面向服务的架构(SOA)上担当了重要的角色。目前独立的、而且通常是相互孤立的应用程序,制约了业务服务的共享,SOA则正在解决这一问题。通过给单个业务操作进行定义或在表层加上“服务访问点”,IT组织能够:

?使IT资源与其业务功能更密切地结合在一起

?通过以下方法的最佳组合和匹配,建立更加动态、更有效地利用成本的系统

?购买和自建

?自制和外包

?更迅速地发布“组合”应用程序(想想“Web流(Web flows)”和“工作流(work flows)”),提供统一的、面向任务的跨业务视图

?通过更加细致的增量管理需求和变化,在应用程序生命周期上获得更高的灵活性

?用提供“业务透明性”的基础架构替换不透明的、“黑盒子”系统更容易—这种基础架构根据流经应用程序的总体信息,提供实时的业务智能。

对象和组件已经成功地在应用内提供了重用性(应用程序的定义是:以单元形式开发和部署的代码)。但是,SOA依赖的是在应用程序之间实现重用。用SOA把不同的应用程序互连起来,这根本不是什么新东西—想想以前定义分布式的、应用间通信架构的一些努力(不用费力想什么新的首字母缩略词):?同步的(面向RPC):CICS分布式程序链接(DPL)、分布式计算环境(DCE)、分布式组件对象模型(DCOM)、公共对象请求代理体系结构(CORBA)IIOP、Java 远程方法调用(RMI)、关系数据库管理系统(RDBMS)存储过程,等等。

?异步的(面向消息的):CICS临时数据队列(TDQ)、Tuxedo ATM、IBM MQSeries、Tibco Rendezvous、Microsoft消息队列(MSMQ)、Java消息服务(JMS),等等。

是什么使得应用的集成如何困难呢(而且,由此推出,为什么我们作为一个行业,还必须要实现一个统一的SOA)?这是因为,应用程序是由不同的人们,在不同的地点建立的,而且根据不同的计划部署的。任何方法,只要它

依赖于多个应用程序共享一个公共的对象/数据模型(至少在某种程度上如先前所提及的),就都要面对这个事实。

XML和Web服务的角色

抽象和松散耦合,是多个独立应用程序成功共享基础架构的关键。请考虑二个成功典型:SQL和HTML。利用SQL和HTML,应用程序开发人员必须把内部的对象模型按照数据如何存储、如何搜索以及如何在屏幕上显示分别地拆解。如果我们只是考虑单个应用的需求,那么这种选择通常不是优化的选择。但是,如果跨业务应用程序之间的总体需求增加了,那么能够实现更高级别抽象的松散耦合就会证明它的价值。

XML是松散耦合应用程序间数据共享的理想方案,XML具有以下特性:?自解释的

?独立于硬件、编程语言、容器等等

?可以适应独立的变化/版本变化(对于扩展和应用程序变化,不是很脆弱)

?是“最小公分母”(啰嗦点说,是CPU密集的,等等,就像HTML)

XML是针对HTML的,就像Web服务栈是针对HTTP/S的。WS-*(具有最广泛行业支持的Web服务规范集合)定义了在应用程序之间移动XML的“企业服务质量”。尽管由于篇幅有限,无法在这里介绍每一个WS-*技术,但是还是能够介绍:

?以前在分布式计算中所有的服务质量标准,或者已经存在于WS-*栈里,或者已经在近期的发布计划当中(以及标准化当中)。

?WS-*在一个单一的、统一的框架里,为同步操作(通常用于查询)和异步操作(通常用于业务事务处理)提供了通信基础架构。

?WS-*协议族是第一个可扩展以满足企业内部企业应用集成(EAI)需求,甚至企业间B2B集成需求的系统。以前的技术,从未如此接近地实现过“密切合作”(指的是,可以使用企业自己的所有业务系统,合作伙伴的业务系统,甚至合作伙伴的合作伙伴的系统,等等)所要求的大量关键需求。

?WS-*协议族允许IT组织利用可移植的和可互操作的行业标准来降低成本,并避免锁定在某一厂商。

WebLogic Workshop

在2002年WebLogic首次发布时,WebLogic Workshop 成为通过XML和Web服务关注编写SOA的第一个Java IDE。随着BEA WebLogic 8.1在2003年的发布,我们已经把WebLogic Workshop从1.0版的Web服务工具转变成了一个独一无二的包罗万象的开发环境,可以编写、利用以及编排基于SOA 的应用程序。使用Workshop,就可以建立任何一种面向SOA的代码,其中包括纯粹的Web应用程序、J2EE程序、门户、业务流程自动化、XML聚合/转换、消息代理等等。

在发布第一个用于SOA的IDE(在Workshop 8.1之前,集成的技术发展水平就是一堆互不集成的工作大杂烩)的时候,BEA确实引入了多个专有的创新。毕竟,专有和创新有着与生俱来的联系。有着大量先例说明,标准的内容由于采用、认可专有创新,而不是自行创新,从而变得更好:TCP/IP、SQL、Web、Java、以及XML/Web服务,都是沿着这条路发展的。回想 WebLogic的第一版(回到1996年,对于它是否为业界第一台Web应用服务器仍有争议),其中包括了大量用于Web页面呈现、数据库访问、事件处理、服务器端组件等方面的专用创新。WebLogic优于其他专用技术的同行(著名的例外是 IBM 的 WebSphere)之处在于,WebLogic很早就积极地投入了API的标准化工作委员会(servlets/JavaServer Pages [JSP]、Java数据库连接[JDBC]、JMS、企业级JavaBeans[EJB],等等)。

对于我们为SOA在基于 Workshop创新所做的投资,BEA一直在大力保护。我们有多种手段确保对投资的保护:

协议:

?BEA/Microsoft/IBM WS-*协作—WS-*协议族开始主要由这三家厂商制

定(在标准化之前)

?WS-*的标准化—W3C委员会和OASIS(结构化信息标准推进组织)

?WS-*的验证和分析—Web服务互操作性组织(WS-I).

编程模型:

?BEA和IBM进行的Java协作—在2003年发布,这个协作是在

BEA/IBM/Microsoft Web服务协作之上构建的。它的重点在于推进服务器端Java API的标准化,特别是SOA方面。

?Java社区项目(JCP)

?欧洲计算机制造商协会(ECMA)(例如,XScript)

?W3C(例如,XQuery)

?OASIS(例如,业务流程执行语言[BPEL])

?Workshop产品的可移植性—如果Workshop生成了符合J2EE标准的应用程序,那么这个产品可以不加修改地运行在其他任何符合J2EE规范的容器里

?开源软件(OSS)—映射到J2EE的开放源代码运行时基础架构,因此支持到WebLogic之外的容器的移植性。

Workshop投资保护的十大措施

实际上,对于在WebLogic Workshop 8.1 IDE中的每项创新,BEA都会为客户或合作伙伴提供或发布一项长期的投资保护方法。下面,我们一起来看看Workshop的10大创新,以及如何保护在用Workshop开发的应用程序中的投资。

(10)元数据和JSR-175:Workshop大量采用JavaDoc注解来获取应用程序的元数据—元数据是指发给容器的声明指令,指令里封装了那些经常使用但是通常很复杂,开发人员不愿意重复编写代码的那部分活动。像 Workshop 这样的智能工具为编写和更新这类元数据提供了结构化的支持(例如属性表)。通过把这些元数据以内嵌方式包含在应用程序的代码里,开发人员编程时需要的代码更少。(XML部署描述符仍然由相应的工具生成)。至少,部分是因为这个方法的流行,Sun和Java社区的其他成员已经决定直接在Java

语言内部采用大量的元数据(JSR-175,它包含在J2SE 1.5版里)。现有的Workshop产品会用 WebLogic即将发布的版本自动升级为JSR-175语法。

(9)BPEL、BPELJ 和JPD:BPEL规范最初是由BEA、IBM 和 Microsoft制定的—这是一套最好的知识产权组合,包括来自Microsoft的XLANG、IBM的WSFL以及BEA的Process Definition for Java (用于Java的流程定义,JPD)。从那以后,BPEL已经转变交给OASIS进行标准化。

BPEL是基于XML的编程语言,本身也是用XML编写的,所以它是与平台无关的(它可以运行在Java、.NET等平台上)。BPEL既可用来定义(编写)Web 服务,也可以编排(编写使用Web服务的工作流)Web服务。所有在BPEL中的数据操纵工作都是用XML和Web服务完成的。例如,条件用XPath编写。消息的发送和接收用WSDL端口类型,等等。

在另一方面,BPELJ(用于Java的BPEL)定义了如何把BPEL和Java混合起来(混合的方式与JSP把HTML和Java混合的方式不同)。使用BPELJ,条件和数据操纵可以通过Java代码注解的代码段完成。这样就允许传统的企业

计算,例如通过JDBC的数据库访问,能够与基于BPELJ的业务流程无缝地集成在一起。BPELJ允许Java/J2EE组件,例如JavaBeans,可以用与Web服务编排一样的方式进行编排。

BPELJ的技术白皮书由BEA和IBM在2004年3月联合发布,而且已经通过JSR-207变成Java标准化的主题(BEA是这一规范的领导)。BEA目前正设法在WebLogic的下一个主要发行版中实现BPELJ,此外还将提供把在Workshop 8.1中定义的工作流(BPELJ的前身—Java的流程定义)自动移植到BPELJ中。

在WebLogic Integration 8.1里,我们独家整合了卓越的业务流程图形化编辑工具,它具备了“get out of jail free card”的能力,可以使标准的Java/J2EE做更困难的编程工作—做这些工作时,完全不用离开Workshop 的统一开发环境。同时,Workshop在不牺牲投资保护的情况下,使得开发消息驱动的代码变得非常简单。不管是同步还是异步,Web服务还是JavaBeans,HTTP还是JMS,WS-*协议族或替代品(RosettaNet、ebXML、EDI,等等),BPEL/BPELJ和Workshop都会使工作变得容易。

(8)XMLQuery:XMLQuery(或XQuery)正在迅速成为“XML的SQL”—也就是说XQuery的定位是成为操纵、转换、聚合XML数据的首要语言。XQuery

是W3C选定的标准化主题。在转换XML时,XML Query比XSLT更易使用,而且差不多快了6倍。(XSLT的复杂性和缓慢是大多数竞争的集成厂商选择专用解决方案的原因)而且,像Workshop这样的工具还允许以拖-放方式建立转换("XMaps")以及合并XML文档(例如,通过查询现有企业应用程序—企业资

源计划(ERP)、客户关系管理(CRM)、遗留应用程序等来得到整体的客户记录。)。BEA把后者叫做“liquid data”。XQuery在WebLogic 8.1中的实现,大大领先于其他商业产品,并且已经与WebLogic Workshop、WebLogic Integration以及Liquid Data for WebLogic集成。

(7)Java Web服务(JWS)和JSR-181:Workshop 1.0引进了元数据,从而使Web服务的编写几乎和编写普通老式Java对象(POJO)一样容易:毕竟,为什么开发人员仅仅是为了编写一个可靠的和/或对话的简单的Web服务,就必须重复手工编写成百上千行的J2EE逻辑呢?Workshop JWS的基础注解语法正在JSR-181中进行标准化(BEA是这一规范的领导)。下面是一个非常简单的Web服务例子,用POJO加上二个JSR-181注解编写:

@WebService

public class

StockQuoteService {

@WebMethod

public float

getLastTradePrice(

String tickerSymbol){

// ...

}

};

使用进一步的注解、模式和/或WSDL,可以把它自定义为:@WebService(

name="ExampleStockQuoteService",

targetNamespace=

"http://https://www.doczj.com/doc/6d12123419.html,/ ExampleStockQuoteService/

MyExamples")

public class StockQuoteService {

@WebMethod(operationName=

"GetLastTradePrice")

@DocumentWrapper(

requestElement(name =

"TradePricesRequest")

responseElement(name =

"TradePriceResponse"))

public float getLastTradePrice(

String tickerSymbol) {

}

};

当然,Workshop的JWS会继续定义注解以“开启”Web服务架构更加丰富的服务质量特性:

@WebService(targetNamespace =

"http://https://www.doczj.com/doc/6d12123419.html,/

CreditReport")

@Conversation(maxAge="1 hour",

maxIdleTime="30 minutes")

public class CreditReportService {

@WebMethod

@ConversationPhase(START)

@Reliable

public void requestReport(

String ssn) {

}

@WebMethod

@ConversationPhase(CONTINUE)

public ReportResult

getCurrentStatus() {

}

@WebMethod

@ConversationPhase(FINISH)

public void cancelReport() {

}

};

虽然这些更加丰富的注解将不会是JSR-181首个版本的组成部分(部分原因是许多WebLogic之外的容器还不能提供可靠的、会话式的Web服务),

BEA仍然在迁移JWS文件,使其采用基于JSR-175的元数据,同时保证使用一个开放源代码的瘦运行时映射,完全的JWS文件可以部署到任何J2EE容器里。在JSR-181的后续版本里,我们希望加入JWS余下的功能。

(6) EJBGen和EJB“3.0”:EJBGen显著地提高了EJB编程的生产率。EJBGen使用JavaDoc注解,因此能够极其容易地把POJO变成EJB。EJBGen

现在是WebLogic Workshop的一部分,所以它的语法很容易学习。长远来看,我们正在把EJBGen的语法转变为基于JSR-175的元数据(Workshop当然将会提供到新语法的自动移植):

@Session public class

PurchaseOrderService {

public String

submitPurchaseOrder(PO po) {}

}

另外,BEA正在和更大的Java社区协作,希望把这类注解进行标准化,将其加入EJB标准的下一个主要修订。更重要的是,任何现存的EJB项目都可以装入Workshop,用EJBGen编辑,然后EJBGen输出的EJB项目是可以在任何符合J2EE规范的容器中运行的标准EJB项目。

(5)XMLBeans:基于XML的应用集成的一个主要诱人之处就是“松散耦合”—松散耦合的应用程序不受XML/Web服务接口变化的影响,反之亦然。

但是在实践中,现有的XML编程模型相当枯燥、容易出错,远远达不到松散耦合的目标。XMLBeans是一个“XML-模式编译器”(它从XML 模式生成Java 的类封装器),它能解决所有这些问题,还能提供对XML高效、无损失的操纵。长远来看,XMLBeans一直在跟踪正在出现的Java-XML绑定标准。XMLBeans 已经作为一个Apache开放源代码项目可以在WebLogic以外的应用服务器上使用。

(4)XScript:如果使用自身就支持XML的内嵌脚本,许多XML的操作能够更简单地内部执行。Workshop 1.0引入了XScript(有时被描述为“有XML 扩展的JavaScript”),就是为了实现这个目的。BEA在ECMA中建立并领导了ECMAScript for XML(E4X)小组,把这项技术贡献给国际Java/ECMAScript 语言标准。在2004年3月,E4X获得了ECMA TC39(编程语言委员会)的一致通过,这使得ECMAScript成为第一个本身包含对XML支持的主流编程语言。ECMA General Assembly有望在2004年6月最终通过一个国际性的E4X标准。

(3)Page Flow for Java(JPF)和Struts:Apache Struts是基于Java Web 用户界面的模型-视图-控制器框架的事实标准。它的麻烦在于,编写Struts 应用程序是一个代码密集型和过于复杂的工作。Workshop的Page Flow for Java (JPF)以图形化的方式管理数据和业务逻辑流,从而支持用拖放方式进行复杂的Struts应用程序编程。JPF的运行时(run time)是标准的Struts

扩展,BEA已经用可移植工具包的形式将其提供给Tomcat和其他

J2EE/Servlet 1.3容器使用。而且,在一下个主要发行版里,Workshop还将

支持Java Server Faces (JSF,JSR-127),这将使基于Struts的组件和基于JSF的组件能够更容易地混合、匹配。

(2)Portlets、WSRP和内容管理:对于门户的重复开发,没有比用WebLogic Portal 8.1的拖、放和查看功能更容易的了。但是,这种开发上的简易,不应当以被厂商锁定为代价。门户最基本的构件正在进行标准化,包括Java Portlet规范(JSR-168)、用于远程门户的Web服务(WSRP,由OASIS 标准化)以及内容管理解决方案的标准化接口(JSR-170)。Workshop支持在BEA门户里使用外部应用程序,因为Workshop能够自动地把现有Web用户接口用portlet封装起来,也可以自动利用支持WSRP的应用程序。另外,Workshop提供了建立标准Java应用程序以及建立WSRP生成器的能力,因此可以很容易地集成进非BEA的门户里。

(1)控件:控件是用于拖放式编排的服务器端组件模型—图形编程的“Web流”(JPF)和“工作流”/业务流程(JPD和BPELJ)。控件是可重用的组件,利用丰富的IDE集成(自定义向导、属性和图形),可以极大地简化对基于J2EE资源的访问。控件还为智能地处理容器服务(例如自动资源管理、事务、安全性、异步以及组件嵌套)提供了运行时支持。Workshop控件框架是可扩展的—目前有超过100家的独立软件供应商(ISV)正在提供自己的控件,支持使用Workshop工具和统一的界面,对他们的增值服务进行自定义和编排。其中最重要的是,客户或ISV建立了一个控件,这个控件就可以在业务流程内部重用,业务流程从Web应用程序或门户,一直到建立Web服务,甚至是WebLogic应用内的任何方面。

长远来看,BEA正在重新设计控件的运行时(run time),提供可移植性,使控件可以在其他符合J2EE标准的容器里运行。至少会产生一个开放源代码的瘦控件运行时,使Workshop控件可以移植到其他符合J2EE标准的容器里。不过,我们的目标是和Java社区中的其他人合作,使得控件成为一个得到完全认可的Java标准。我们拭目以待。

总结

当然,是创新而不是投资保护为WebLogic Workshop在第一名的位置上创造了这些振奋人心的成就。Workshop是第一个使J2EE编程变得像PowerBuilder或Visual Basic编程一样容易的应用框架,是最简单、最丰富的SOA和Web服务编写与编排的开发环境,是应用集成的第一个集成工具和运行时。在Workshop 8.1之前,寻找发布端到端集成解决方案的开发人员,通常不得不为下面的每项工作去处理不同的工具和运行时:

?业务流程设计/建模

?业务流程执行/管理

?转换

?适配器的选择/自定义

?J2EE/Web服务开发/部署

?消息传递和消息代理

?用户界面(UI)设计

?门户用户界面(UI)聚合

?B2B

?协作

(想想这有多讽刺—在WebLogic Workshop 8.1之前,开发人员要想完成集成工作,通常必须花相当多的时间把他们的集成技术“集成”起来。) 这十大总结,显示了BEA如何通过标准、开放源代码、可移植工具包,以及任何一种能够最佳满足客户投资保护需求的机制,来履行他们对客户提供投资保护的承诺的。一如既往,我们的客户可以使用BEA最先进的创新,同时确信他们的投资会得到长远的保护。BEA认识到,厂商锁定的日子已经结束,至少在Java社区里是这样。客户需要投资保护,而BEA就为客户提供投资保护。

最后,让我给大家留些最后的思考:不要忘记面向服务的架构中的“架构”。实现SOA的真正挑战不是厂商的技术。真正的挑战是定义“正确的”可重用业务服务(通常要通过封装传统应用程序),然后为您的业务最优地编排这些服务:

?业务服务应当是同步的(RPC风格的)还是异步的(消息传递风格的),还是二者都要?

?业务服务应当组织到工作的事务单元里,还是组织成一组消息,并在失败的时候有一套补偿行动?

?怎样才能实现应用模式之间的最大限度重用?(对于表示非常常见数据类型-如客户、订单-的模式,如何才能限制它们的泛滥?因为模式的泛滥会增加互操作性的复杂程度。)

这些有关应用架构方面的思考是独立于底层技术选择的(而且通常比底层技术选择更重要!)。

相关主题
文本预览
相关文档 最新文档