- SCA Spring实现规范[2008-01-03]
SCA Spring的Java客户程序与实现模型指定了Spring框架是如何在SCA中使用的。
- 先有架构 后有SOA[2008-01-03]
如今,越来越多的企业用户已经清晰地认识到,与以往任何一种IT技术相比,SOA(面向服务的架构)是解决业务问题的最佳途径。但怎样才能更有效地在企业范围内实施SOA,快速获得部署企业SOA的巨大优势呢?
- SOA破冰,2008奥运战急需两关键点[2008-01-03]
用户需要不断的增加额外的支出才可以实现。”红帽软件(北京)有限公司(RedHat,下称红帽)在接受《信息周刊》采访时称。为此,红帽把其开源体系结构整合成一套虚拟化操作系统平台,其中有一整套组件和展开基于SOA的解决方案。红帽希望这种符合开源标准的低成本部署模式能够吸引到更多的用户。
- 成功规划SOA:构建您的SOA路线图[2008-01-03]
在开始任何一段伟大的旅程之前都应该制订一个目标,企业决定实现SOA时也不例外。与乘马车出发西行的拓荒者一样,前方等待的是什么以及如何到达目的地都是未知的。
- IBM竞合新主张 建立SOA生态系统[2008-01-02]
IBM正在逐步接近SOA(Service Oriented Architecture)价值链的制高点。 Gartner在上个世纪90年代中期提出SOA这样一个概念,通常它被翻译成“面向服务的架构”,简单地说,SOA使得业务与IT进行很好的结合,使得大多数公司在上个世纪投入的后端现有的IT系统能够发挥新的作用。 市场研究显示,2007年,全球SOA市场份额达40亿美元,IBM、微软、甲骨文、BEA等IT巨头都对SOA寄予很大希望。 2007年Wintergreen Research公司发布了一份调研报告称,IBM以53%的市场占有率居于2006年全球SOA市场榜首,而第二名的微软所占份额只有8%,这一报告发布后立即引起轩然大波,不少相关公司对此表示质疑。 IBM似乎无意介入上述争论,这一年,它正忙着用IT巨头们惯用的构建“生态系统”的方法,联合中国的合作伙伴,共分SOA的一杯羹。 这是一个聪明的方法,单单凭借IBM自身的力量来进行SOA的市场推广,并非易事。而中国本土公司已经在悄然崛起,类似浪潮、用友、软通动力和金蝶这样的厂商早早地注意到SOA未来的市场潜力,并进行大量的人力、物力、财力的投入。 竞争者之间不一定总是要兵刃相见。今天的市场环境,竞争与合作从来都是相伴相生。IBM深知这一点,如果要让SOA在中国深入人心,成功落地,必须构建一个良好的生态环境——良好的生态环境会产生好的解决方案,好的解决方案会满足客户的需求。 IBM将其合作伙伴划分为三个等级,顶级合作伙伴就是包括像上述的浪潮、用友、软通动力以及金蝶这类的公司,另外还包括高级合作伙伴以及初级合作伙伴,总数超过百家。IBM提供的是人才培养、项目支持和建立SOA创新中心等方面的扶持。 除了合作伙伴以外,客户加上大量的SOA人才,就构成了一个有机的生态系统。而最早的牵头者IBM在输出资源的同时,也使得大量有实力的本地企业成为SOA的忠实拥护者,他们会在市场上推广SOA、实施SOA,最终促成的是一个庞大的市场基础的形成。 究其这一行动的理论源头,就是盘活组织内部的资源,使其分配到与公司业务相关的组织中去,甚至是竞争对手手上去。但需要注意的是,牵头者必须在行业中居于领导者的位置,其在软件的可靠性、服务的职业性、跨产品线和界限的深入性上等,都要遥遥领先。 而IBM恰恰具备了这样的实力。在过去的三年当中,这家向服务转型的公司,在SOA的方法论、技术和实施案例上,都有不俗的表现。在全球有超过5700家企业接受了IBM提供的基于SOA的整合,在业务与IT的有机结合上收获颇丰。 事实上,抛开Wintergreen Research的调查报告,说IBM是SOA领域的领先者并没有人会提出什么质疑。 与此同时,SOA的国际标准并没有建立起来,对于IBM来说,越早联合同一领域的合作伙伴,并且联系得越多,在最终的标准制定上就越占据主动权。 不难看出,在知识的广度和深度上,IBM居于业界领先位置,同时它并没有因为助力本地的同类企业而失去市场份额,相反的是,它仍然保持着自己在整个市场的领导者位置,同时联合了大批的企业做大整个市场。 IBM建立起的生态系统,最终牢牢地确立了自己价值链制高点的位置,从利己再到利他,惠及市场上所有的竞合伙伴。
- 开源管理软件是流星还是明日之星[2008-01-02]
2007年9月,IDC-ITPartner.net对微软全球伙伴协会(IAMCP)成员以及大型IT分销商合作伙伴社区做了一次调查,调查结果显示,软件即服务(SaaS)是一个巨大的潜在机遇,并且有可能大大改变商务伙伴关系。 IDC软件业务战略集团副总裁Stephen Graham 表示:“我们预计2008年几个主要软件厂商及其各自的合作伙伴生态系统都会更加以更为积极地参与SaaS。我们的调查结果很清楚地表明,合作伙伴对于摆在面前的潜在的机会非常乐观,并期待与其它公司合作以抓住这一潜在的机会。” IDC的这项调查旨在评估SaaS合作伙伴商业活动、合作伙伴的看法以及SaaS和建立伙伴关系的商业影响……调查的受访者把可以预料到的年财政收入作为将SaaS看作长期战略的一个主要因素。 其中,关键的调查结果有以下几个方面: - 76%的合作伙伴受访者认为张SaaS将极大地影响景观商务合作伙伴关系 - 76%的合作伙伴受访者将SaaS看作一个机遇 - 许多接受调查的公司都已经在进行SaaS相关活动 - 部署服务和与SaaS部署相关的商业服务被认为是与SaaS有关的最有利可图的机会 - 为了要取得成功,企业必须切实针对他们的合作伙伴消息
- 基于ESB的MQ连接方案[2008-01-02]
前言 最近碰到很多这样的案例,即需要实现系统和MQ的互联。以前已经有一些文章论述了如何使用WebLogic Server的JMS Bridge来连接MQ,也有使用WebLogic Server内置的Foreign JMS Server来实现的,但是这需要编写很多代码如MDB来侦听消息,JMS客户端程序来发送消息等。其实BEA的SOA基础架构软件企业服务总线AquaLogic ESB能方便实现这样的功能,且无需编程。利用ESB还有一个好处是可以直接使用XML接口,而前者得直接编程面对消息解析。 文章还对如何实现传递中文XML做了详细的解释,同时也加入了如何利用XQuery技术快速实现数据格式的转换。基于ESB的MQ连接方案概述 BEA ESB 2.6RP1加入了Native MQ Transport的新特性,使得BEA ESB可以直接与IBM MQ进行消息交换。可以通过Business 服务向MQ发送消息,支持单向发送和发送等待返回两种模式;可以通过Proxy服务从MQ取消息,支持单向取消息和取消息消费以后再放入MQ返回队列两种模式。 使用ESB Native MQ Transport有几个好处:可以读取和产生MQ Message,如果直接使用MQ JMS接口无法直接设置某些header属性 支持发送和收取MQ receipt message 内置在ESB,无需额外配置如JMS Bridge或Foreign JMS Server等。 关键特性:支持Inbound和Outbound连接 支持IBM MQ5.3和6.0 可以处理所有MQMD(MQ message descriptor)头信息 支持Biding模式(ESB与MQ装在相同机器上)和TCP模式(ESB可与MQ装在不同机器上) 支持单向和双向SSL(用于TCP模式) Native MQ Transport目前支持消息服务(Message service)和任意XML服务(Any xml serivce),根据不同业务场景可以选择合适的服务模式。任意XML服务支持将XML作为服务的调用和返回接口,对于传递数据非常方便,下面的例子即是讲解如何使用任意XML服务把IBM MQ集成到BEA AquaLogic ESB上。场景描述 代理服务Send2MQ_withResponse发起请求,将xml request消息路由到业务服务Send2MQ_withReponse_Business Business服务Send2MQ_withReponse_Business使用Native MQ Transport将消息路由到MQ接收队列esb.mqReceiveQueue,随后即刻侦听esb.mqSendQueue队列。 代理服务MQMessageResponder,从esb.mqReceiveQueue取消息,进行业务处理和数据格式转换,将结果xml发送到esb.mqSendQueue 业务服务Send2MQ_withReponse_Business侦听的esb.mqSendQueue队列有了先前消息的返回结果,该服务接收到返回消息 代理服务Send2MQ_withResponse得到经过处理的返回结果具体步骤1、设置 MQ Server (1)创建队列管理器QM_YourIP(如QM_jizhou01),创建Listner监听1414端口, 创建服务器连接通道(如BRIDGE.CHANNEL传输协议TCP) (2)创建本地队列esb.mqReceiveQueue, esb.mqSendQueue, 选择“持久”。 (3)编辑JMSAdmin.config,如下:#INITIAL_CONTEXT_FACTORY=com.sun.jndi.ldap.LdapCtxFactory INITIAL_CONTEXT_FACTORY=com.sun.jndi.fscontext.RefFSContextFactory #INITIAL_CONTEXT_FACTORY=com.ibm.ejs.ns.jndi.CNInitialContextFactory #INITIAL_CONTEXT_FACTORY=com.ibm.websphere.naming.WsnInitialContextFactory … #PROVIDER_URL=ldap://polaris/o=ibm,c=us PROVIDER_URL=file:/C:/bea/IBM/JNDI #PROVIDER_URL=iiop://localhost/ … SECURITY_AUTHENTICATION=none … 运行JMSAdmin.bat创建binding的JNDI定义: DEFINE XAQCF(esb.mqQCFXA) DEFINE Q(esb.mqSendQueue) QUEUE(esb.mqSendQueue) QMGR(QM_jizhou01) DEFINE Q(esb.mqReceiveQueue) QUEUE(esb. mqReceiveQueue) QMGR(QM_jizhou01) DIS CTX END …2、设置 BEA AquaLogic ESB: (1) 登录ESB 控制台hhttp://localhost:7021/sbconsole 创建Project和文件夹。 (2) 在resources文件夹下创建 MQ Connection (注意,需要先取得编辑锁,左上角点击Edit) 然后定义MQ Connection:名称为MQResource。 我们看到,这里没有更多的属性设置,所以都是使用MQ默认设置的,如CCSID为1381。 (3) 在Business Services目录下创建Send2MQ_withResponse_Business, 选择Any XML Service, 选择mq作为连接协议。 End Point URL为 mq://esb.mqReceiveQueue?conn=MQTransport/resources/MQResource 注意返回选择Bytes作为消息类型,MQCorrelationID为返回模式,返回等待的结果队列为esb.mqSendQueue。 (4) 在Proxy Services文件夹下创建Proxy Servcie,名称为:Send2MQwithResponseProxy,创建该代理的目的是为封装发送消息的业务服务,这样本来是直接调用MQ协议的服务变为基于http的服务。 为Proxy Service 添加Route节点 编辑该节点,添加Action 路由服务选择刚才创建的Business服务Send2MQ_withResponse_Business 到这里,本来应该可以了;但是我们在测试中可以发现,在传输中文XML时发现到MQ队列里变成了乱码。经过分析,原来MQ服务器端的字符集设置一般为默认设置1381,而使用同样的设置发送中文就出现乱码了。UTF-8在MQ的字符集中的编号为1208,因此我们在把中文XML消息发送到MQ队列之前,要进行CCSID设置。方法就是在路由节点的Request动作里,即发送前设置。 然后选择Outbound Request, 记住调用Business服务是outbound对象。 设置header信息。 我们可以看到BEA ESB在这方面是非常强大的,可以设置每一个header信息而无需编码。 测试: 先确认能否发送XML消息到MQ队列。点击测试Proxy服务的按钮,使用测试消息: <?xml version="1.0" encoding="UTF-8"?> <ns0:Request xmlns:ns0="hhttp://www.example.org/wlsRequestSchema"> <Item> <companyID>001</companyID> <companyName>公司</companyName> <EmployeeCount>10</EmployeeCount> <Total>199</Total> </Item> </ns0:Request> 点击执行,该测试程序会一直等待结果(因为你已经设置等待返回结果了)。我们转到MQ服务器端,看看消息是否已经到达。 可以看到,消息队列esb.mqReceiveQueue已经有了消息,且消息体正确反应出了中文信息。 至此,从ESB发送消息到MQ已经完成。下面,我们要设计如何从MQ队列中取消息,并如何消费消息。 (5) 在Proxy Services文件夹下创建Proxy 服务MQMessageResponder,创建该服务的目的是从MQ队列中取消息,然后进行处理,再把经过处理的消息放回指定队列中。 创建Any XML Service,mq为传输协议。 此时,该服务只是从esb.mqReceiveQueue中取出消息,没有做如何处理又放入了esb.mqSendQueue队列。 我们可以做一个简单的格式转换处理,即将源xml映射到结果xml中,并增添一个字段MQProcessResult,值为“MQ处理完毕” 实际上,这个代理服务是模拟了在MQ服务器端对消息的处理,也可以理解为BEA ESB可以直接消费MQ队列的消息。 用BEA提供的Workshp工具,新建一个XQueryProject 创建两个xml schema。一个是源schema: <?xml version="1.0" encoding="UTF-8"?> <xs:schema targetNamespace="hhttp://www.example.org/wlsRequestSchema" xmlns:xs="hhttp://www.w3.org/2001/XMLSchema"> <xs:element name="Request"> <xs:complexType > <xs:sequence> <xs:element name="Item" minOccurs="0" maxOccurs="unbounded"> <xs:complexType > <xs:sequence> <xs:element name="companyID" type="xs:string" minOccurs="1" maxOccurs="1"/> <xs:element name="companyName" type="xs:string" minOccurs="1" maxOccurs="1"/> <xs:element name="EmployeeCount" type="xs:string" minOccurs="1" maxOccurs="1"/> <xs:element name="Total" type="xs:string" minOccurs="0"/> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:schema> 另外是目标schema: <?xml version="1.0" encoding="UTF-8"?> <xs:schema targetNamespace="hhttp://www.example.org/wlsResponseSchema" xmlns:xs="hhttp://www.w3.org/2001/XMLSchema"> <xs:element name="Response"> <xs:complexType > <xs:sequence> <xs:element name="Item" minOccurs="0" maxOccurs="unbounded"> <xs:complexType > <xs:sequence> <xs:element name="companyID" type="xs:string" minOccurs="1" maxOccurs="1"/> <xs:element name="companyName" type="xs:string" minOccurs="1" maxOccurs="1"/> <xs:element name="EmployeeCount" type="xs:string" minOccurs="1" maxOccurs="1"/> <xs:element name="Total" type="xs:string" minOccurs="0" maxOccurs="1"/> <xs:element name="MQProcessResult" type="xs:string" minOccurs="0"/> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:schema> 再新建一个XQuery转换myXQuery.xq 设置MQProcessResult为字符串常量:“MQ处理完毕”。 myXQuery.xq的源码为:declare namespace xf = "hhttp://tempuri.org/MyXQueryProject/xquery/myXQuery/"; declare namespace ns-1 = "hhttp://www.example.org/wlsRequestSchema"; declare namespace ns-2 = "hhttp://www.example.org/wlsResponseSchema"; declare function xf:myXQuery($request1 as element(ns-1:Request)) as element(ns-2:Response) { <ns-2:Response> { for $Item in $request1/Item return <Item> <companyID>{ data($Item/companyID) }</companyID> <companyName>{ data($Item/companyName) }</companyName> <EmployeeCount>{ data($Item/EmployeeCount) }</EmployeeCount> { for $Total in $Item/Total return <Total>{ data($Total) }</Total> } <MQProcessResult>MQ处理完毕</MQProcessResult> </Item> } </ns-2:Response> }; declare variable $request1 as element(ns-1:Request) external; xf:myXQuery($request1) 在ESB控制台中,引入这两个schema和xquery。如图导入到文件夹 Transformation。 现在我们可以在MQMessageResponder中进行数据格式转换了。 编辑state1,将$body/wls:Request内容赋值到变量request中,然后对request为参数调用myXQuery, 将返回的转换结果赋值到response变量中,再用response的内容代替$body/wls:Request。这样即起到了转换效果。 其中第二个Assign 的XQuery调用的参数设置为。 测试: 直接测试MQMessageResponder,如果能得到正确结果,则再测试Send2MQwithResponseProxy。 总结 到这里,我们已经验证BEA ESB在处理与MQ的交互时是非常方便好用的,无需任何编码,且能方便设置消息的各种属性。BEA ESB的特性其实还远不止如此,一但服务封装完毕,就可以很多其他的传输接口来封装,比如我们可以设置File为传输协议的Proxy服务,然后在其内部配置路由,讲消息转发到往MQ发送消息的Business服务,这样我们就可以很容易地定制出这样的逻辑,即侦听某个文件夹,只要符合格式的xml文件到达,即可自动调用发送逻辑,将消息处理后发送到MQ,同时可以指定返回队列并异步侦听。一但MQ服务器端消息处理完毕,将消息转到指定队列后,该侦听逻辑即可获得处理过的消息。
- 使用 SOA 技术实现既有资产的开发和重组(上)[2007-12-30]
在本文中,作者使用中间会合 (meet-in-the-middle) 开发模式,对既有资产进行抽取、分析、编排和映射,生成满足业务目标的可部署代码和接口定义文件,从而实现了对于既有资产的转换和重组。本文是上半部分,你可以访问下半部分来了解更多内容。
- 使用体系结构和抽象级别来创建更好的 SOA[2007-12-30]
本文是“探索 SOA 体系结构和服务的基本原则”系列的第 1 部分,将深入地研究面向服务的体系结构 (SOA) 的组成要素,分析体系结构的优点,了解抽象级别如何帮助我们改善开发流程。
- SOA 建模,第 1 部分: 服务识别[2007-12-30]
本系列将介绍如何设计同业务需求相连接的 SOA 解决方案。在本文中,首先描述了业务目标以及满足这些目标所要执行的业务过程,然后解释了如何使用该过程来识别完成关键业务相关的服务。
- CAM技术支持SOA实现[2007-12-28]
在具体的SOA实现中,稳定可靠的服务性能是客户程序的首要考虑内容,并且经常是必需的。这样,服务接口内容将直接影响到客户对服务质量,以及支持和使用相应服务所需付出的代价的认识。
- Mashups: 让SOA走出后台办公室[2007-12-27]
你要是想再进一步研究mashup与SOA的关系,以下是一些具体的互动模式,比较通用的有: 服务虚拟化:Mashups 不仅将多个服务的数据连合到一起,还能从未SOA化的资源中创建用户消费服务。
- 文章:深入浅出REST[2007-12-27]
尽管Web无处不在,可许多人还是很难将Web的架构原则应用在自己的系统之中。表述性状态转移(REST),Web背后的架构,正在迅速地成为架构师在开发分布式系统时考虑到的可行方案之一。在这篇发表的InfoQ中文站文章中,Stefan Tilkov深入研究了使用REST设计系统的方法,并考察了传统基于接口(interface-based)的设计方法与其的异同。
- 随需应变 SOA助企业激活传统应用[2007-12-27]
旧资产激活(legacy enablement),即将企业遗留的软件和信息资产应用在新的业务系统中。它也被称之为企业现代化(enterprise modernization)、旧资产转换(legacy transformation)、旧资产现代化(legacy modernization)等等,不一而足,但整体而言,描述的都是同一个意义。其中,旧资产激活这个词最能够生动地表现出准确的内涵。尽管对某些人而言,“旧资产”(legacy)这个词有负面内涵,但实际而言并非如此。
- SOA带你体验简单与快捷[2007-12-27]
在今天,很可能你已经开始着手进行一个或者两个SOA项目了。当然,这并不奇怪,在世界范围内的11000家大型企业中,有95%的企业已经开始投入某种努力去实现SOA了。
- 文章:向服务组件架构出发[2007-12-27]
2007年对于SCA的意义重大,在这一年它正式成为一个开放的标准,而不再是几家厂商合作的产物。在被OASIS标准组织接纳之后,相应的技术委员会及相关的SCA推广普及活动也随之展开。“向服务组件架构出发”正是在这一背景下所写的。
- 国产中间件厂商对SOA实行“追踪”态度[2007-12-27]
与国外厂商的热捧形成的鲜明对比,国内的中间件厂商对SOA并不狂热,这个宣称是未来软件产业的革命对于中国软件企业来说,是否是突围机会?同样是水,国外的企业实际具有的势能高,势能高就形成了瀑布,而目前国内的企业还是河流、小溪。这与国内企业的产品管理的认识和实践有着相当大的关系。
- 组建理想的 SOA 团队[2007-12-27]
软件开发领域的主要发展趋势是从传统软件体系结构过渡到面向服务的体系结构 (SOA)。在传统软件体系结构中,将项目视为单个新应用程序的交付。在 SOA 中,将项目视为集成服务的交付——一些是新建的,一些是现有的。无论其规模和预算如何,几乎所有信息技术(Information Technology,IT)部门当前都在进行过渡到 SOA 的工作。您可能已经读过多篇关于 SOA 采用、成熟度模型和实现的文章了。本文将描述在组织采用 SOA 或过渡到更高的 SOA 成熟度水平的过程中,您的 IT 团队成员中所需的一组新角色及其各自的职责。
- 从项目管理看SOA SOA并非新观念[2007-12-27]
胡百师认为,SOA所处理的技术都没有新的知识。从技术方面来看,SOA并没有引入新的技术理念; 软件工程角度来看,SOA是一个软件应用的过程; 从管理的角度来看,SOA只是用另外一种方式来诠释企业应用。企业使用SOA的目的大多一样(比如降低成本,加速服务开发等),但是应对的环境却千变万化。
- 探索SOA中服务的开发、接口和操作语义[2007-12-27]
面向服务的体系结构(Service-Oriented Architecture,SOA)正快速成为很多企业中的主要体系结构样式。构建 SOA 解决方案的主要目的是通过松散耦合其系统来对企业进行武装,从而能更好地响应业务需求。在 SOA 解决方案内设计 Web 服务的主要目标之一是支持快速构造业务流程。您还希望加速企业内以及与外部业务合作伙伴的应用程序集成。