??xml version="1.0" encoding="utf-8" standalone="yes"?>狠狠色香婷婷久久亚洲精品,在线观看亚洲精品国产,亚洲码和欧洲码一码二码三码http://www.tkk7.com/SteelHand/category/1174.html<strong>上善若水</strong>zh-cnSat, 01 Sep 2007 04:40:05 GMTSat, 01 Sep 2007 04:40:05 GMT60企业服务ȝ(ESB)(7)http://www.tkk7.com/SteelHand/archive/2007/08/31/141660.html铁手铁手Fri, 31 Aug 2007 03:11:00 GMThttp://www.tkk7.com/SteelHand/archive/2007/08/31/141660.htmlhttp://www.tkk7.com/SteelHand/comments/141660.htmlhttp://www.tkk7.com/SteelHand/archive/2007/08/31/141660.html#Feedback0http://www.tkk7.com/SteelHand/comments/commentRss/141660.htmlhttp://www.tkk7.com/SteelHand/services/trackbacks/141660.html2.4重构到ESB

从偶然架构到一个全球规模的l一的集成基设施可能是像一个人畏~的d?把一切都准备qAQ然后再象扳动一下开关那样将所有的应用都一下子转移到新的基设施之上是不现实的。这已经是组lؓ什么老是要不断添加偶然架构方案作为权益解决之计的一个主要的理由Q甚至他们确实知道这样相关的问题永垂不朽也是如此?

ESB 提供了能力来帮助减轻所介绍的痛苦?W?9 章将通过一个案例来介绍如何q离一个完全徏立在 FTP 和每夜批处理作业之上的早以存在的集成解决Ҏ?

让我们现在重新回到对偶然架构的讨论?在图 2-6中,实线、虚Uѝ点划线代表用于集成的不同类型的q接技术和通信协议。注意其中有一个用集成Broker表达的已存在?“集成孤岛”Q以及POS应用和胦务应用之间的q接是用FTP 文g传输。在POS应用和ERP应用之间先前已经升来用HTTP 之上的SOAP协议Q正如销售自动化应用 (SFA) 和客户关pȝ?(CRM) 之间的联l?

图表 2? 使用SOAP通信?FTP 、手工插座(SocketQ、而且包括一个集成Broker的代表性的偶然架构

2.4.1 从单个项目层面引?/a> ESB

ESB 可以在一个部门的层ơ或在一个项目的基础上被引入?在项目层ơ采?ESB 允许你能够习惯于使用 ESB 服务容器q行Z标准的集成,q且完全可以坚信该项目能够集成到一个更大的集成|络之中Qƈ且与企业U的公司的集成策略目标相一致?

我们采用ESB的例子中的第一个步骤是要集成前端应用(FrontOfficeQ。在?2-7 中,前端的CRM、胦务和SFA 通过“服务容器”q接到ESB 之中。这些容器是 ESB 架构的主要组Ӟ我们在W?6 章详l解释?l过 ESB 服务容器q行的集成的Ҏ可能会不同?容器和应用之间的接口可以通过使用W三方的应用适配器来完成Q容器可以暴露用WSDL描述的XML数据Q或者它可能被实Cؓ完全用户定制的代码?

figs/esb_0207.gif

图表 2? ESB 可以在不打破原有点对点\径的前提下,在单个项目基上采?

但是也许更有的不是那些已经集成到ESB 之内的东西,而是q没有集成进ȝ东西。图 2-7 表示了已有的 FTP 和SOAP协议之间的通信U,原来是连接到前端应用的,现在直接q接到那些特别配制来使用那些协议q行通信的ESBlg。应用仍然处于ȝ“之外”QPos应用和伙伴CRM应用可以与集成到ESBȝ“之内”的前端应用进行通信而不需要做M修改Q对他们如何参与ESB基础设施也不需要知道Q何东ѝ注意,现在POS应用是连接到ESB 上的一?FTP 桥接器,而且伙伴CRM应用则是q接到配|ؓȝ的一部分的Web Services端点?

ESB 已经被引入了Q但是对q些配备了ESB能力的应用以前所q接的点对点通信l合区没有生Q何媄响。被插入ȝ的应用如今{而用连接到ESB 集成容器的一个单一接口Q?而且已经省却了对它们先前所有其他类型的通信q接的管理和l护?

我们会在第 9 章中看到Q即使是ȝ域中最新集成的应用也可以就地将他们转移到完全的ESB方式Qƈ且与它们各自的项目开发时间线怸致?

2.4.2 跨广泛分布的企业传播ESB

在我们的ESB采用的例子得下一阶段中,POS应用在每一个远端实现ESB能力Qƈ且去除对不可靠的 FTP 联结上的依赖?q可能会单如在每一个远端安装一个ESB容器Qƈ且插入到总部的ESB之中Q或者涉及到在每一个远端的多个应用之间的一?#8220;q你”的集成环境。那么二?ESB节点可以通过一个基于可靠消息的安全q接q行通信(?2-8)

figs/esb_0208.gif

图表 2?  在各个地点分立安装的ESB可以安全和可靠地q接在一?

此外Q远端位|仍然可以在他们自己的分集成环境里面运行,q且可以按照需要有选择地共享数据。例如,q端位置可以独立地拥有ƈ且运作一个属于集体特许经营的零售店铺。它们没有必d享关于它们的日常q作的信息,但是的确需要共享诸如h格更新和库存信息之类的数据。远EESB 节点可以q接C于总部?ESB |络Q有选择地暴露消息通道以共享h格变动之cȝ数据?

2.4.3 保留和分?/a>: q入现有?EAI Brokerq接

我们的ESB 采用CZ目的第三阶D|及到桥接q进一个已l部分地与一个集U器-?插头 EAI Broker集成在一L部门。我们先前提醒过Q采?ESB 不是一个全有或全无的概c如?2-9 所C, ESB 允许IT部门通过一个已存在?EAI Broker桥接到ESB之内来保护它里面的IT资?

figs/esb_0209.gif

图表 2? “保留-?分层”方式允许ESB桥接到EAI Broker安装之内

桥接 EAI Broker可以一多种方式q行。比如,它可以通过使用一个Web Services接口来完成,或者绑定到下层的消息通道。依赖于ESB?EAI Broker 的实玎ͼESB 更加可以建立在EAI Broker下面的消息队列基设施之上Q因此部分地替换EAI Broker的功能仍然可以保留较低层的、消息通道?

2.4.4 集成伙伴

我们?ESB 采用CZ目的最后步骤是解决和业务伙伴集成的问题。如?2-10 所C,q可能包括原样保留SOAP联结Q以及在每个伙伴端安装一?ESB 节点。决定采用哪一U方法完全依赖于你的l织和伙伴之间的关系Q以及业务伙伴是否允怽在其地点安装软gQ或者他们已l有能够q接C的ESB之上的ESB?

figs/esb_0210.gif

图表 2?0 ESB 可以个别地管理与业务伙伴的SOAP联结, 或者可以连接到另一个地点的ESB节点

插入C?ESB 扩展的分层的服务能够理对伙伴的q接的后勤保障。例如,一个特D的伙伴l理者服务可以在每一个伙伴的基础上管理与伙伴之间的正在进行的协作的细节。这些细节可能包括正在用哪一个更高层ơ的业务协议(比如Q?ebXML、RosettaNet {?、以及对话的状态,比如消息交换的当前状态、是否收C个期望的应答消息、以及从业务伙伴接收C个业务响应所能够接受多长的时延?

2.5结

本章包含下列主题Q?

  •  Ҏq泛的、更通用的集成基设施的需要的各种驱动因素
  •  偶然架构是今天所使用的主要集成设计?在这U系l中Q当前的企业完全没有很好地联通的?
  •  只有 10% 的应用被联接?
  •  而这些之中,只有 15%的用了某种cd中间件?
  •  到目前ؓ止,分布式计技术加重了Q而不是解决了Q偶然架构的问题?
  •  集线?? 插头EAI Broker已经有了一定程度的成功。然而,它们:
  •  大部分是专有技?
  •  没有为组l提供一个标准化的、可以在企业内通用使用的集成^台?
  •  ESB 借鉴了在 EAI Broker技术方面学习的l验的h倹{?
  •  集成作ؓ是一个部门层面和公司文化的问题,和它作ؓ一个技术上问题同样重要?
  •  ESB 允许逐渐增加的采用,以符合各个部门单独的开发时间表?/li>


铁手 2007-08-31 11:11 发表评论
]]>
企业服务ȝ(ESB)(6)http://www.tkk7.com/SteelHand/archive/2007/08/17/137500.html铁手铁手Fri, 17 Aug 2007 04:19:00 GMThttp://www.tkk7.com/SteelHand/archive/2007/08/17/137500.htmlhttp://www.tkk7.com/SteelHand/comments/137500.htmlhttp://www.tkk7.com/SteelHand/archive/2007/08/17/137500.html#Feedback0http://www.tkk7.com/SteelHand/comments/commentRss/137500.htmlhttp://www.tkk7.com/SteelHand/services/trackbacks/137500.html

2.3借鉴来自 EAI ?SOA 的最佛_?/h4>

在我们l前qƈ且牺牲我们的先前努力Q丢掉前面的每个技术,q且向失败Dh们的双手之前Q还有一条\能够让我们能够利用从学来的宝늻验,q且仍然q离偶然架构—那是采用ESB?集成的最佛_践,已经l过寚w成Broker的经验被_Q如今还可以l合建立于XML、Web Services、可靠的异步消息、以及分布式的ESB集成lg之上的基于标准的架构来一起用?他们一起Ş成一个高度分布的、松散耦合的集成架构,以提供集成Broker的所有主要功能,却没有其所有的障壁?

q离偶然架构q且使用 ESB重构到的一个统一的和一致的集成骨干Q涉及到下面结描述的步骤?

2.3.1 采用XML

虽然ESB 实能够传送许多类型的数据格式Q但是采用XML作ؓ应用间交换数据的手段 (?2-2)Q如同已l被用在一些传l的 EAI 方式中一P可以由很多好处。我们将会在W?4 章中看到Q用XML可以一x逸地隔绝全局的数据格式和接口的变更和偶然架构本n。ESB可以q一步通过查XML消息的内容,q且控制其向何处提交Q有时候还可以改变提交路径来包括可能会修改和增加数据的附加服务Q一ơ来促进业务处理?

figs/esb_0202.gif

图表 2? ESB 使用XML来作为应用间׃n数据的方?

2.3.2 采用Web ervicesq实?SOA

?SOA 的方式来思考和规划在向 ESB重构的一个基本步骤。如?2-3 所C,服务U接口的引入在提供了一个公共抽象层来创建接口和实现之间的分R这样就通过使用一U通用的接口定义机Ӟ比如Web Services描述语言(WSDL)Q来减轻了由l粒度服务接口组成的复合业务程定义的构造的隑ֺ?

figs/esb_0203.gif

图表 2? Web 服务?SOA 提供了一个隔L口和实现的通用抽象?

虽然服务U接口的抽象是正方向上的一步,l果仍然是一个\由逻辑密合于应用之内的连?( 注意在图 2-3 中,“流E逻辑”仍焉附于应用)。Web Services中的传统智慧已经模仿了客?服务器模式。甚臛_一个Web Services分布式网l中Q一个应用L另一?“客户”。范例用法仍焉要抽象层也包括胶水代码,比如说“调用服务X上的ҎaQ然后调用服务Y上的Ҏ b()?”诸如此cR?

Web Services实现中所实的东西是流E\由逻辑从接口定义和应用逻辑中分d来观c如?2-4所C,ESB 提供了那种隔离Qƈ且仍然完全利用SOA?

figs/esb_0204.gif

图表 2? ESB 业务流E的路由逻辑从接口定义和应用实现中分d?

通过分离接口定义和流E\由逻辑Q我们已l开始看到ESB 形式的ȝ??2-5)。通过流E业务\由逻辑和接口定义放入ȝ层之内,应用能够l箋自己集中于实现逻辑?我们在第 1 章中看到q,ESB 被实际上区分为多个功能层。它为应用间的可靠的、异步的、基于消息的通信提供了一U坚固的底板。也是在q里Q流E\由通过Z查消息中的XML内容来附加的条g决策点,从而变得具h能。这个智能\由是被可理地定义的、可以被修改、ƈ且可以加上增值服务,比如补充数据变换功能。ESB 提供了一个可扩展的集成服务网l,q且可以无限伸展Q同时仍然可以以逐渐增加的方式进行构?

figs/esb_0205.gif

图表 2? ESB 可靠地连接和协调SOA 的服务之间的交互



铁手 2007-08-17 12:19 发表评论
]]>
企业服务ȝ(ESB)(5)http://www.tkk7.com/SteelHand/archive/2007/08/15/136850.html铁手铁手Wed, 15 Aug 2007 03:11:00 GMThttp://www.tkk7.com/SteelHand/archive/2007/08/15/136850.htmlhttp://www.tkk7.com/SteelHand/comments/136850.htmlhttp://www.tkk7.com/SteelHand/archive/2007/08/15/136850.html#Feedback0http://www.tkk7.com/SteelHand/comments/commentRss/136850.htmlhttp://www.tkk7.com/SteelHand/services/trackbacks/136850.html2.2企业集成的目前状?/a>

q一节将详细讨论Q今天各个企业应用怎样q行集成、或者怎样没有集成。还包括对今天很多组l中很流行的集成方式Q偶然架构的讨论?

2.2.1 企业大都q接不善

在过M十年以来Q无数分布式计算模型一一dQ包?DCE、CORBA、DCOM、MOM?EAI Broker、J2EE、Web Services?NET?然而,q象表明Q不采用何U技术,只有很少C业的应用时很好连通的。按照来?Gartner 公司的一个研I报?a href="#_ftn1">[1]Q这个数字少?0%?

关于应用的连通性,其他的统计数l果更o人吃惊,?只有 15% 的应用的集成采用了正式的集成中间件。其余则使用 ETL 和批量文件传输技术,其主要以手工~写的脚本和其他定制Ҏ为基。关?ETL 和批量文件传输的更多信息Q以及他们相关的问题Q我们在W?章讨论?

2.2.2 偶然架构

Gartner 15% l计值提供一个关于当今的集成状态的一个o人深思的数据。那么其?5% 的应用是如何q接的呢? 一U在今天的企业中普遍存在的情形,我将其称为是“偶然架构”。所谓偶然架构就是没有h公开宣布创造的Q相反,是多q积累的一U?#8220;׃Z”的解x案。在一个偶然架构中Q公司的应用被永q锁定在一个不灉|的刚性基架构之上。然后他们又被视为是信息“地牢”Q因为集成基设施不能适应新的业务需求?(?2-1)

大多数集成尝试都从某个深思熟虑的设计开始,但是l过一D|间后Q其他的部分好像都各各位地“集成”了,但是手工~写的代码却早已飘移出原来的内容之外。经q逐渐q行的螺栓和补丁Q所谓整合的pȝ已经失去了其原来的设计完整性,其是如果系l是被很多的人来l护的,而他们对最初的设计意图可能没有很好地沟通。事实上Q这U?#8220;׃Z”的方法将完全失去集成的一致性,因ؓ工程师d?#8220;只是做一点点修改”作ؓ解决问题的权益之计。最后甚臛_扑և那些地方做了修改都变得非常困难,更不要说要理解这些结果导致了那些斚w的副作用影响。在一个部|系l中Q这可能会对你的业务造成损失惨重的悲惨结果?

寚w成遵守标准能够ؓ你创Z个针Ҏ期望功能的基U来遵从。如果基设施是专有的Q?不基于标准的Q那么随旉变化保持计划的设计和指导原则变成棘手问题。虽然也可以构造专有的q_q且变通规则,但是q通常又导致更?#8220;多样?#8221;的后果,l果更加锁定于其上。然而,你应该记住的是简单地遵守标准q不必然地阻止你构徏一个偶然架构?

figs/esb_0201.gif

图表 2? 偶然架构永q公司的应用成?#8220;信息发射?#8221;

在偶然架构背后的技术是各不相同的。图 2-1中的实线、虚U和点划U表CZq接应用的不同技术。这些技术可能包?FTP 文g传输、直接的socketq接 、专有的MOM、以及有时是 CORBA 或其他类型的q程q程调用(RPC) 机制。某些定向的点对点解x案可能已l用了XML信封定义Q或者基于SOAP或者其他什么机制的技术,来ؓ集成的应用之间承载数据?

图中间的集成Broker表示了在部门U的层次q接应用的一个岛ѝ然而这q不意味着它能够连接Q何事物。集成Broker通常只是l交l基设施中的某一块,因此资金丰富的项目可能会取得适度的成功,但是它们再也不能与其它所承诺的部分进行很好的集成?

偶见架构表现为得C个刚性的Q不能对集成提供一致的、持久的基础设施。它不能如其应该辑ֈ的效果那样很好地解决你的l织性的问题。要改变偶然架构一直以来就是个挑战Q因为点对点的解x案的数量不断在增ѝ这通常也意谓着应用之间的互怾赖性是紧密耦合的。应用中的数据的表现的修改意谓着你还必须修改׃n该数据的其他所有应用。这限制你快速地改变你的业务程Q以适应变化了的或者新的业务机会。这些紧密耦合的、硬q接的接口不仅仅是偶然架构的问题。因为控制流、业务应用之间的通信的编排被编码进应用本n之中Q这q一步导致了复杂化。这些都增加了系l之间的紧密耦合和脆弱性,使变更业务流E更加困难,q且D了厂商所定?

2.2.2.1 部门和组l问?/a>

偶然架构的先天技术不队l织中的人力协调问题h推L助澜的作用。不问题是紧密耦合的接口还是硬~码的流E编排,要想回头或者对其进行较大的L攚w简直是一件恐怖的事情。这l常需要安排大量的会议Q和属于不同目的不同的开发组的h们开会,q紧对要做什么以及何时做q类的问题达成一致。如果应用,以及他们分属的开发项目组Q分别处于不同的地理位置和时间区Q应用改变所需的协调问题则会变得更加困难?

有时某些应用E序被视?#8220;遗留”pȝQ对他们你是不愿意或不能够对其进行多修改,因ؓ它们已经q入l护模式。我们通常_“遗留pȝ”的一个定义就是那些你昨天刚安装的pȝ。即使你对自己开发的应用h完全的访问和源代码的控制权,当开发h员l进行其他项目或d公司的时候,对其q行修改也是非常困难的。我们将会在W?4 章中看到Q?ESB 大大地减了随时间变化,修改数据模式和格式所带来的媄响?

2.2.2.2 逃离偶然架构

即你已l对跟踪和修改应用数据及其接口徏立了良好的公司实践,偶然架构仍然q有其他~点。用不同的q接技术意谓着安全模型可能是؜杂的Q所以没有确定的方式来徏立和执行公司U的安全{略?Ҏ入新的应用没有一致的 API可以依赖Q而且没有基础来在上构徏公司关于集成的最佛_c最q与一些领导的专家q行了交,ȝ了偶然架构的下列各项问题:

  • 不可靠?/strong>

应用之间的通信或许能得益于异步的消息的可靠性。如果一个大型业务流E中的某两个应用之间的通信q接p|Q整个业务流E可能会事务性地q回或者重启。我们将会在W?章学到更多有x散耦合的、异步的可靠消息的更多内宏V?

  • 性能和可伸羃性分?/strong>

不管你是否你已经有了一个预先的性能规划q且试图分析一个现有的性能问题Q由于偶然架构的许许多多的子pȝ和他们各自的q行特征Q这个工作是极其困难的。通常的做法是采用h的?#8220;投入资源到其中,直到它能正确q行”式的解决ҎQ这造成盘、处理器、内存等上面的过度开支?

  • M排错

没有哪个单一Ҏ能够提供充分的诊断和报告能力?意外架构需要很多具有很高能力的l护人员围着所有有~陷得生产系l{Q这导致整体拥有成?(TCO)的急剧上升。各部分实现的方式差异越大,在其失效旉要用来解军_们的问题的专家经验就宽。另外,建立一个基U来描述期望的正行Z是一个挑战?

  • 冗余和弹?/strong>

没有M方式能够保证q个泥潭中的所有组建都能够满你的关于可接受的冗余、弹性和定w度的定义。这意谓着要ؓ依赖于后D늳l的新功能定义可辑ֈ的服务别协?(SLAs) 是很困难的?

  • 帐单漏洞

如果你的pȝ携带又能够收费的帐单数据 ( 比如电信)Q那么̎单数据的利息可以被丢失在偶然架构之中。因此,你可能会损失收入q且q一炚w不知道?

  • 监控和管?/strong>

没有一致的Ҏ来监控和理一个偶然架构。假定你的整合应用系l必运?24/7 Q而且你的职员负责xq行监控工具Qƈ且做出纠正。这些工具将不会以相同的方式工作Q那么在无数不同的小Ҏ的基上进行培?( 和再培训) 是非常昂贵的事情。简单地安装企业U的q行理工具q不能自动地自省能力提供给集成基础设施Qƈ且偶然架构通常q不能提供所有可能需要的控制炏V?

总而言之,偶然架构表现ZU刚性的、高成本的基设施Qƈ且不能满你的组l变更的需要,q要承受以下~点的痛苦:

  •  紧密耦合的、易的、对变更不灵zȝ
  •  因ؓ多个点对点解x案导致的昂贵的维护负?
  •  修改一个应用程序可能媄响其他很多应?
  •  路由逻辑是硬~码到应用程序之中的
  •  没有通用的安全模型;安全是؜杂的
  •  没有通用?API(通常)
  •  没有通用的通信协议
  •  没有建立和构建最佛_늚通用基础
  •  难以支持异步处理
  •  不可?
  •  没有对应用和集成lg的健L控和部v理

如你所知,偶然架构的创建已l有些年头了Q要替换和解军_q不是一y而就的事情。随着l承目的需求的增加Q解x案应该更加柔性的、简单、以及运行便宜,而不是其他什么东ѝ偶然架构给了你的那些敏L竞争者得到好处,而你却不能够在一个合理的旉范围内实现新的业务机会?

你需要一个内聚的架构Q面向实c标准来解决着大量的问题。ESB 提供了架构和基础设施Qƈ且你能够逐个目的基上采用它。采?ESB q不是全有或全无Q推倒重来式的方式。而是Q你可以渐进式地采用它,同时q能利用你的现有资-包括偶然架构和集成BrokerQ以一U?#8220;留下而分?#8221;的方式?

2.2.3 ETLQ批量传输,?FTP

提取、{换、和载入 (ETL) 技术,比如 FTP 文g传输和每夜批处理式的集成在今天仍然是最行的方法?

q通常涉及到将位于各个应用中的数据打包然后上传q样的操作。问题是有很大的可能在应用间的数据失d步。一个失败的打包上传的处理程序可能要׃一天的旉。在京及和业务全球化的情况下Q系l以24/7 的方式运行,再也没有?#8220;夜晚”的概念,那你得批处理又该在何时执行呢Q?

其他问题也可能与每夜的批处理相关。因为批处理的反应期问题Q在分析关键业务数据的时候,最好的情Ş?4 时轮{旉。这一延迟可能严重地阻你寚w时变化的业务事gq行反应的能力?

有时Q一ơ跨多个面向批处理pȝ的端对端处理处理甚至会花费一整个星期才能完成。处理从源头到目标的数据的M潜伏反应期完全阻止了攉h意义的,反应目前业务情Ş的数据的z察力。比如,在供应链的场景中Q这导致你永远不知道你的库存的真实状态?

W?9 章将会呈C个通过FTPq行成批传输的技术和业务意义的案例研IӞq且会研IESB如何能帮助你逃脱偶然架构的困境?

2.2.4 集成Broker

集线??插头的集成BrokerQ或者EAI BrokerQ提供了偶然架构的替代。集成Broker是从上世U?0q代出现在,现在已经被植入到MOMd或应用服务器q_之中?

集成Broker市场的一些公司包?

  • SeeBeyond
  • IBM
  • webMethods
  • TIBCO
  • Ascential (Mercator)
  • BEA (more recently)
  • Vitria

集成Broker能够使用一个集U器-?插头架构帮助偶然架构提供应用之间的集中\由。此外,他们q允怋用业务程序管?(BPM) 软g业务流E从下层的集成代码中分离出来。到此ؓ止,所有的都是好消息?

然而,寚w成Broker方式也有~点。一个集U器-? 插头拓扑不允许对局部集成域之上q行局部控制。构建在一个集U器-?插头拓扑之上的BPM 不能够徏立跨部门和业务单位的业务流E极其编排?集成Broker也可能受限于下面的MOM不能过物理的LAN|段和防火墙的能力限制?

有许多公司已l在光成策略中采用了集U器-?插头的集成Broker解决Ҏ?q些技术具有较高的成本Qƈ且成功也值得怀疑?990 q代后期的昂贵集成Broker目已经取得了名义上的成功,但是组l置于专有的集成域的井中。一Forrester?001 q十二月发布的研I报?a href="#_ftn2">[2] 展示了下列各统?

  •  集成目q_ 20+ 个月才完?
  •  于 35% 的项目能够准时和在预内完成
  •  35% 的Y件维护预被p在维护点对点应用q接之上
  •  ?2003 q_ 全球 3500 家企业^均期望花费六癑֛十万元到集成项目上

q项研究q是在EAI 在它的最峰的时候进行的Q而且几乎没有q象表明q一数字在那时候v之后得到了改善。注意一q六癑֛十万元是公怼在集成项目上p的^均数的一个预。当于这些公司的领导们交这些问题的时候,我进行了一个一般性的求证?

照今天的预算标准来看QEAI Broker目是很昂贵的。集成Y件费用很늚Q通常单独对于软g许可费用Q每个项目的h范围在?$250,000 C百万元不等。这q不一L咨询服务lgQ而这个组件的h往往是Y件许可费用的5?2倍?

集成Broker高昂的启动成本又被另一事实所q一步恶化,即从一个项目中学到的知识不能很好地转移C一个项目。由于传l的 EAI Broker技术的专有Ҏ,通常h很陡峭的学习曲线Q对于每个项目来_有时候实6个月。要试图弥补q个负担的通常方式是聘请事前对专有技术经q培训的特别的顾问。当Ӟ高特D?高h根{这是高昂咨询费用的一个重要组成部? 另一个大的组成是技术安装、配|、部|Ӏ和理的复杂?。ƈ且一旦项目完成,N׃见了?

集成目的实现时间普遍是?6-18 月之间。这意谓着。根据事前针对短期设定的标准、以及项目资金,实施旉吃掉了项目原本想要利用的{略性窗囗?

集成Broker的专有性质Q以及高昂的咨询费用通常D供应商锁定和重启后箋目的巨大成本。这意谓即便对于成功的项目,增长和展也是o人恐惧的。而且在你对你的供应商或者实现心生不满的时候,你也得面对到底是q前的情况l箋C去,q是选择完全重新开始,雇用更多的咨询顾问或者投入另一个新的学习曲U之间左右ؓ难。因为所有这些,一些ITl织通常留下了一些难以再集成到其他项目的“集成孤岛”。总而言之,集成Broker已经证明是偶然架构里面的老套技术,而ƈ非它的解x案?

当我们更详细地讨论集成Broker的时候,我们看到导致这里所列的问题的技术屏障。另外,许许多多的非技术因素也D了对采用ESB的需求的增长?


[1] [2]来自 Gartner 公司的统?"集成BrokerQ应用服务器?APSs,"10/2002.

[2] [3]来自 Forrester 研究的统计学,"减少集成费用,"12/2001.



铁手 2007-08-15 11:11 发表评论
]]>
企业服务ȝ(ESB)(4)http://www.tkk7.com/SteelHand/archive/2007/08/13/136301.html铁手铁手Mon, 13 Aug 2007 02:13:00 GMThttp://www.tkk7.com/SteelHand/archive/2007/08/13/136301.htmlhttp://www.tkk7.com/SteelHand/comments/136301.htmlhttp://www.tkk7.com/SteelHand/archive/2007/08/13/136301.html#Feedback0http://www.tkk7.com/SteelHand/comments/commentRss/136301.htmlhttp://www.tkk7.com/SteelHand/services/trackbacks/136301.html2集成的状?/a>

各种因素Q包括技术和业务层面的,DҎ的集成方式的需要。有许多新的业务驱动因素Q比如经条件的改变、新的革命性的g技术比如射频识别标{?(RFID)的出现、法规管制的遵从Q都预示着从业务视图来看,应用集成和数据共享都要发生重大变革。这些驱动好像与企业中目前的集成状态不一致子Qƈ不象你所想的那样前。当我们在这一章中详细研究的时候,大多数应该只是简单集成的目不能很好集成Q主要是׃~Z能够q泛采用的一致的l承{略所致?

下面是媄像着Ҏ大规模的集成解决Ҏ的需要的各种需要:

  • l济的驱动器?/li>

q些已经改变了ITp的Ş式。经因素导致IT部门主要集中于事情能够与他们当前已l有的应用一起工作?

  • 最高优先序: 集成?/li>

调查l果表明集成l箋处于CIO的优先序列的最层?

  • 法规的遵?/li>

Sarbanes-Oxley法案、PATRIOT法案、以?FCC 法规都强q公司徏立一个必ȝ内部基础设施来比以前一h加详l地跟踪、\由、监控、和获取业务数据?

  • 直通处?(STP)

STP 的目标是消除业务程的无效率Q比如数据的人工再输入、传真、纸面邮件、或者不必要的数据批量处理。在行业中,比如金融服务Q这可以帮助辑ֈ几乎零反应期的交易处理?

  • 频识别标签(RFID)

被视Z一代条形码的革斎ͼ RFID 可能会生大量的新型数据Q然后这些数据需要被路由、变换、聚集,和处理?

不幸的是Q公司的集成环境的目前状态在q些领域几乎没有取得什么进展。这又得业界领袖不得不重新L更广泛的集成解决Ҏ。而有关集成的目前状态的问题包括:

  • 良好q接企业的普遍缺乏?/li>

q阻了企业向自动化业务程q步Q然后由ȝ了其对不断变化的业务需求的快速反应?

  • 偶然架构

偶然架构是一U一直用的事实上的集成方式Q其l果是没有连贯一致的公司U的集成{略。这表现是要留下点对点的集成、每一个都有其自己的连接和集成风格。偶然架构表Cؓ不连贯的脆弱和刚性架构、ƈ且不能经受集成环境的新的附加条g和变化?

  • ETLQ批量传输和FTP?/li>

使用FTP文g传输和每夜批处理的方式进行提取、变换和载入 (ETL) 的技术仍然是今天“集成”最行的方法?q些处理涉及到每夜对各种应用之上的数据进行打包上载的操作。由于这U做法的潜伏反应期和错误率,l织从来不会不真正拥有对它们的关键数据的好的快照?

  • q去使用集成Broker的危险?/li>

上世U?0 q代后期Q昂늚集成Broker目看似成功Q但是给l织留下了大量专有的集成领域难以消化?

q章会详细讨论q些因素。除此之外,它将会解释通过逐渐采用重构到ESB的好处,同时使用学习自集成Broker技术的最佛_c?

2.1业务驱动Ȁ发集?/a>

2.1.1 IT开支的势

l济因素DIT部门主要集中于事情能够与他们当前已l有的应用一起工作。在Y2K之前Q大多数公司都把它们的主要花贚w中在准备应付 Y2K之上Q包括购买打包的没有Y2K问题的应用?

后来的经低qh期,不管是否归结于后Y2K时代、Internet泡沫破灭时代?/11、或者战争的不确定性,都已l导致了ITp的急剧变化。这已经有对集成造成了特D的冲击Q不是正面的还是负面的。IT预算和前 Y2K时代相比已经今非昔比。再也不会出现ITl理手中握着寚w成Broker软g和服务的数百万美元预,q且q要p18-24个月的时间来{待目l果q样的事情了。ITp现在变得都要通过执行层,每一个项目都要经q仔l审查。只有对业务生存能力臛_重要的项目才能得到资金。公司在每一个项目的基础上要求在3-6个月的时间片内得到切实的效果和投资回报,虽然他们仍然l持着改良整体q行效率的策略目标?

2.1.2  作ؓ高优先的集?/a>

新的节P时代q没有减对业务程的改q和寚w成的需要?业务层面的驱动仍然存在;减少业务周{旉需要,减少存货水^的需要,消除重复IT服务的需要,如此{等?

IDC的一分报告指?a href="#_ftn1">[1] 他们调查?57个CIO关于他们2004q事情的优先U。关于集成报告中q样?

?003q?月D行的IT和执行层交流会上Q关于什么可以被UCؓ“市场推动”趋势的问题Q集成已l成?004qIT规划中比安全h更高优先U的事情?

报告同时指出Q集成和安全分别占第三和W四位,在最高的CIO优先U的列表中,仅仅排在“基设施替换/升”和“IT费用削减”之后?

M癑ֈ比则受到了有 21% 的“中间市场”公司将集成的重要性排在前面的影响Q甚臌q了“减低成本”和“基设施替换/ 升”。表 2-1 战士了这个问题的{案:?下列各项问题Q你认ؓ?2004 q终期待有最高的优先U吗? 选择一个。?


[1] IDCQ应用开发中的集成标准趋? 着全赖于“开䏀的真正含义Q?003 q?1?(文g #30365) Q?http:// www.idc.com ?

 

 

2-1

 

2.1.3 法规遵从

有时候,寚w成的需要在强加于你的,不管你是否喜Ƣ它?甚至在困难时期,当预紧张时Qؓ了集成目的而对基础设施q行修补也一定要遵从政府的法规管制?如大部分它h们会证明,不有而有很多的仅仅l尝试维持状?为新的集成策略担忧?然?没有像有者监牢时间和强烈的罚ƾ视野得到资q理注意?

׃范规制的问题,一些行业的公司必须向竞争者提供信息,q且对信息访问进行审计。比如,在电信业中,负有职责的电信营q商(ILECs) 应该提供信息l竞争的 LECs 。能源公用事业也应该提供账单信息l竞争者。保健机构和隐私法律需要跟t客戯录访问以供审计之目的。这需要你的分ȝ数据能够以标准的协议和以标准的格式轻易被讉K?

下面是一些领域,在其中法规遵从是个驱动力?

2.1.3.1 电讯

一?FCC 法规要求所有的电讯提供商和地方性的向地Ҏ的营运商暴露他们的客户数据的某些部分?一M电讯供给者正在有强烈的罚ƾ欺骗它Z遵从q一个需求。很明显Q甚至一家主要公怹不能够负担得Ll基上支付那么多的钱。与法律要求的共享信息相关的许多问题和高额成本,q且qo掉那些法律不要求的部分。因此,一个过分单U的Ҏ不能同时满法律要求又能保护敏感的公司数据。你需要又l粒度的qo器和有选择的数据变换来只提供必需的数?(也许只有在最后的一分钟) 来最化你的竞争者可能访问所D的对你的数据的利用。所有这些都需要有对业务流E的l粒度的讉K和控制?

电信提供商需要一个基于标准的、能够展到的电信提供商的集成解决ҎQ用较的电信商也能够采用来作为集成策略的各种协议。ؓ了满个需要,公司最l采?ESB ?

1.1.1.2 Sarbanes-Oxley

2002q颁布的Sarbanes- Oxley 法案旨在通过改善公司信息披露的准性和可靠性来保护投资者,它强制了新的报告需求,q且对公司的决策者和他们的企业引入了更高的问责性?遵从Sarbanes- Oxley 法案需要面临一些真正的挑战。包括费用考虑Q后勤复杂性,数据攉和管理问题,以及正确的数据的及时报告Q不数据存在于哪一个企业之中?

2.1.3.3 政府

国联邦政府已经讑֮一个目??003 之前变成无纸化。在2003q一月的国政府CIO高峰会上QBrand NiemannQCIO理事会XML Web Services工作l的dQ对国政府的集成中采用XML的驱动力是这栯?

1998q的政府文书工作消除法案Q要求联邦政府机构在2003q?0月前Q如果可行,允许与政府打交道的个人或者实体能够有选择地向政府机构电子化地提交信息和进行交易处理,或者如果可行,允许l持电子记录?

法规遵守产生了巨大驱动能量,q且集中于跨整个政府机构集成后端应用和数据源。当我们在第 11 章讨论门L境中的ESB 的时候,ESB能够在门h务器和多个后端应用之间扮演媒介中介而提供重要的价倹{?

2.1.3.4 直通处?/a> (STP)

直通处?(STP)意味着对于跨越整个pȝ和组l的业务程的事务性数据只需要输入一ơ。在其他行业中, STP 可能被称为“流通供l”、“无UR集”、“lights-out”或者“hands-free”处理?

达成 STP 的目标要消除业务程的无效率Q比如数据的手工重新输入、传真、纸面邮件、或数据的不必要的批处理。今天阻?STP 的事物的例子包括采购订单重新输入到信用卡验证系l,或者周期性处理的数据分批?

在金融服务、电信和公用事业中,STP 是一个主要驱动。在金融服务中,“T+1”的目标是将交易数据沉淀一天。自动化E序q行可以帮助公司在整个订单和贸易的生命周期中减少成本Q更快捷地服务客P以及更有效地理业务风险?

2.1.3.5 频识别标签 (RFID)

频识别标签(RFID) 正在改变企业跟踪其整个供应链中各处的货物和供应的方式。RFID标签q承够通过消除Z打开外包板条和托盘扫描条Ş码内容的需要从而自动化供应链。装备有RFID标签的货物通过安装在仓库或者装货码头的阅读器时Q会差生大量的消息,而这些数据又会产生大量的需要被捕捉、\由、变换和输入到其他队业务有意义的应用之中的数据?

零售卖场中装备有RFID阅读器的“智能货架”能够自动跟t货架上的货物数量,q且在货架存量低于标准的时候自动生补货的订货命o。这些货枉d也会知道Q消费者从货架上拿起一件商品^Q然后可能又因ؓ另一U商品而将它放回货架。这U类型的数据对于那g重新攑֛货架的商品的刉商来说也是很有价值的?

领导零售商,比如Wal- Mart?Tesco、和国防卫部,已经寚w大型供应商强制要求在大外包装U别装备RFID标签了。其最l目标是要驱动标{本w的h下降Q得最l对每一但见商品Q比如一把牙h者一|苏打,q行RFID标签识别变得可行。这样将大大增加在一个托盘经q阅d是所产生的消息数量。这U数据量在h工扫描外包装上的条码的时候是不会产生的。当一个托盘经q阅d的时候,ESB能够作ؓ因ؓ而缠w的爆发性数据的~冲以便能够准确捕获q些数据。那些没有针对这U数据量q行设计的应用可以得到ESB 的消息层的保护,它能够将工作量分配到多个后端pȝQ或者进入消息队列排队,直到其能够被处理?

因ؓ个体物品URFID标签而导致的消息的粒度更l,寚w些没有针对处理超q大包装U别_度的数据的应用也是个问题。ESB 能提供殊的缓存、聚集和变换服务Q以便能够将攉更细_度的数据,q将其聚集ؓ大包装别的数据Q以侉K些应用能够读取?

EPCglobal l织正在促 RFID 标签、阅d、以及将阅读器整合到应用的Y件的标准化。ؓ了要q泛地共?RFID 数据Q需要对整个供应链中的相兛_用和阅读器网l定义集成规则。而ؓ了避免网l中的RFID 数据z水Q过滤和聚集规则应该可能地分布到最靠近RFID 事g的生点。ESB 是一个很好的理和配|那些控制数据流得规则的理想q程集成q_?

铁手 2007-08-13 10:13 发表评论
]]>
企业服务ȝ(ESB)(3)http://www.tkk7.com/SteelHand/archive/2007/08/11/135981.html铁手铁手Sat, 11 Aug 2007 01:50:00 GMThttp://www.tkk7.com/SteelHand/archive/2007/08/11/135981.htmlhttp://www.tkk7.com/SteelHand/comments/135981.htmlhttp://www.tkk7.com/SteelHand/archive/2007/08/11/135981.html#Feedback0http://www.tkk7.com/SteelHand/comments/commentRss/135981.htmlhttp://www.tkk7.com/SteelHand/services/trackbacks/135981.html1.7采用ESB 的行?/h4>

许多新生技术都l受q试图找到问题来解决以获得采用的痛苦l历。另一斚wQESB的概忉|׃界领袖的架构师和技术社Z的领导厂商一起和定义和构建的Q因此,ESB从诞生之时便得到采用。ESB正在或已l被用在多种行业Q包括金融服务、保险、制造业、零售、电信、能源、食品分销和政府。下面是一些例子?

1.7.1 金融服务
  • 一个领先的Subprime借贷公司实现?ESBQ减了60% 的业务处理费用。这是通过在eCredit pȝ、第三方信用机构、以及他们自q后端pȝ之上建立一个统一的客h据视图来辑ֈ的?
  • 领先的银行已l用ESB实现了金融交易的直通处理,很客官地节省了手工处理成本?
  • 一个派生的贸易pȝ依靠ESB每天?,200用户处理过100,000 W交易,记录过数十亿美元的帐务?/li>
1.7.2 保险
  • 世界最大的寿命和健康再保险公司Q年收入二百亿美元,ESB作ؓ理清在总部和销售及理其政{的保险代理商之间的后端交易数据的交换的解决ҎQ生了可观的费用节省?/li>
1.8.3 刉业
  • 一个橱柜台面和地板刉商通过使用ESB实现了一个一体化理的存货系l和“可用性承?#8221;查询pȝQ提高了供应铄预见能力Q减了最低库存报警的条g。在部v的第一阶段Q?ESB被用来连接该刉商和其60个分销商之间的供应铄l?/li>

ESB 的部|模型允许制造商在分销商的地点部vESB 服务容器。这是在每个q程地点部v一个集成BrokerҎ的另一选择?

  • 一个主要的照明、电视和d成像的制造商正在使用 ESB 创徏一个统一的集成主q来q接光布全球的业务单位Qƈ且ؓ全球的客户创Z个统一的品和订单视图?/li>
1.7.4 零售
  •  使用一个基于标准的Q集中的理框架Q一个全家的影像零售q锁店正在采用ESB 基础设施来通过一个中央管理和配置控制台动态地配置和管?1,800个远E店铺,
  •  世界最大的邮购公司 (收入一百二十亿元)依靠 ESB 来从其许许多多的供应商订购品?/li>
1.7.5 电讯
  • 一个电话营q商的Web门户|站依靠ESB来对用户点击q行分析跟踪 (二小时的响应?30 天的响应旉)Q?q且每天处理一千六百万个消息?
  • 国W二大的电信营运商,收入四百三十亿美元,使用 ESB来从内部的系l向竞争者提供信息?/li>
1.7.6 能源和公用事?/a>
  • 一家一百亿元的电力公司可靠地实现?ESBQ用来连接内部系l和政府强制的应用?对帐务、系l管理、运行报告、以及法规强制的与竞争者的信息׃nQ提供了实时数据?/li>
1.7.7 食品分销
  • 一个主要的Ƨ洲食品分销|?( 一个十二亿元的分公司)在八个星期内实现?ESBQƈ且节省了使用一个集中的集线?插头 Broker的集成方式所需的三百万元。ESB 通过理供应链中的买、卖和物协调,从肉cM品的配送到饲养家畜的饲料的生Q从而自动化了整个分销|络?
  • 在这个食物分销|络中, ESB 集成了跨三个不同的q行公司和许多第三方伙伴的应用,Dq行效率增加、可观的费用节省、以及更Ҏ的集成新pȝ的方法?/li>
1.7.8 政府

n 一个美国政府机构正在用ESB 来整合多个政府系l,以满USA PATRIOT法案。USA PATRIOT法案允许政府跟踪金融交易Q以防止恐怖䆾子得到资金。该目包括使用 ESB 来集成门h务器和各U政府机构中的后端系l,以提供一个统一的数据视图?

1.8结

概括hQ?ESB h下列各项Ҏ?

  • 普遍?/li>

ESB 可以采用来适应各种集成情Ş下的各种通用目的集成目的需要。它能够构徏跨越整个企业和其业务伙伴的集成项目?/em>

  • 高度分布的、事仉动的 SOA?/li>

松散耦合的集成组件可以在ȝ上以q泛分布的地理拓扑进行部|Ԍq且在ȝ中可以随处作为共享服务进行访问?/em>

  • 选择性的集成lg部v

适配器、分布式的数据变换服务、基于内容的路由服务都可以在需要时有选择地部|Ԍq且可以独立C׾~?/em>

  • 和可靠?/li>

通过ȝq行通信的所有组件能得益于可靠消息、事务完整性、以及安全的认证通信机制?/em>

  • ~排和处理流

ESB 允许数据过插入到ȝ中的M应用Q?不管是本地还是远E?/em>

  • 自治而联邦管理的环境?/li>

ESB 支持部门和业务单元别的本地自治Qƈ且仍然能够在较大的受的集成环境中整合?/em>

  • 逐渐采用。ESB 可用于小目?/li>

每个个别的项目能q入一个更大的集成|络Q它们可以从ȝ上的M地方q行q程理?/em>

  • XML支持

ESB 可以充分利用XML作ؓ“原生”数据cd的好处?/em>

  • xz察?/li>

ESB 提供了对及时业务数据的实时洞察能力。BAM能力已经被构建到ESB 框架之内?/em>

你现在应该有了关?ESB的够的信息来满你的好奇欲了?接下来,在更详细的章节中Q你会学到更多有关其底层技术方面的内容。下几章会讨论 ESB 的进化、目前的集成状态,采用XML来作Z个通用的数据交换架构以在不同的数据表示之间协调的好处,以及异步消息和MOM?



铁手 2007-08-11 09:50 发表评论
]]>
企业服务ȝ(ESB)(2)http://www.tkk7.com/SteelHand/archive/2007/08/09/135404.html铁手铁手Thu, 09 Aug 2007 01:26:00 GMThttp://www.tkk7.com/SteelHand/archive/2007/08/09/135404.htmlhttp://www.tkk7.com/SteelHand/comments/135404.htmlhttp://www.tkk7.com/SteelHand/archive/2007/08/09/135404.html#Feedback0http://www.tkk7.com/SteelHand/comments/commentRss/135404.htmlhttp://www.tkk7.com/SteelHand/services/trackbacks/135404.html16.1ESB 的特?/h4>

׃试图快速进入成长中?ESB 范畴的厂商的慌ؕQ以及大量行业分析师和记者在分析报告中分别展CZ们各自的观点Q可以理解,q其中对于ESB 到底是什么还h很多h。这一节将概略说明 ESB 的主要特性?

1.6.1 普遍?/a>

如第 1 章所C, ESB 能Ş成普遍的|格的核心。它能够跨越和超q扩展企业,q且横跨部门l织、业务单位和贸易伙伴形成全局的范围。ESB 也能很好地适合于局部的集成目Qƈ且对促进它们采用Mcd的集成环境提供柔性的支撑?

clip_image002

图表 1? ESB 形成一个能跨越了一个全球企业网l的普遍|格

应用可以按需插入ȝQƈ且具有可视性,以及能够与其它已l插入到ȝ中的M其他应用和服务共享数据。虽然Web Services?ESB 架构的一个有机组成部份,但是所有的应用q不是一定要被修Ҏ为真正的Web Services才能参与?ESB。连接性是通过多种协议、客LAPI 技术、遗留消息环境、以及第三方应用适配器来辑ֈ的?

1.6.2 Z标准的集?/a>

Z标准的集成是 ESB 的基本概c对于连接性,ESB 可以使用J2EElgQ比如用Java Message Service (JMS)来进行MOMq接Q用J2EE q接器结?(JCA ?J2CA) 来连接应用适配器。ESB 也能够非常漂亮地与?Net、COM、C#、C/C++构徏的应用进行集成。除此之外,ESB 也能集成支持SOAP和Web Services API的Q何组Ӟq其中包括事实上的标准Web Services工具q实现Q比如Apache Axis。ؓ了处理数据操U, ESB 可以使用XML标准Q比如XSLT、XPath ?XQuery 来提供数据变换、智能\由、以及在数据过ȝ的时候提?#8220;IZ”查询。ؓ了处?SOA 和业务流E\由, ESB 可以使用 Web Services描述语言 (WSDL) 来描q抽象的服务接口Q用针对Web Services的业务流E运行语a(BPEL4WS)、WS- Choreography或者一些其他基于XML的词汇表Q如 ebXML BPSSQ来描述抽象的业务流E?

如果你还不懂q些深奥的词汇的含义Q也不要担心。虽然本书ƈ不想作ؓ是这些各个技术的详细参考或个别指导Q我们也会在他们如何?ESB 有关的语境中_详细地解释它们?

q些Z标准的接口和lg被整合到一个意义非凡的包含开攄点的可插入架构之中。ESB提供了一U基讄来同时支持基于工业标准接口集成组件和使用标准化接口来实现的专有元素。下囑ֱCZ一个用JMS和JCA集成一?J2EE 应用、用JCA应用适配器集成第三方打包软g、用C#客户端程序集成一?NET应用、用Web Services集成两个外部应用的案例的高阶视图?

clip_image004

图表 1? ESB 整合多种不同的技?

1.6.3 高度分布的集成和选择性部|?/a>

ESB 在其中借鉴了传lEAI Broker的许多功能,比如从它提供集成服务 , 像是业务程~排、数据\由、数据变换、以及应用适配器。然而,集成中介者通常是高度集中和单一的Ş态。ESB 这些集成能力提供ؓ独立的服务,能够以一U高度分布的形态一起工作,q且能够彼此间独立׾~。在W?6 章中Q你会学习更多有关 ESB“服务容器”QESB 的一Ҏ心概늚内容Q它允许寚w成服务进行选择部v?

1.6.4 分布式数据变?/a>

M集成{略的一个关键部分就是能够轻易地在应用之间{换数据格式的能力。许多应用对描述怼的数据ƈ不共享相同的数据格式?

数据变换是一?ESB部v的一个固有部份。变换服务特别针寚w些被插入ȝ的个别应用能够在ȝ的Q何地方被定位和访问的需要。因为数据变换是ESB 本n的一个有机组成部份,解决应用之间的阻抗失配问题便可以惛_ESB?

1.6.5 通过分层的服务来辑ֈ可扩展?/a>

ESB 能够Z提供本质上针对Q何集成项目所必需的核心能力,q且可以通过使用分层的服务来处理特定的用途来增加。例如,Ҏ的能力,比如业务程理 (BPM) 软g能处理工作流相关的业务流E,而协作服务器能够提供对伙伴业务流E管理的Ҏ服务。专门的W三方翻译器能够外部数据,比如EDIQ{换到能进入目标企业资源规?(ERP) pȝ之内的格式,或者在通用ȝ之上的规范XML表现?

1.6.6 事g驱动?/a> SOA

?ESB驱动的、事仉动的 SOA中,应用和服务被当做抽象服务端点Q能够轻易地对异步事件做出响应。SOA 对其底层的连接性和线l节提供了一个抽象的方式。服务的实现不需要理解协议。服务也不需要了解消息是如何路由到其它服务的。他们只是简单地接收自 ESB 的一个消息作Z个事Ӟ然后处理该消息。ESB 可以把消息发送到它想要去的其他Q何地斏V?

?ESB SOA 中,用户定制服务可以被创建、扩展,q且被重用ؓESB 功能。被暴露为服务的应用端点Q可以同Ҏ的集成功能一h造成复合业务服务和业务流E,q且它们可以Ҏ不同目的重新l合Q其目标是在一个即时企业中提供自动化的业务功能?

W?7 章将会更详细地讨?ESB 中的 SOA ?

1.6.7 处理?/a>

ESB的处理流从简单的优先步骤序列C用条件分支和联合来ƈ行执行的l合业务程~排。这些特征可以用简单的消息元数据或者通过使用诸如BPEL4WS 之类的业务编排语a来控制?

ESB 的处理流能力使得定义属于某个部门或者业务单位局部的Q或者共存于一个较大的集成|络中的业务程成ؓ可能。这点却是一个集U器-插头中介者或一?BPM 工具自己所不能很好地自p决的问题。第 7 章将会详l讨论分布式的流E能力,它能提供高度分布的流E编排能力而不需要中心化的流E和规则引擎?

ESB的业务流能力也涉及到Z内容的消息的路由的特D集成服务?

因ؓESB 的业务流能力构徏于分布式的SOA之上Q它也能够跨高度分布的物理部v拓扑Q甚x大z)而不用痛苦地忍受ȝ上各U应用和服务之间的物理边界和多协议的鸿沟?

clip_image005

图表 1? 跨越物理和逻辑边界之上的部|拓扑的~排和业务流

1.6.8 安全和可靠?/a>

?ESB 上的节点之间的连l是h防火墙能力的。应用和 ESB之间的安全性,甚至?ESB 节点自n之间的安全性,能够建立和维护最高强度的认证、凭证管理、和讉K控制?

可靠性是通过处于ESB核心的企业MOM来达到的。MOM核心提供异步通信能力、业务数据的可靠传输、以及事务的完整性。你们将在第 5 章中学到Q这已经不是十年以前的传lMOM技术了。需求从那时以后开始进展,q且已经成熟Q?作ؓESB 的核心的MOM必须W合今天的需求?

1.6.9 自治但联邦的环境

传统的集U器-插头中介者方式往往hl织性的边界问题Q这主要是因为EAI Broker对跨防火墙和网l域的无能的实际限制所引v。更重要的是Q即使一个集U器-插头架构能够被展而跨q组l的交界Q它仍然不允许各个业务单位彼此半独立地运行所需要的局部自沅R与不断扩展的集成范围g伸超q部门层ơ所相关的最大问题之一是自d集中控制之间的问题?

作ؓ大多数大型公司环境的业务文化的一部分Q每个部门或业务单位需要彼此独立地q作?然而,他们仍然依赖于共享资源,以及输入到通用业务功能之中的报告和帐户信息?

在这样一个环境中Q需要所有的消息量都流q位于总部的一个集中的消息Broker的集成策略是不合理的?q不只是一个技术上的障;它也是公司文化的问题。在一个松散耦合的业务单元环境中Q诸如本地应用之间的业务程Q或者安全域Q被一个集中化的公司IT功能理直没有一炚w理。组l中的松散耦合业务单元需要彼此独立地q作。他们每一个都应该有其自己的IT功能Q而不必须路由所有的消息量Q或代表它的业务规则和安全域的控? l过一个集中的集成l纪人在一个位|或另一?W?1 ??

clip_image006

图表 1? 如果使用一个集中的集线器,分开业务单位~Z必需的自??了集成经Uh

本地业务单位和部门需要有对他们自q局部IT资源的控Ӟ比如在其站点q行的应用。集成基设施应该支持部v拓扑来支持具有实用性的业务模型。ESB 也提供这U部|模型, 允许本地量、集成组件以及适配器能够被本地安装、配|、加固和理Qƈ且仍然能够以一U集成的安全模型一起将本地集成域插入到一个更大的联邦集成|络之中?

clip_image007

图表 1? 自治的而且公布联邦?ESB 允许横过l织的交界对合作地同盟的q算l织

ESB 的分布式特征是通过从实际的部vl节和底层的q接协议中抽象出来的端点定义,以及在那些端点之间的数据的编排和路由来达到的。联邦特征则是通过 ESB 能够隔离和选择地横q应用域和安全边界的能力来达到的?

1.6.10 q程配置和管?/a>

在一些业务模型中Q在每一个远E地炚w安排有本地的IT职员是不大可能的Q虽然仍焉要松散耦合的、自ȝ联邦的集成网l。D例来说明q一个点Q我们来惌一下部|在零售行业中的ESB 的案例。一个视频租借链可能有数百或数千个包含相同应用的地点Q所有以相同的Ş态运行的操作涉及到目录管理、会计和报表{?

clip_image009

图表 1? 和数以千计遥q的储存一个视像零售链,所有的包含应用E序的相同组

使用 ESBQ可以徏立一个集成蓝图来处理q程店铺中的局部应用之间的通信。这包括店内应用的接口定义、消息流量的路由、消息通道的管理、以及安全许可。它q可能包括集成组Ӟ比如应用适配器、协议适配器或者数据变换器。这个集成蓝图,或称模板Q可以在所有地点进行部|和定制Qƈ且独立地扮演所有其他店铺?

clip_image011

图表 1? ESB 配置蓝图在每个遥q的位置和很q地展开配置而且处理

q个q程部v蓝图的能力ƈ不单针对零售行业Q它也可以扩展到所有其他行业的应用。联邦的集成域的q程理对于在一个高度分布的环境中的MESB的成功部|都是非常关键的?

安全、可靠的消息联结

除了在每个店铺的本地应用之间׃n数据之外Q这些远E店需要同总部׃n信息以便q行帐务处理和报表、信用管理以及职员数据的q踪。远E店需要彼此之间共享信息。D例来_一个大型的韛_q锁店可能会提供q样的服务,֮可以选择从离家近的店U赁qQ然后在d公室q的另一个店归还。因此,在同一个地理区域内的店Z间可能会需要以q乎实时的状态共享有关租赁的数据。因为在q程店铺和总部之间的卫星网l通信q接存在较大的反应期和弹性,要在总部l护一个有x有租赁信息的实时集中讉KҎ不现实的。那些有关你只是在两个小时之U借的数据需要共享,或者通过q程店铺之间的一个集成的数据׃nq接来进行访问?

因ؓ总部和远E店Z间的q接是通过可靠的消息来辑ֈ的,因此׃不可靠的卫星电\所造成的网l服务终端可以从消息层得到补ѝ也应该注意刎ͼ对于q程店铺之间来说Q通过Internet来徏立一个安全和可靠的消息通道也是可以的?

1.6.11 作ؓESB?#8220;原生”数据cd的XML

当数据通过ESB 在应用之间流动的时候,XML是一个表现它们的理想基础。被应用E序的一个巨大的行列生而且耗尽的数据能以多U的格式存在和包装方案。有大量的应用生和消费的数据,可以以各U格式或者打包的Schema存在。对ESB来说虽然的确可以依你喜欢的打包Ş式或者封装方案来承蝲数据Q但途中数据表现为XMLh莫大的好处,包括使用能够l合来自于不同的源数据以创徏一个新的数据视囄产生数据的特D?ESB 服务Q?以及针对应用间高U数据共享的羃和重定目标。第 4 章将会探I用XML功能本好处—将避免一个组l的应用间同步升U的需要—ƈ且更详细地讨论分布式XML变换之后的基本原理?

1.6.12 业务数据的实时吞?/a>

ESB通过为途中数据在ȝ之上的应用间传输的时候提供实时吞吐消除了潜伏反应问题。目前,最行的集成方法之一是每夜进行批处理?然而,打包的成批处理集成策略,不管是每夜还是其它,都具有较高的辚w错误率,q且造成信息获取的gq。其l果是高反应期生获取了q时数据代h高昂的。第 9 章将详细讨论q个问题Qƈ且研I?ESB 可以如何用来你的业务数据从每夜批处理模式重构ؓ实时吞吐模式?

1.6.13 q行感知

q行感知意思是业务分析师能够获得对业务q行的状态和健康情况的洞察能力?一个允许对数据在其以某个业务流E中的某个消息Ş式在l织中流动时q行实时跟踪和报告的基础设施Q对于帮助徏立运行感知是一个无L工具。一个称为是业务zd监控 (BAM)的品门cdl出现来解决q行感知的这些问题?

使用XML作ؓESB的原生数据格式的好处之一是消息没有被处理ؓ不透明的数据块。如果应用和服务之间的所有数据都被格式化为XML文档QESB提供的基支撑便允怽在ESB之上再构Z层高U能力,以获得对过你的企业的业务数据的实时z察能力。这些能力,不管是否是ESB的固有组成部分,q是有一个扩展来驱动Q都表现为包括了路由、处理流、以及下层的线Qƈ且不需要再在其上锁定一个第三方的BAM产品的一个通用基础设施的一个有机组成部分?

作ؓESB的一个基部分的审计和跟踪能力允许对在SOA中的所有流动的业务程和消息流的健L况进行监控和跟踪。诸如数据缓存、数据收集和聚集、以及XML数据的可视化表现之类的增值服务,可以用来创徏一个基服务Q该基础服务可以在数据在企业中流动时Q生对业务程的状冉|察的警告、提醒和报表能力?

clip_image012

图表 1? 增值型服务促成操作的觉察提供对zȝ业务数据的即时洞?

对ESB中的数据的根t和报表是通过在业务流中定义审计点来达到的Q然后再对从业务消息中收集的重要内容在ESB中流动时提供插入炏V可q踪数据例子是业务消息自w,以及指示某业务消息是否通过了某个特定的业务处理步骤的业务事件?

高的增值服务可以提供数据收集服务、查询机制以及报表能力,它们能够讲所有数据进行收集、进而表Cؓ各种h意义的Ş式。XML持久性服务可以提供缓存和聚集点,q样可以攉要转换的数据从而向其他应用提供数据输入Q或q入到可以被业务分析师用的人可ȝ报表机制之内。这意味着经ESB的数据可以进行实时分析,以提供有关你的业务状态的实时信息—比如,可以随时提供有关你的供应链中的存货的状态快照?

1.6.14 逐渐采用

区别是否真正?ESB 的一个主要方面是看其是否h逐渐采用的能力,相对于另一?#8220;全有-?全无”的论断。在 Y2K 之后的开支削减中Q数百万元预算的项目数目已l今非昔比。有一些迹象表明,预算资金{备正在开始释放以解决短期的战术性集成需要,但是预算仍然谨慎地处于一个执行层面。,然而,同时仍然有一些期望实现较大的公司范围集成{略计划—这些计划严重依赖于集成和现有IT资的重用?

?-10说明?ESB 可以如何用于项目中Q然后它们都可以q入C个更大的集成|络之内?当我们深入阅L书的时候,我们会详l研I这是如何实现的?

clip_image013

图表 1?0 ESB 支持逐渐采用的集成,同时向着一个策略目标工?

ESB 的联?自治能力也对一ơ一个项目采?ESB的能力有助益。ESB 集成目渐进式的分布部v能够在朝着一个更q的企业层面的计划目标的前提下得到立即h倹{?

逐渐采用的观念将q一步通过桥接C个已有的集成Broker集线机器和遗留系lBroker来得到进一步支持。集成Broker集线器和他们的特点将在第 2 章中详细研究?/p>

铁手 2007-08-09 09:26 发表评论
]]>
企业服务ȝ(ESB)(1)http://www.tkk7.com/SteelHand/archive/2007/08/07/134929.html铁手铁手Tue, 07 Aug 2007 05:14:00 GMThttp://www.tkk7.com/SteelHand/archive/2007/08/07/134929.htmlhttp://www.tkk7.com/SteelHand/comments/134929.htmlhttp://www.tkk7.com/SteelHand/archive/2007/08/07/134929.html#Feedback1http://www.tkk7.com/SteelHand/comments/commentRss/134929.htmlhttp://www.tkk7.com/SteelHand/services/trackbacks/134929.html本系列编译自 O'Reilly的《Enterprise Service Bus》,陆l发布上来?/em>

 

1 企业服务ȝ?/h3>

1.1一个事仉动型企业中的SOA

在一个事仉动型企业中,影响业务程的正常进E的业务事g可以以Q何顺序随时发生。那些以自动化的业务处理方式交换数据的应用需要用事仉动的 SOA 来彼此通信Q以便能够对不断变化的业务需求具有敏L反应。SOA 向业务分析师和集成架构师提供了处理高阶服务的关于应用和集成组件的宽泛的抽象视图。而在 ESBQ应用和事g驱动的服务彼此以一U松散耦合的紧密地与流行的 SOA l系在一Pq允许它们彼此能够独立运行,q且仍然能够提供较宽q的业务功能价倹{?

?SOA 的王国,事g被表Cؓ一U开攄XML格式文gQ以及经q一个对验证开攄Q可以协调的透明线中的(FlowQ?

—John Udell, InfoWorld

SOA 的服务组件暴露的是一U粗_度的接口,其目的是使应用之间能够异步地׃n数据。而?ESBQ一U集成架构将应用E序和分ȝ集成lg拉在一P以生服务装配组合从而Ş成复合的业务程Q进而自动化一个即时企业中的业务功能?

ESB 为SOA提供实现骨架。那是_它通过一个跨多U协议的消息ȝ来提供一个有兛_名\q的地的高度分布的世界来提供松散耦合的,事g驱动?SOA。ESB 中的应用E序 (和集成组? 在理Z是彼此解耦的Q而且通过ȝ彼此q接为暴露ؓ事g驱动服务的逻辑端点?

通过分布式的部v配置基础设施Q?ESB 能有效率地提供对在扩展企业中分布的服务的中心配置、部|和理。一U普遍集成的新方式应用诸如SOA、EAI、B2B 和Web服务之类的技术的通常目标主要是创Z个集成架构,且能够深入ƈ且跨整个扩展企业。对于一个集成基设施到达到这U普遍性,它必d有下列各特?

  • 它必能够适应多种集成情Ş目的通常目的需要,不管是大型的q是型的。适应性包括提供一个能够经受协议、接口技术、甚xE模型的变化势的持久架构?
  • 它必M一U单一和统一的方式,以及一个通用的基设施来连接扩扩展企业的各种应用?
  • 它必能够扩展超出单一公司IT中心的边界。ƈ且自动化伙伴关系Q比如在B2B 和供应链的情况下?
  • 它必d有设计的单性和较低的进入门坎,使得日常的IT专业人员也能够成我修l的集成架构师?
  • 它必L供一个跨普遍集成的 SOAQ它能集成架构师能够对公司的应用资产和自动化业务流E有一个广泛的、抽象的视图?
  • 它需要有能够反应和符合不断变更的业务需求和竞争的压力需要的灉|性和能力?

?ESB中,应用和事仉动服务以一U松散耦合的方式紧密地联系在SOA 中?q得它们能够彼此独立运行,q且仍然能够提供q泛的业务功能h倹{?

ESB 架构解决了这些需要,q且正在被各U通用的集成项目所采用。它也能够在企业应用层面普遍C展,不管是物理位|还是技术^台。Q何应用都可以通过大量的连接选择插入C?ESB |络中,q且可以立即参与C那些通过ȝ暴露为共享服务的应用之间的数据共享之中。这?ESB Z么经常被UCؓ集成|络Qintegration networkQ或集成构造(fabricQ的~故?

ESB 提供为集成提供了一U高度分布式的架构,q且h能够让独立的部门和业务单元能够以一U逐渐增加的、可消化的分块来构徏它们的集成项目的独特能力。?ESBQ部门和业务单元仍然能够l箋在独立的集成目中维护它们自q本地控制和自治,q且仍然能够它们的集成计划q接C个更大的、更全局的的集成|络或网g中?

1.2针对 Web 服务的SOAQ如今已l可?/h4>

Web 服务已经通过为应用间的互操作性提供一U基于标准的方式为面向服务架构找C新的重要性。Web服务的主要目的是提供了一U服务抽象,它允许应用之间的互操作性用不同的q_和环境来构徏。这一个目标的实现能够提供一个应用之间的普遍集成的更Ҏ的\径?

׃ESB的出玎ͼ现在有了一U方式能够将Web Services和SOA合ƈC个意义非凡的架构中,以将应用和服务以一U高度׾~的状态集成到一个扩扩展企业的骨架之中。ESB使用今天已经成熟的技术立M得Web Services、XML、以及其他集成技术更加有用?

SOA 的核心原则对于普遍集成项目的成功臛_重要Qƈ且已l在 ESB 中被d实现?Web Services标准正在有朝着正确的方向前q,但是在提供企业能力斚wq未完成Q比如安全性、可靠性、事务管理和业务程~排。ESB 以这些领域中今天已经定的标准ؓ基础Q而且已经有实际实现部|在各种领域和行业中。ESB完全有能力跟上Web Services相关能力的革新进展步伐。第 12 章提供了更详l的关于q一个主题的讨论?

1.3常规的集成方?/a>

ESB 通过从EAI中介者(BrokerQ那里学来的概念和技术将Web Services和其他补充标准结合在一赗然而,ESB q不仅仅是在同一个老式的EAI 集线器之上的单的Web Services外衣?

传统的Ş式化的集成方法都有其优缺炏V第 1 章就展示了有关集成的一些高阶的显著特色Q?范围从左下方最不o人想要的Q到右上方象限中的最令h惌的?

clip_image002

图表 1? 传统?EAI 中介器,应用服务器,MOM?ESB 的特?

传统?EAI 中介器,包括那些已经构徏在应用服务器之上的,使用一U集U器和插_hub-and-spokeQ架构。集U器和插头有一些中心化功能的好处,比如路由逻辑和业务规则的理Q但是不能很好地伸展扩越部门和业务单位的边界。第 2 章将讨论使用集线器在集成中的早期试的巨大代P以及它们的初步成功?

应用服务器可以通过标准协议q行互操作,然而它们是以一U紧密耦合的方式进行连接的Qƈ且集成逻辑和应用程序逻辑U缠在一赗?

EAI 中介器通过应用逻辑从集成和程路由逻辑中分d来提供了增加价|然而你仍旧要忍受集U器-插头架构的痛苦?

面向消息中间?(MOM) 提供了以松散耦合和异步的方式q接应用的能力。然而,MOM自n需要在应用中进行低U的~码。用传l的MOMQ以及定制的~程技术,比可以在分布式的集成解决Ҏ上走得更q。然而,没有对\由逻辑的高阶抽象,q种方式仍然要忍受集成逻辑难以q接Qƈ且也和应用逻辑U缠在一L痛苦。依赖于MOM的用,即是分布式特征也会受到限制Q因Z些传l的MOM基础设施对实际的|络边界的跨也不是做得很好?

最后,?ESB 中,服务可以被配|而不是编码。处理流E和服务能够透明地跨整个服务ȝ。ESB 提供了能够很好地扩越集线?插头架构范围的高度分布式集成环境Qƈ且清晰地分离了应用逻辑和\由数据变换之cȝ集成逻辑。一?ESB 架构形成了一个消息集U器和集成服务的互连接性网|h一个彻底分布的集成|络的功能性和性?

W?6 章更q一步描q在使用应用服务器集成和使用ESB集成之间的对比。MOM的概念在W?5 章讨论。第 2 章的 “附属架构”l箋讨论业务程路由逻辑和业务逻辑之间的分R?

1.4被IT需要驱动的需?/h4>

ESB 的一个关键特性就是要为支持分布式的、松散耦合的业务单位和伙伴Q比如自动化供应链,提供支撑基础。ESB 的这些能力是其固有的必要特征Qƈ且是中间件厂商与那些惌创徏大规模集成架构的业界专家共同工作的结果。这些业界专家包括了大公司IT架构师、以及电子市集N易社Z惌Z׃n服务、消息、XML何其他众多的q接选择来徏立B2B集成骨架的改革者,q且要坚持遵守工业标准。第 3 章将会讨论对 ESB 概念的创造有助益的许多催化剂?

同时Q仍然必解决的最大需要在于如何还没有的最大需要被定址包括该如何有效地提供集成能力、比如应用适配器、数据变换、以及能够用于通用的集成项目,跨越多种集成情性的路由。ƈ且需要超于个别战术性的集成目之上的,更加通用的技术和更加架构性的方式?

IT专家已经对以前的一些技术趋势失望,比如CORBA、或者EAI什么的。CORBA 有着与SOA 一L正确理念Q但是其与生俱来太复杂而难以维护,因ؓ它依赖于应用和服务之间的紧密耦合接口。EAI 也痛苦于对单个项目上的陡峭的学习曲线和昂늚q入负担 (下一章将详细讨论q个内容)。真正需要的是SOA的简单方式,以及可以被采用来适应M集成工作Q大型或者小型,的一U架构。此外,那就是需要一个能够经受协议、接口、甚至业务徏模趋势的变革的持久架构。ESB的概念就是创建来解决q些需要的?

1.5行业的牵?/a>

自从ESB 概念?2002 q被首次引入QESB 的集成方式已l被中间件、集成和Web服务市场中的很多重要的厂商采用。其接受度正在稳定持l地增长?

?002q早期开始,分析公司Q比?Gartner 公司、IDC、ZapThink{,已l开始跟t和~写有关 ESB 的技术趋ѝ在Gartner 公司?002q发布的一份报?DF-18-7304)中,分析?Roy Schulte q样写道Q?

一U新型的 企业服务ȝ架构- l合?strong>面向消息中间?/strong>QMOMQ、Web Services、数据变换和路由的基设施?/em>会 2005 之前在很多的企业中运行?/em>

q些高功能、低成本的ESB能够被很好地适应作ؓ面向服务架构和企业神l系l的d?

那四个支柱—MOM、Web Services、数据变换和路由 ?表现了Q何优U的ESB 的基。当我们探究 ESB 的时候,本书会集中于其中每一个基和其他必ȝlg的角艌Ӏ我们还要讨论将会讨?ESB I竟能ؓ企业做些什么、以及它的基本组件所扮演的角艌Ӏ我们还要讨Z些高阶主题,包括横越多种行业之上的实跉|用的架构性概q?

1.5.1 采用 ESB的厂?/h5>

有许多中间g和集成厂商已l,或者正在构建,W合ESB描述的某些品。ƈ且这个名单还在不断增加。附录中列出所有的已知厂商。一些厂商已l声UC们已l开始提?ESB?Q而有些则正在计划构徏Q有些则只是在市场宣传材料中使用q一技术术语而实际上背后q没有实质性的东西。当过 25个厂商正在ؓ相同的技术空间竞争的时候,q一个技术范畴注定要变成像上世纪90q代的应用服务器一L炙手可热?

q个清单中有个别厂商应该特别提及。Sonic软g最先倡导了这个概念,此后不久许多其他的较厂商业q入此领域,声称他们也正在提?ESB 或是正在开发之中。一但那些著名的集成公司Q比如webMethods、SeeBeyond ?IBM 最l搭上这巴士(“BUS”Q,q且惌开始徏立他们的ESBQESB 术语才真的开始广泛引起业界注意,是一个强大的不断发展技术范畴?

在本书写作的时候,微Y公司q没有对其Indigo目和有关ESB发布M公开的说明。然而,一些记者和分析师在Indigo目宣布的时候还是将二者联pv来?003 q?1?30 日, ComputerWorld 的文章说Q?#8220;开发h员的兴趣被微软的技术伤害了”QGartner 公司?Roy Schulte关于Indigo目提出?

Roy SchulteQ是Gartner 公司在斯坦福的一个分析师Q注意到Indigo目其实是微软消息队列(MSMQQ、公司的COM、COM+?Net Remoting、以及Web Services技术的集?#8220;把它x代表微Y公司的通信中间件计划的化和l一Q?#8221;他说Qƈ说他认ؓIndigo是一个非常好的企业服务ȝ(ESB)?

Indigo以消息ؓ基础Qƈ且打结合MSMQ 和Web Services。可以提供一个消息ȝ的基。然而,光成能力的其余部分则被锁定到BizTalk 之内Q而它是一个集U器-插头风格的集成服务器。ؓ了成为真正的ESBQ分布式消息ȝ和分布式集成能力都要具备?

如果Indigo目完成Q构Z微Yq_之上的应用和服务能够更加吸引hC为端点连接到ESB之上。将Indigo包含到微软^台和开发环境之内将更加能够使得应用h松散耦合和消息感知能力?/p>

铁手 2007-08-07 13:14 发表评论
]]>老马的集成模式之概论?/title><link>http://www.tkk7.com/SteelHand/archive/2006/03/08/34265.html</link><dc:creator>铁手</dc:creator><author>铁手</author><pubDate>Wed, 08 Mar 2006 06:16:00 GMT</pubDate><guid>http://www.tkk7.com/SteelHand/archive/2006/03/08/34265.html</guid><wfw:comment>http://www.tkk7.com/SteelHand/comments/34265.html</wfw:comment><comments>http://www.tkk7.com/SteelHand/archive/2006/03/08/34265.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.tkk7.com/SteelHand/comments/commentRss/34265.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/SteelHand/services/trackbacks/34265.html</trackback:ping><description><![CDATA[Martin的EIP之概论:<a HREF="/Files/SteelHand/1%E4%BD%BF%E7%94%A8%E6%A8%A1%E5%BC%8F%E8%A7%A3%E5%86%B3%E9%9B%86%E6%88%90%E9%97%AE%E9%A2%98.rar">使用模式解决集成问题Q?/a><br><br><img src ="http://www.tkk7.com/SteelHand/aggbug/34265.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/SteelHand/" target="_blank">铁手</a> 2006-03-08 14:16 <a href="http://www.tkk7.com/SteelHand/archive/2006/03/08/34265.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>RFID的领域应?http://www.tkk7.com/SteelHand/archive/2005/11/15/19795.html铁手铁手Tue, 15 Nov 2005 01:28:00 GMThttp://www.tkk7.com/SteelHand/archive/2005/11/15/19795.htmlhttp://www.tkk7.com/SteelHand/comments/19795.htmlhttp://www.tkk7.com/SteelHand/archive/2005/11/15/19795.html#Feedback0http://www.tkk7.com/SteelHand/comments/commentRss/19795.htmlhttp://www.tkk7.com/SteelHand/services/trackbacks/19795.html1RFID的领域应?

RFID是一U自动识别技术。从本质上讲Q它对其所标记的物品本wƈ不带来Q何附加h|甚至增加成本。但是,它却能够驱动与物品相关的背后应用带来巨大的h|而这些则Ҏ不同的应用体现而不同。这其中q有一个至关重要的驱动力,那就是以Internet、网l技术、通信技术、Y件技术ؓ代表的现代信息和通信技术(ICTQ。只有在此基上,RFID本n才能成ؓ体系Q自动标记和识别的数据才能得以广泛地传输和共享,从而连接随旉地的业务。即Q企业和l织能够在前所未有的集成之基础上,自动地进行通信、协作、教肌Ӏ销售、配送、采购、服务,以及企业内部的业务流E?BR>
RFID 的本质是对物体或者hq行识别。其最大优Ҏ自动化,不要求有Zؓq预Q被标记的对象一旦处于阅d的质询区域便能够被自动读取,而相关信息则实时传送到后段q行处理。被传递到业务pȝ的相关的数据主要包括Q?标签~码Qtag IDQ,阅读器编码(reader IDQ以及读取时的时间片。所有的应用都是Zq些基本数据?

资跟踪Q?U>Asset TrackingQ?/U>
很自Ӟ资跟踪是RFID的最通用的应用。公司和l织可以RFID标签|于那些动的、分散的、易于丢失或者被盗的、难以定位和查找的物品之上。几乎每一URFIDpȝ都能够被用于资跟踪。比如总部位于国Secaucus, N.J.的一个第3方物商,NYK Logistics׃用RFID来跟t其位于Long Beach, Calif.的集散中心的集装。它使用一U基于阅d和主动标{实时定位pȝQ可以将集装定位在10英尺之内。对于安全管理来_一些敏感的信息讑֤Q特别是Ud讑֤Q如W记本电脑等Q,可以用RFID来跟t管理?BR>
加拿大航I公怋用RFID来跟t用于世界各地机场的食品车,每年可以节约数百万美元。这P不但因ؓ使用了更的食品车以及减了保持库存的时间和费用Qƈ且对世界各地Ud的食品R的妥善管理也增进了效率和客户服务?
其它应用案例q包括,El Paso County使用915 MHz被动式标{来跟踪计算机和办公讑֤。一家法律公司Fish & Richardson P.C.甚至使用13.56 MHz标签来跟t重要文件。而一家新加坡公司使用13.56 MHz 技术来跟踪必须l过的建筑混凝土以保证建筑安全?

刉(ManufacturingQ?/STRONG>
RFID 应用在制造商其实已经很多q了。它可以对生产制造过E中的零件进行标识,甚至与工艺、制造参数、生产过E等相关。特别对自动化柔性生产线有巨大帮助?
波音公司在其Wichita, Kansas的工厂中使用了一?15 MHz 的系l来跟踪零g的达到。而过d是用条形码来进行跟t的Q但条Ş码必ȝqh工扫描,q且q必ȝq特D的化学处理。如果h工扫描环节出了差错,则会失去寚w件的跟踪。而如今这些都是自动化的,q且减少了错误和需要的人手?
国汽R通用公司QAM General Q也在其位于Mishawaka 的悍马汽车制造厂内用了以一U主动式RFID pȝ来跟t零件。?Club Car 则甚臛_RFID作ؓ其新的高夫球R装配U上的一个主要部Ӟ每辆R的生产时间从88分钟减少?6 分钟?

供应铄理(Supply Chain ManagementQ?/STRONG>
RFID 技术过d用于企业内部控制之用的供应链闭环控制。宝z公司(Procter & GambleQ在西班牙的配送中心用了13.56 MHz pȝ来增加吞吐量、减了差错和成本?

Paramount Farms公司Q它加工大约整个国60% 的pistachio 作物Qƈ且出口到20多个国家Q便使用了RFID来帮助自动化处理收购自越来越多的U植伙伴的品?

随着标准的出玎ͼ比如EPC{,使得不仅在企业内部进行供应链跟踪Q借助于基于标准的~码和数据交换,以及Internet的网l支持,可以扩展C企业相关的业务伙_从上游的供应商到下游的分销商。整个供应链在全球范围内形成Q包括间接的W?方物、运输商、以及零售商。ƈ且,也在前所谓有的基上提供了对生产(EPRQ、零售(POSQ、服务(CRMQ的集成?
一家加拿大的护肤品制造商Canus׃用了RFID 来减其到零售客Lq输的检成本,q且q用基于RFID 的温度感应器来监控运输过E中的条件?

零售Q?A >RetailingQ?/STRONG>
零售商们Q如Best Buy, Metro, Target, Tesco ?Wal-Mart {,都是采用RFID技术的先驱。这些零售商都希望RFID能够整合供应链、有效管理库存和配送、以及有效的货架理Q以便减成本和提高服务?
Wal-Mart已经有严格的旉表,已经要求他的?00家供应商提供RFID标记的品,然后是前200Ӟ500家直臛_部供应商。与国国防部DoD成ؓ推动RFID的最大力量?

电子支付Q?A >Payment SystemsQ?/STRONG>
RFID 不仅在供应链中很火热Q电子支付系l也很得到关注。包括不停R收费pȝ、泊车收费系l、公交R务{等?
׃其中涉及Ch值存储和转移Q这里主要是高端RFID pȝQ特别是卡。在世界很多城市、包括中国的很多城市Q都采用非接触式的智能卡来进行公交系l:巴士、地铁、轻轨、电车甚臛_UR?BR>另外一个重要的斚w是银行支付QMasterCard 和Visa 都在计划传l的卡转换成智能卡Q增加安全性和解决其他很多问题?

安全和访问控ӞSecurity and Access ControlQ?/STRONG>
RFID 已经用于物理安全的访问控制很久了。以前一般用低频的RFID标签。最q,供应商大都推介如今采用高频的13.56 MHzpȝQ提供更q的d距离?
2
RFID q用于保护重要胦产。许多最新型L汽R都用这U技术来防盗。即在方向盘部位有一个内|的RFID readerQ只有当d到封装与钥匙中的标签发出的正的识别LӞ才能够启动汽车?
d式标{֏以结合移动传感器来对极端敏感和高价值的东西Q比如武器和珠宝q行监控Q一旦检到则会自动报警。RFID 标签也可以用于难以管理的Ud计算和存储设备如W记本电脑和USB存储讑֤{?

其他应用
随着技术和领域的发展,会出现层ZIL革新应用。比如,用于大型主题公园的儿童跟t和识别Q监q人的识别和监控,钞票和票据的保安、病人和孤寡老h的监控等{?
无线传感器网l是下一代自ȝl,它将无数的集成温度感应、移动感应、放传感等{感应器的主动或者被动式RFIDQƈ且具有自ȝ|络功能。美国军方已l研I出能够在实物中发现病原体的RFID传感器原型。这可以用于寚w过食物感染疄的恐怖袭ȝ和保护?
比如NASA的Jet Propulsion Laboratory 在研究C代的无线传感器网l。在其早期的实验中,可以用于土壤和I气的温度、湿度,以及光线、水方向等{?



铁手 2005-11-15 09:28 发表评论
]]>
此Slashdot不是那个Slashdothttp://www.tkk7.com/SteelHand/archive/2005/10/19/15875.html铁手铁手Wed, 19 Oct 2005 02:14:00 GMThttp://www.tkk7.com/SteelHand/archive/2005/10/19/15875.htmlhttp://www.tkk7.com/SteelHand/comments/15875.htmlhttp://www.tkk7.com/SteelHand/archive/2005/10/19/15875.html#Feedback0http://www.tkk7.com/SteelHand/comments/commentRss/15875.htmlhttp://www.tkk7.com/SteelHand/services/trackbacks/15875.html
看到它是因ؓ在O'Reilley看到了一片关于Web 2.0的文?从该文的讨论中进来的。其作者是O'Reilly Media的掌?a >Tim O'Reilly Q旨在ؓ Web 2.0 正本清源Q?以及讨论了Y件的下一代设计模式及商业模式。非常值得一看,详细内容参见Q?a >What Is Web 2.0?br>


铁手 2005-10-19 10:14 发表评论
]]>
TOP 10 Web应用安全之一Q输入校?/title><link>http://www.tkk7.com/SteelHand/archive/2005/09/12/12727.html</link><dc:creator>铁手</dc:creator><author>铁手</author><pubDate>Mon, 12 Sep 2005 03:52:00 GMT</pubDate><guid>http://www.tkk7.com/SteelHand/archive/2005/09/12/12727.html</guid><wfw:comment>http://www.tkk7.com/SteelHand/comments/12727.html</wfw:comment><comments>http://www.tkk7.com/SteelHand/archive/2005/09/12/12727.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/SteelHand/comments/commentRss/12727.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/SteelHand/services/trackbacks/12727.html</trackback:ping><description><![CDATA[<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-pagination: widow-orphan" align=left><B><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">TOP 10 Web</SPAN></B><B><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">应用脆弱?/SPAN></B><B><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">之一Q未l验证的输入</SPAN></B><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p></o:p></SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-pagination: widow-orphan" align=left><B><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"><BR>描述</SPAN></B><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"><o:p></o:p></SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">Web </SPAN><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">应用使用<SPAN lang=EN-US>HTTP </SPAN>h<SPAN lang=EN-US>(</SPAN>也许q有文gQ也是一U特D请?SPAN lang=EN-US>) </SPAN>来进行输入,q决定如何进行响应。攻击者可以篡?SPAN lang=EN-US>HTTP </SPAN>h的Q何部分,包括<SPAN lang=EN-US>url</SPAN>Q查询字W串Q?SPAN lang=EN-US>querystring</SPAN>Q?SPAN lang=EN-US>, headers, cookies, </SPAN>表单字段Q包括隐藏字D)Q试囄q服务器的安全机制。常见的通用输入改d包括Q?SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 42pt; TEXT-INDENT: -21pt; TEXT-ALIGN: left; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-pagination: widow-orphan; mso-list: l1 level1 lfo2; tab-stops: list 42.0pt" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: Wingdings; mso-bidi-font-family: Wingdings; mso-font-kerning: 0pt; mso-fareast-font-family: Wingdings"><SPAN style="mso-list: Ignore">o<SPAN style="FONT: 7pt 'Times New Roman'">       </SPAN></SPAN></SPAN><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">览Q?SPAN lang=EN-US>forced browsing</SPAN>Q;<SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 42pt; TEXT-INDENT: -21pt; TEXT-ALIGN: left; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-pagination: widow-orphan; mso-list: l1 level1 lfo2; tab-stops: list 42.0pt" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: Wingdings; mso-bidi-font-family: Wingdings; mso-font-kerning: 0pt; mso-fareast-font-family: Wingdings"><SPAN style="mso-list: Ignore">o<SPAN style="FONT: 7pt 'Times New Roman'">       </SPAN></SPAN></SPAN><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">命o注入Q?SPAN lang=EN-US>command insertion</SPAN>Q;<SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 42pt; TEXT-INDENT: -21pt; TEXT-ALIGN: left; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-pagination: widow-orphan; mso-list: l1 level1 lfo2; tab-stops: list 42.0pt" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: Wingdings; mso-bidi-font-family: Wingdings; mso-font-kerning: 0pt; mso-fareast-font-family: Wingdings"><SPAN style="mso-list: Ignore">o<SPAN style="FONT: 7pt 'Times New Roman'">       </SPAN></SPAN></SPAN><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">交叉站点脚本Q?SPAN lang=EN-US>cross site scripting</SPAN>Q;<SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 42pt; TEXT-INDENT: -21pt; TEXT-ALIGN: left; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-pagination: widow-orphan; mso-list: l1 level1 lfo2; tab-stops: list 42.0pt" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: Wingdings; mso-bidi-font-family: Wingdings; mso-font-kerning: 0pt; mso-fareast-font-family: Wingdings"><SPAN style="mso-list: Ignore">o<SPAN style="FONT: 7pt 'Times New Roman'">       </SPAN></SPAN></SPAN><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">~冲区溢出(<SPAN lang=EN-US>buffer overflows</SPAN>Q;<SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 42pt; TEXT-INDENT: -21pt; TEXT-ALIGN: left; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-pagination: widow-orphan; mso-list: l1 level1 lfo2; tab-stops: list 42.0pt" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: Wingdings; mso-bidi-font-family: Wingdings; mso-font-kerning: 0pt; mso-fareast-font-family: Wingdings"><SPAN style="mso-list: Ignore">o<SPAN style="FONT: 7pt 'Times New Roman'">       </SPAN></SPAN></SPAN><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">格式字符串攻击(<SPAN lang=EN-US>format string attacks</SPAN>Q;<SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 42pt; TEXT-INDENT: -21pt; TEXT-ALIGN: left; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-pagination: widow-orphan; mso-list: l1 level1 lfo2; tab-stops: list 42.0pt" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: Wingdings; mso-bidi-font-family: Wingdings; mso-font-kerning: 0pt; mso-fareast-font-family: Wingdings"><SPAN style="mso-list: Ignore">o<SPAN style="FONT: 7pt 'Times New Roman'">       </SPAN></SPAN></SPAN><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">SQL</SPAN><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">注入Q?SPAN lang=EN-US>SQL injection</SPAN>Q;<SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 42pt; TEXT-INDENT: -21pt; TEXT-ALIGN: left; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-pagination: widow-orphan; mso-list: l1 level1 lfo2; tab-stops: list 42.0pt" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: Wingdings; mso-bidi-font-family: Wingdings; mso-font-kerning: 0pt; mso-fareast-font-family: Wingdings"><SPAN style="mso-list: Ignore">o<SPAN style="FONT: 7pt 'Times New Roman'">       </SPAN></SPAN></SPAN><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">有毒饼干Q?SPAN lang=EN-US>cookie poisoning</SPAN>Q;<SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 42pt; TEXT-INDENT: -21pt; TEXT-ALIGN: left; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-pagination: widow-orphan; mso-list: l1 level1 lfo2; tab-stops: list 42.0pt" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: Wingdings; mso-bidi-font-family: Wingdings; mso-font-kerning: 0pt; mso-fareast-font-family: Wingdings"><SPAN style="mso-list: Ignore">o<SPAN style="FONT: 7pt 'Times New Roman'">       </SPAN></SPAN></SPAN><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">隐藏字段操作Q?SPAN lang=EN-US>hidden field manipulation</SPAN>Q,{等?SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"><o:p> </o:p></SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-pagination: widow-orphan" align=left><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">某些站点试图通过qo恶意输入来保护自己。但问题是编码信息的方式无穷无尽。这些编码方式看hq不是加密的Q所以似乎也用不着解码。但是,开发h员仍然经常忘记将所有的参数在用之前解码ؓ最单的形式。参数应该在其被校验之前转换为最单的形式Q否则,恶意输入可能掩饰自׃而流q过滤器。简化这些编码的q程UCؓ是“规格化Q?SPAN lang=EN-US>canonicalization</SPAN>Q”。因为几乎所有的<SPAN lang=EN-US>HTTP </SPAN>输入都可以编码ؓ多种格式Q这U技术便可以打ؕ各种旨在利用和攻Mq弱点的d行ؓ。这使得qo非常困难?SPAN lang=EN-US> <o:p></o:p></SPAN></SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-pagination: widow-orphan" align=left><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">有非怹多的<SPAN lang=EN-US>web </SPAN>应用仅用客L校验来验证输入。客L校验机制是非常容易绕q的Q这样就使得<SPAN lang=EN-US>Web</SPAN>应用几乎Ҏ意参数的d毫无保护。攻击者可以用攻ȝ?SPAN lang=EN-US>telnet</SPAN>来生他们自q<SPAN lang=EN-US>HTTP </SPAN>h。他们才不关心开发h员预定想要在客户端发生的时候事情呢。注意,客户端校验仅仅在提高性能和可用性方面有益,但是它毫无安全可a。因此,对于恶意参数dQ服务器端校验是必须的?SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-pagination: widow-orphan" align=left><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">q种d的数量在不断上升Q因为有大量的支持参数的“模p化”(<SPAN lang=EN-US>“fuzzing?/SPAN>Q、腐朽(<SPAN lang=EN-US>corruption</SPAN>Q、以及野蛮强制增长的工具出现。不应该低估了这些用非校验输入q行d的媄响。实际上如果开发h员能够在使用参数之前对其q行验证Q就可抵挡大部分的攻凅R因此,最好用一个中心化的、强大的验证机制来对所?SPAN lang=EN-US>HTTP </SPAN>h的输入都q行验证Q这样利用此qq行d的数量就会大减?SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-pagination: widow-orphan" align=left><B><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"><BR>环境影响<SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></B></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-pagination: widow-orphan" align=left><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">所?SPAN lang=EN-US>web servers, application servers, </SPAN>以及应用环境都容易受到这U参数篡改的d?SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-pagination: widow-orphan" align=left><B><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"><BR>如何军_你的应用是否脆弱<SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></B></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-pagination: widow-orphan" align=left><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">一?SPAN lang=EN-US>Web</SPAN>应用所用的未经验证?SPAN lang=EN-US>HTTP</SPAN>h的Q何和部分都称为是“脏?参数。找参数的最单的方式是进行最详细的代码评审,扑և所有从<SPAN lang=EN-US>HTTP</SPAN>h提取信息的方法调用。比如,?SPAN lang=EN-US>J2EE</SPAN>应用中,q些包括<SPAN lang=EN-US>HttpServletRequest </SPAN>c(以及其子c)中的Ҏ。然后你可以@着代码查看参数变量是在哪里使用的。如果变量在使用之前未作验证Q这可能是一个潜在的问题。在<SPAN lang=EN-US>Perl</SPAN>中,你因该考虑使用<SPAN lang=EN-US> “taint?(-T) </SPAN>选项?SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-pagination: widow-orphan" align=left><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">你也可以通过一些工h扑և脏参敎ͼ比如<SPAN lang=EN-US>OWASP</SPAN>?SPAN lang=EN-US> WebScarab</SPAN>。它们可以查看和评审通过<SPAN lang=EN-US>HTTP/HTTPS</SPAN>的所有数据,q进行分析?SPAN lang=EN-US><BR style="mso-special-character: line-break"><BR style="mso-special-character: line-break"><o:p></o:p></SPAN></SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-pagination: widow-orphan" align=left><B style="mso-bidi-font-weight: normal"><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">如何保护<SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></B></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-pagination: widow-orphan" align=left><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">保护很简单,那就是确保Q何参数在被用之前都q行了验证。最好的办法是用一个中心化的组件库Q比?SPAN lang=EN-US>Java</SPAN>中的<SPAN lang=EN-US>Jarkarta Commons Validator.</SPAN>每个参数都演q行严格查。涉及到qo脏数据的“负面”方法或者依赖于{֐的方法都不可能很有效率,q且难以l护?SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-pagination: widow-orphan" align=left><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">参数应该q行“正向”规格的查,正向规格Q?SPAN lang=EN-US> “positive?specification </SPAN>Q的定义可包括:<SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></P> <UL type=disc> <li id="trzvff9" class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-pagination: widow-orphan; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt"><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">数据cd<SPAN lang=EN-US>(string, integer, real, </SPAN>{?SPAN lang=EN-US>)<o:p></o:p></SPAN></SPAN> <li id="bblx9z9" class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-pagination: widow-orphan; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt"><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">允许的字W集<SPAN lang=EN-US><o:p></o:p></SPAN></SPAN> <li id="j7vbvtj" class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-pagination: widow-orphan; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt"><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">最大最长?SPAN lang=EN-US><o:p></o:p></SPAN></SPAN> <li id="fjh7x3z" class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-pagination: widow-orphan; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt"><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">是否允许<SPAN lang=EN-US>null<o:p></o:p></SPAN></SPAN> <li id="d1fhtrp" class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-pagination: widow-orphan; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt"><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">是否必需<SPAN lang=EN-US><o:p></o:p></SPAN></SPAN> <li id="p1zfpb7" class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-pagination: widow-orphan; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt"><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">是否允许重复<SPAN lang=EN-US><o:p></o:p></SPAN></SPAN> <li id="7hbvxt7" class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-pagination: widow-orphan; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt"><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">数D?SPAN lang=EN-US><o:p></o:p></SPAN></SPAN> <li id="ht7pblv" class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-pagination: widow-orphan; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt"><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">特定的法定?SPAN lang=EN-US> (</SPAN>枚D<SPAN lang=EN-US>)<o:p></o:p></SPAN></SPAN> <li id="rz79nrt" class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-pagination: widow-orphan; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt"><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">特定模式<SPAN lang=EN-US>(</SPAN>正则表达?SPAN lang=EN-US>)<o:p></o:p></SPAN></SPAN></LI></UL> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><o:p> * 本系列整理自 OWASPQOpensource Web Applicaiton Security Project Q?/o:p></SPAN></P><img src ="http://www.tkk7.com/SteelHand/aggbug/12727.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/SteelHand/" target="_blank">铁手</a> 2005-09-12 11:52 <a href="http://www.tkk7.com/SteelHand/archive/2005/09/12/12727.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>EJB 3.0 vs Springhttp://www.tkk7.com/SteelHand/archive/2005/07/15/7762.html铁手铁手Fri, 15 Jul 2005 04:23:00 GMThttp://www.tkk7.com/SteelHand/archive/2005/07/15/7762.htmlhttp://www.tkk7.com/SteelHand/comments/7762.htmlhttp://www.tkk7.com/SteelHand/archive/2005/07/15/7762.html#Feedback3http://www.tkk7.com/SteelHand/comments/commentRss/7762.htmlhttp://www.tkk7.com/SteelHand/services/trackbacks/7762.html  OnJava上看C文章,贴在q里Q做上笔记?/FONT>

Albert Einstein once said, "Everything should be made as simple as possible, but not simpler." Q哈哈,相对论再单,也会令不知多感到头痛,包括我?IMG height=20 src="http://www.tkk7.com/Emoticons/QQ/09.gif" width=20 border=0>Q?/FONT>Indeed, the pursuit of scientific truth has been all about simplifying a theory's underlying assumptions so that we can deal with the issues that really matter. The same can be said for enterprise software development.

A key to simplifying enterprise software development is to provide an application framework that hides complexities (such as transaction, security, and persistence) away from the developers. A well-designed framework promotes code reuse, enhances developer productivity, and results in better software quality. However, the current EJB 2.1 framework in J2EE 1.4 is widely considered poorly designed and over-complicatedQ复杂是对的Q设计倒未必差。). Unsatisfied with the EJB 2.1 framework, Java developers have experimented with a variety of other approaches for middleware services delivery. Most noticeably, the following two frameworks have generated a lot of developer interest and positive feedback. They are posed to become the frameworks of choice for future enterprise Java applications.

  • The Spring framework is a popular but non-standard open source framework. It is primarily developed by and controlled by Interface21 Inc. The architecture of the Spring framework is based upon the Dependency Injection (DI) design pattern. Spring can work standalone or with existing application servers and makes heavy use of XML configuration files. Qؓ什么就让Springg赶上春天了?其实DI在很多地斚w用到了,其实Q应该是说Spring 用DI来解决Factory的依赖性问题,q点占得先机。)
  • The EJB 3.0 framework is a standard framework defined by the Java Community Process (JCP) and supported by all major J2EE vendors. Open source and commercial implementations of pre-release EJB 3.0 specifications are already available from JBoss and Oracle. EJB 3.0 makes heavy use of Java annotations.Q?STRONG>要是抢标准,Jboss昄不是Oracle的对手,q不JavaOne之后QOracle在这上面领先了。这下,Oracleq同它独步天下的DBQ加上这么一个持久层东西Q很是了得。这POralce今后Q会不会形成JSF(ADF Faces)+EJB3的格局Q在J2EE上来那么一个o人吃惊呢QIBM帕不怕?不知道,它和BEA搞的SDO也提CJCPQ不q不知前景如何?哪天Q抽旉仔细看看。)

These two frameworks share a common core design philosophy: they both aim to deliver middleware services to loosely coupled plain old Java objects (POJOs). Q?STRONG>POJO是个奇怪的名字Q其中第一个O字母Q就令h奇怪。呵呵,谁说老树不能开新花Q这下要是搞的风水轮{Q就有好戏看?/FONT>?IMG height=20 src="http://www.tkk7.com/Emoticons/QQ/14.gif" width=20 border=0>QThe framework "wires" application services to the POJOs by intercepting the execution context or injecting service objects to the POJO at runtime. The POJOs themselves are not concerned about the "wiring" and have little dependency upon the framework. As a result, developers can focus on the business logic, and unit test their POJOs without the framework. In addition, since POJOs do not need to inherit from framework classes or implement framework interfaces, the developers have a high degree of flexibility to build inheritance structures and construct applications.Q?FONT color=#ff1493>有点包办婚姻的感觉,Ҏ是q些POJO的父母。L要等到最后,才知道和自己有关pȝ东西是谁。是谁的悲哀Q没有,但愿皆大Ƣ喜。)
其实Q轻量架构和敏捷Ҏ的火爆主要来源于几个主要的原因:1Q程序员自n的武侠主义者,呵呵Q也可说英雄M。L什么都会,认ؓ武功天下W一Q就是懂得更多的语言Q从需求、分析、设计、测试到部vQ无所不通,多多益善。当然这也是生存压力的后果?BR>2 SUN曄设想QJ2EE是一个重量的团队协作的开发方式,可是大大Zh意料Q这U方式要求很高的软g工程水^Q同时支撑它的同栯重量的过E模型,比如RUP什么的。但是大型的分布式应用毕竟是数Q中企业的信息化应用才是主。而且QMS的解x案,从过EMSF刎ͼ .Net和开发环境VSQ无一不在生力方面占得先机。老大Q要CQ用h量最所的才是市场?BR>3 Z开发成本考虑Q老板L希望工程师无所不会Q这h能减成本嘛Q!才会出现很多招聘q告上这样写道“精通A,B,C,D,E。。。。,工作l验2q”薪水却只开?K。这L事天天发生。是觉得可笑吗?q是觉得悲哀。是觉得Z部门的问题,q是该公司的技术管理着Ҏ׃懂。或者就是老板的问题。不Q这是市场的问题。同一个YӞ规模和功能几乎一P在国内卖?0万,很高了,在英国却卖到60万英镑。呵呵,q就是市场。市场就l对正确吗?可是房h天天涨,现在毕业的程序员Q看着房h怎的不愁QNND.
hehe, 跑题了。。。。。。。。。。。。。?BR>

However, while sharing an overall philosophy, the two frameworks use very different approaches to deliver POJO services. While numerous books and articles have been published to compare either Spring or EJB 3.0 to the old EJB 2.1, no serious study has been done to compare Spring to EJB 3.0. In this article, I will examine some key differences behind the Spring and EJB 3.0 frameworks, and discuss their pros and cons. The topics covered in this article also apply to other lesser-known enterprise middleware frameworks, as they all converge on the "loosely coupled POJO" design. I hope this article will help you choose the best framework for your needs.

Vendor Independence

One of the most compelling reasons for developers to choose the Java platform is its vendor independence. EJB 3.0 is an open standard designed for vendor independence. The EJB 3.0 specification is developed and supported by all major open source and commercial vendors in the enterprise Java community. The EJB 3.0 framework insulates developers from application server implementations. For instance, while JBoss's EJB 3.0 implementation is based on Hibernate, and Oracle's is based on TopLink, developers need to learn neither Hibernate- nor TopLink-specific APIs to get their applications running on JBoss and Oracle. Vendor independence differentiates the EJB 3.0 framework from any other POJO middleware frameworks available today.Q?STRONG>其实q点也是见仁见智了,M走着瞧?/FONT>Q?/P>

However, as many EJB 3.0 critics are quick to point out, the EJB 3.0 specification has not yet reached the final release at the time of this writing. It will likely be another one to two years before EJB 3.0 is widely adopted by all major J2EE vendors. But even if your application server does not yet support EJB 3.0 natively, you can still run EJB 3.0 applications in the server by downloading and installing an "embeddable" EJB 3.0 product. For instance, the JBoss embeddable EJB 3.0 product is open source and runs in any J2SE-5.0-compatible environment (i.e., in any Java application server). It is currently under beta testing. Other vendors may also soon release their own embeddable EJB 3.0 products, especially for the "data persistence" part of the specification.Q?FONT color=#ff1493>恐怕还是不好吧Q一锅烩Q前些天看Walmartq移到Java5Q真够大胆的?/EM>Q?/P>

On the other hand, Spring has always been a non-standard technology and will remain that way in the foreseeable future. Although you can use the Spring framework with any application server, Spring applications are locked into both Spring itself and the specific services you choose to integrate in Spring.Q?STRONG>其实Q标准不标准Q不是JCP说了的。是大家多了的?/FONT>Q?/P>

  • While the Spring framework is an open source project, Spring has a proprietary XML format for configuration files and a proprietary programming interface. Of course, this type of lock-in happens to any non-standard product; it is not specific to Spring. But still, the long-term viability of your Spring application depends on the health of the Spring project itself (or Interface21 Inc., which hires most of Spring's core developers). In addition, if you use any of the Spring-specific services, such as the Spring transaction manager or Spring MVC, you are locked into those APIs as well.
  • Spring applications are not agnostic to back-end service providers, either. For instance, for data persistence services, the Spring framework comes with different DAO and template helper classes for JDBC, Hibernate, iBatis, and JDO. So if you need to switch the persistence service provider (e.g., change from JDBC to Hibernate) for a Spring application, you will need to refactor your application code to use the new helper classes.Q?STRONG>q点是我的最爱,Spring对谁都很友好Q也怹包括q里的EJB3。)

Service Integration

From a very high level, the Spring framework sits above application servers and service libraries. The service integration code (e.g., data access templates and helper classes) resides in the framework and is exposed to the application developers. In contrast, the EJB 3.0 framework is tightly integrated into the application server and the service integration code is encapsulated behind a standard interface.

As a result, EJB 3.0 vendors can aggressively optimize the overall performance and developer experience. For instance, in JBoss's EJB 3.0 implementation, when you persist an Entity Bean POJO using the EntityManager, the underlying Hibernate session transaction is automatically tied to the calling method's JTA transaction, and it commits when the JTA transaction commits. Using a simple @PersistenceContext annotation (see later in this article for an example), you can even tie the EntityManager and its underlying Hibernate transaction to an application transaction in a stateful session bean. The application transaction spans across multiple threads in a session and it is very useful in transactional web applications, such as multi-page shopping carts. The above simple and integrated programming interface is made possible due to the tight integration between the EJB 3.0 framework, Hibernate, and Tomcat inside of JBoss. A similar level of integration is also archived between Oracle's EJB 3.0 framework and its underlying Toplink persistence service.

Another good example of integrated services in EJB 3.0 is clustering support. If you deploy an EJB 3.0 application in a server cluster, all of the fail-over, load-balancing, distributed cache, and state replication services are automatically available to the application.Q这恐怕不是EJB3的原因吧Q) The underlying clustering services are hidden behind the EJB 3.0 programming interface and they are completely transparent to EJB 3.0 developers.

In Spring, it is more difficult to optimize the interaction between the framework and the services. For instance, in order to use Spring's declarative transaction service to manage Hibernate transactions, you have to explicitly configure the Spring TransactionManager and Hibernate SessionFactory objects in the XML configuration file. Spring application developers must explicitly manage transactions that span across several HTTP requests. In addition, there is no simple way to leverage clustering services in a Spring application.

(其实Q通过annotation 扩展了语义,而Spring 实用常规手Dc这点出发点都不一栗?

Flexibility in Service Assembly

Since the service integration code in Spring is exposed as part of the programming interface, application developers have the flexibility to assemble services as needed. This feature enables you to assemble your own "lightweight" application servers. A common usage of Spring is to glue Tomcat together with Hibernate to support simple database-driven web applications. In this case, Spring itself provides transaction services and Hibernate provides persistence services--this setup creates a mini application server Q?STRONG>q个观点倒是新鲜Q?/FONT>in itself.

EJB 3.0 application servers typically do not give you that kind of flexibility in picking and choosing on the services you need. Most of the time, you get a set of prepackaged features, some of which you might not need. However, if the application server features a modular internal design, as JBoss does, you might be able to take it apart and strip out the unnecessary features. In any case, it is not a trivial exercise to customize a full-blown application server.

Of course, if the application scales beyond a single node, you would need to wire in services (such as resource pooling, message queuing, and clustering) from regular application servers. The Spring solution would be just as "heavyweight" as any EJB 3.0 solution, in terms of the overall resource consumption.

Q当ӞSPring 本n׃是针对分布式的应用需求,也不支持。所以,没必要这么比。关键是看针寚w些应用。)
In Spring, the flexible service assembly also makes it easy to wire mock objects, QFor TestingQinstead of real service objects, into the application for out-of-the-container unit testing. In EJB 3.0 applications, most components are simple POJOs, and they can be easily tested outside of the container. But for tests that involve container service objects (e.g., the persistence EntityManager), in-container tests are recommended, as they are easier, more robust, and more accurate than the mock objects approach.(当然Q脱不脱d器的试其实对大家ƈ不重要,关键是要单,快速!)

XML Versus Annotation

From the application developer's point view, Spring's programming interface is primarily based upon XML configuration files while EJB 3.0 makes extensive use Java annotations. XML files can express complex relationships, but they are also very verbose and less robust. Annotations are simple and concise, but it is hard to express complex or hierarchical structures in annotations.Q?STRONG>所以需要简化Spring 的XML语法Q尽我已经觉得很简单了。比起Struts之类的已l简单不了。)

Spring and EJB 3.0's choices of XML or annotation depend upon the architecture behind the two frameworks: since annotations can only hold a fairly small amount of configuration information, only a pre-integrated framework (i.e., most of plumbing has been done in the framework) can make extensive use of annotations as its configuration option. As we discussed, EJB 3.0 meets this requirement, while Spring, being a generic DI framework, does not.Q谁知道Q以后Spring 会不会也Anotation一?我觉得很可能会。)

Of course, as both EJB 3.0 and Spring evolve to learn from each other's best features, they both support XML and annotations to some degree. For instance, XML configuration files are available in EJB 3.0 as an optional overriding mechanism to change the default behavior of annotations. Annotations are also available to configure some Spring services.

The best way to learn the differences between the XML and annotation approaches is through examples. In the next several sections, let's examine how Spring and EJB 3.0 provide key services to applications.
 

Declarative Services

Spring and EJB 3.0 wire runtime services (such as transaction, security, logging, messaging, and profiling services) to applications. Since those services are not directly related to the application's business logic, they are not managed by the application itself. Instead, the services are transparently applied by the service container (i.e., Spring or EJB 3.0) to the application at runtime. The developer (or administrator) configures the container and tells it exactly how/when to apply services.Q?STRONG>AOP的天?/FONT>Q?BR>

EJB 3.0 configures declarative services using Java annotations, while Spring uses XML configuration files. In most cases, the EJB 3.0 annotation approach is the simpler and more elegant way for this type of services. Here is an example of applying transaction services to a POJO method in EJB 3.0.


public class Foo {
    
    @TransactionAttribute(TransactionAttributeType.REQUIRED)
    public bar () {
      // do something ...
    }    
}

You can also declare multiple attributes for a code segment and apply multiple services. This is an example of applying both transaction and security services to a POJO in EJB 3.0.


@SecurityDomain("other")
public class Foo {
    
    @RolesAllowed({"managers"})
    @TransactionAttribute(TransactionAttributeType.REQUIRED)
    public bar () {
      // do something ...
    }   
}

Using XML to specify code attributes and configure declarative services could lead to verbose and unstable configuration files. Below is an example of XML elements used to apply a very simple Hibernate transaction to the Foo.bar() method in a Spring application.


<!-- Setup the transaction interceptor -->
<bean id="foo" 
  class="org.springframework.transaction
        .interceptor.TransactionProxyFactoryBean">
    
    <property name="target">
        <bean class="Foo"/>
    </property>
    
    <property name="transactionManager">
        <ref bean="transactionManager"/>
    </property>
    
    <property name="transactionAttributeSource">
        <ref bean="attributeSource"/>
    </property>
</bean>

<!-- Setup the transaction manager for Hibernate -->
<bean id="transactionManager" 
  class="org.springframework.orm
         .hibernate.HibernateTransactionManager">
    
    <property name="sessionFactory">
        <!-- you need to setup the sessionFactory bean in 
             yet another XML element -- omitted here -->
        <ref bean="sessionFactory"/>
    </property>
</bean>

<!-- Specify which methods to apply transaction -->
<bean id="transactionAttributeSource"
  class="org.springframework.transaction
         .interceptor.NameMatchTransactionAttributeSource">
  
    <property name="properties">
        <props>
            <prop key="bar">
        </props>
    </property>
</bean>

QEJB的方式的简单,可是如果复杂度上升,恐怕优势也不怎么明显了。)

The XML complexity would grow geometrically if you added more interceptors (e.g., security interceptors) to the same POJO. Realizing the limitations of XML-only configuration files, Spring supports using Apache Commons metadata to specify transaction attributes in the Java source code. In the latest Spring 1.2, JDK-1.5-style annotations are also supported. Q对啦,也许今后是个方向Q学习是很重要的Q?/EM>QTo use the transaction metadata, you need to change the above transactionAttributeSource bean to an AttributesTransactionAttributeSource instance and add additional wirings for the metadata interceptors.
QSpring的一个问题是各种名称都不肯羃写,弄的老长。当Ӟ意思更加清楚明了。)


<bean id="autoproxy"
    class="org.springframework.aop.framework.autoproxy
           .DefaultAdvisorAutoProxyCreator"/>
<bean id="transactionAttributeSource"
    class="org.springframework.transaction.interceptor
           .AttributesTransactionAttributeSource"
    autowire="constructor"/>
<bean id="transactionInterceptor"
    class="org.springframework.transaction.interceptor
           .TransactionInterceptor"
    autowire="byType"/>
<bean id="transactionAdvisor"
    class="org.springframework.transaction.interceptor
           .TransactionAttributeSourceAdvisor"
    autowire="constructor"/>
<bean id="attributes"
    class="org.springframework.metadata.commons
           .CommonsAttributes"/>

The Spring metadata simplifies the transactionAttributeSource element when you have many transactional methods. But it does not solve the fundamental problems with XML configuration files--the verbose and fragile transaction interceptor, transactionManager, and transactionAttributeSource are all still needed.

Dependency Injection


Q这q头松散耦合q么行Q就像男奛_pM_一夜情好生行似的。我们先前说的婚姻,恐怕也片面了些。各U滋呛_含义Q大家自׃会吧。)

A key benefit of middleware containers is that they enable developers to build loosely coupled applications. The service client only needs to know the service interface. The container instantiates service objects from concrete implementations and make them available to clients. This allows the container to switch between alternative service implementations without changing the interface or the client-side code.

The Dependency Injection pattern is one of best ways to implement loosely coupled applications. It is much easier to use and more elegant than older approaches, such as dependency lookup via JNDI or container callbacks. Using DI, the framework acts as an object factory to build service objects and injects those service objects to application POJOs based on runtime configuration. From the application developer's point of view, the client POJO automatically obtains the correct service object when you need to use it.

Both Spring and EJB 3.0 provide extensive support for the DI pattern. But they also have some profound differences. Spring supports a general-purpose, but complex, DI API based upon XML configuration files; EJB 3.0 supports injecting most common service objects (e.g., EJBs and context objects) and any JNDI objects via simple annotations.

The EJB 3.0 DI annotations are extremely concise and easy to use. The @Resource tag injects most common service objects and JNDI objects. The following example shows how to inject the server's default DataSource object from the JNDI into a field variable in a POJO. DefaultDS is the JNDI name for the DataSource. The myDb variable is automatically assigned the correct value before its first use.
(JNDI仍然可以玩,只不qlookup也由容器代劳了。精彩!Q这对移植更加方便了)


public class FooDao {

    @Resource (name="DefaultDS")
    DataSource myDb;
    
    // Use myDb to get JDBC connection to the database
}

In addition to direct field variable injection, the @Resource annotation in EJB 3.0 can also be used to inject objects via a setter method. For instance, the following example injects a session context object. The application never explicitly calls the setter method--it is invoked by the container before any other methods are called.


@Resource 
public void setSessionContext (SessionContext ctx) { 
    sessionCtx = ctx; 
} 

For more complex service objects, special injection annotations are defined. For instance, the @EJB annotation is used to inject EJB stubs and the @PersistenceContext annotation is used to inject EntityManager objects, which handle database access for EJB 3.0 entity beans. The following example shows how to inject an EntityManager object into a stateful session bean. The @PersistenceContext annotation's type attribute specifies that the injected EntityManager has an extended transaction context--it does not automatically commit with the JTA transaction manager, and hence it can be used in an application transaction that spans across multiple threads in a session.
Q这里才是EJB的关键。)


@Stateful public class FooBean implements Foo, Serializable { @PersistenceContext( type=PersistenceContextType.EXTENDED ) protected EntityManager em; public Foo getFoo (Integer id) { return (Foo) em.find(Foo.class, id); } }

The EJB 3.0 specification defines server resources that can be injected via annotations. But it does not support user-defined application POJOs to be injected into each other.

In Spring, you first need to define a setter method (or constructor with arguments) for the service object in your POJO. The following example shows that the POJO needs a reference to the Hibernate session factory.


public class FooDao {
    
    HibernateTemplate hibernateTemplate;
    
    public void setHibernateTemplate (HibernateTemplate ht) {
        hibernateTemplate = ht;
    }
    
    // Use hibernateTemplate to access data via Hibernate
    public Foo getFoo (Integer id) {
        return (Foo) hibernateTemplate.load (Foo.class, id);
    }
}

Then, you can specify how the container gets the service object and wire it to the POJO at runtime through a chain of XML elements. The following example shows the XML element that wires a data source to a Hibernate session factory, the session factory to a Hibernate template object, and finally, the template object to the application POJO. Part of the reason for the complexity of the Spring code is the fact that we need to inject the underlying Hibernate plumbing objects manually, where the EJB 3.0 EntityManager is automatically managed and configured by the server. But that just brings us back to the argument that Spring is not as tightly integrated with services as EJB 3.0 is.


<bean id="dataSource" 
  class="org.springframework
         .jndi.JndiObjectFactoryBean">
    <property name="jndiname">
        <value>java:comp/env/jdbc/MyDataSource</value>
    </property>
</bean>

<bean id="sessionFactory" 
  class="org.springframework.orm
         .hibernate.LocalSessionFactoryBean">
    <property name="dataSource">
        <ref bean="dataSource"/>
    </property>
</bean>

<bean id="hibernateTemplate" 
  class="org.springframework.orm
         .hibernate.HibernateTemplate">
    <property name="sessionFactory">
        <ref bean="sessionFactory"/>
    </property>    
</bean>

<bean id="fooDao" class="FooDao">
    <property name="hibernateTemplate">
        <ref bean="hibernateTemplate"/>
    </property>
</bean>

<!-- The hibernateTemplate can be injected
        into more DAO objects -->

Although the XML-based Dependency Injection syntax in Spring is complex, it is very powerful. Q正因如此,才和其它框架和遗恨好的集成,q样Q架构就有更多选择?/FONT>Q?/STRONG>You can inject any POJO, including the ones defined in your applications, to another POJO. If you really want to use Spring's DI capabilities in EJB 3.0 applications, you can inject a Spring bean factory into an EJB via the JNDI. Q?STRONG>q样INDI也是老树新花。当然JNDI的用处大了,JavaEE不可能丢了他?/FONT>QIn some EJB 3.0 application servers, the vendor might define extra non-standard APIs to inject arbitrary POJOs. A good example is the JBoss MicroContainer, which is even more generic than Spring, as it handles Aspect-Oriented Programming (AOP) dependencies.

Conclusions

Although Spring and EJB 3.0 both aim to provide enterprise services to loosely coupled POJOs, they use very different approaches to archive this goal. Dependency Injection is a heavily used pattern in both frameworks.

With EJB 3.0, the standards-based approach, wide use of annotations, and tight integration with the application server all result in greater vendor independence and developer productivity. With Spring, the consistent use of dependency injection and the centralized XML configuration file allow developers to construct more flexible applications and work with several application service providers at a time.

Q各有所ѝEJBq是针对高端QSpring针对低端Q中间一部分重合Q大家两全其?/EM>

q篇文章在OnJava一骂壎ͼq是开源的同志们比较多ѝ)

Acknowledgments

The author would like to thank Stephen Chambers, Bill Burke, and Andy Oliver for valuable comments.

Resources



铁手 2005-07-15 12:23 发表评论
]]>StrutsU籍之第2D:W?.7式: 动态生JavaScripthttp://www.tkk7.com/SteelHand/archive/2005/06/07/5654.html铁手铁手Tue, 07 Jun 2005 04:32:00 GMThttp://www.tkk7.com/SteelHand/archive/2005/06/07/5654.htmlhttp://www.tkk7.com/SteelHand/comments/5654.htmlhttp://www.tkk7.com/SteelHand/archive/2005/06/07/5654.html#Feedback3http://www.tkk7.com/SteelHand/comments/commentRss/5654.htmlhttp://www.tkk7.com/SteelHand/services/trackbacks/5654.htmlW?.7? 动态生JavaScript

问题

你想要根据从应用模型获得的数据动态生JavaScript?/P>

动作要领

使用Struts 标签在你惌包含在HTML中的JavaScript 代码中渲染数据:

<script language="JavaScript">
    
function showMessage(  ) {
        alert( 
"Hello, <bean:write name='myForm' property='name'/>!" );
    }

</script>

 

动作变化

上述Ҏ产生了一个JavaScript 函数Q弹Z个消息框Q消息文本ؓ"Hello, name!" name的值是使用bean:write标签产生的。此Ҏ展示了用Struts 标签创徏JavaScript 和它们创建HTML一LҎ?/P>

JSTL也可以按q种方式使用?/P>

虽然q种Ҏ很明显,但是很奇怪很多h都在问这个问题。通常问题q可能是Q?我如何才能从Struts中调用HTML中的JavaScript 函数Q? 技术上Ԍ你ƈ不能从Struts调用一个HTML面中的JavaScript 函数。Struts 和JSP 技术都q行在服务器端。相反,JavaScript是在客L的浏览器中处理的。但是,通过q里所q的动态生JS的能力,基本上还是相当于所需的这个行为?/P>

q个Ҏ的一个重要基是JSP的{换过E。JSP 面由JSP 声明Q标准JSP 标签 (比如jsp:useBean), 定制JSP 标签(比如Struts 和JSTP 标签), q行是表辑ּQ以及脚本小E序QscriptletsQ组成。除此之外的其他东西都是模板文本Q?A name=jakartastrutsckbk-CHP-3-ITERM-1548>template textQ?/EM>模板文本可以是Q何不会被JSP转换处理的内宏Vh们通常会认为模板文本就是HTML 标记Q但是它其实是JavaScript 或者其他非JSP 处理的文本。JSP 译器ƈ不关心模板文本采用何UŞ式。因此,你可以象在HTML元素中生文本一样容易地在JavaScript 函数中生文本?/P>

如果你用JSP 来生良构的Qwell-formedQ?A name=jakartastrutsckbk-CHP-3-ITERM-1550>XHTML, 那么动态JavaScript 模版文本必须使用jsp:text元素和CDATA section的方式结合来指定。具体信息参见Hans Bergsten的ONJava 文章Q?A >http://www.onjava.com/pub/a/onjava/2004/04/21/JSP2part3.html?/P>

q里的例子仅仅列Z很简单的使用场景。如果要讉K的模型数据需要用复杂的JavaScript数据l构Q比如,数组Q你可以使用q代标签Q比?A name=jakartastrutsckbk-CHP-3-ITERM-1552>logic:iterate?A name=jakartastrutsckbk-CHP-3-ITERM-1554>c:forEach来组装这些结构?/P>

相关动作

下一?.8或会使用q代标签来生客L的JavaScript 数组?/P>

铁手 2005-06-07 12:32 发表评论
]]>
Web和Services, 能؜Z谈吗Q?/title><link>http://www.tkk7.com/SteelHand/archive/2005/05/30/5328.html</link><dc:creator>铁手</dc:creator><author>铁手</author><pubDate>Mon, 30 May 2005 05:16:00 GMT</pubDate><guid>http://www.tkk7.com/SteelHand/archive/2005/05/30/5328.html</guid><wfw:comment>http://www.tkk7.com/SteelHand/comments/5328.html</wfw:comment><comments>http://www.tkk7.com/SteelHand/archive/2005/05/30/5328.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/SteelHand/comments/commentRss/5328.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/SteelHand/services/trackbacks/5328.html</trackback:ping><description><![CDATA[以下?span class="bannerdescription">Ted Neward的一个blogQ旨在陈清多q来一直可能؜淆的概念Q即“Web Services”是一个东西吗Q?br> 他认?其实Z可能都؜淆了QWeb代表的是互操作性,而Services则是代表一U设计理念,即独立的、自ȝ、无耦合的组件模型。而“Web Service”仅是其中的一U结合方案而已?br> 颇有见地?br> 下面是摘录的原文Q其中精彩之处予以标出:原文可访?http://www.neward.net/ted/weblog/index.jsp?date=20050525#1117011754831<br> <br> </span> <p class="MsoNormal" style="text-align: left;" align="left"><a name="1117011754831"><b><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">Web + Services</span></b></a><span style=""></span><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US"> <o:p></o:p></span></p> <p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">A lot has been written recently about Service-Orientation and Web services and REST and the massive amounts of confusion that seem to be surrounding the whole subject. After much navel-contemplation, I'm convinced that the root of the problem is that there's two entirely orthogonal concepts that are being tangled up together, and that we need to tease them apart if we're to make any sense whatsoever out of the whole mess. (And it's necessary, I think, to make sense out of it, or else we're going to find ourselves making a <st1:place w:st="on">LOT</st1:place> of bad decisions that will come to haunt us over the next five to ten years.)<o:p></o:p></span></p> <p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">The gist of the idea is simple: that in the term "Web services", there are two basic concepts we keep mixing up and confusing. "Web", meaning interoperability across languages, tools and platforms, and "services", meaning a design philosophy seeking to correct for the flaws we've discovered with distributed objects and components. These two ideas, while definitely complementary, stand alone, and a quick examination of each reveals this.<o:p></o:p></span></p> <p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">Interoperability, as an idea, only requires that programs be written with an eye towards doing things that don't exclude any one platform, tool or technology from playing on the playground with the other kids. <b style=""><i style="">For example, <span style="color: red;">interoperability is easy if we use text-based protocols, since everybody knows how to read and write text</span></i></b>; hence, HTTP and SMTP and POP3 are highly-interoperable protocols, but DCOM's MEOW or Java's JRMP protocols aren't, since each relies on sending binary little-endian or big-endian-encoded data. Interoperability isn't necessarily a hard thing to achieve, but it requires an attention to low-level detail that most developers want to avoid. (This desire to avoid low-level details isn't a criticism--it's our ability to avoid that kind of detail that allows us to write larger- and larger-scale systems in the first place.)<o:p></o:p></span></p> <p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">This "<b style=""><i style=""><span style="color: red;">seeking to avoid exclusion"</span></i></b> requirement for interoperability is why we like using XML so much. Not only is it rooted in plain-text encoding, which makes it relatively easy to pass around multiple platforms, but its ubiquity makes it something that we can reasonably expect to be easily consumed in any given language or platform. Coupled with recent additions to build higher-order constructs on top of XML, we have a pretty good way of representing data elements in a way that lots of platforms can consume. Does interoperability <i>require</i> XML to work? Of course not. We've managed for the better part of forty years to interoperate without XML, and we probably could have kept on doing quite well without it; X<b style=""><i style=""><span style="color: red;">ML makes things easier, nothing more.<o:p></o:p></span></i></b></span></p> <p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">Services, on the other hand, is a <b style=""><i style=""><span style="color: red;">design philosophy</span></i></b> that seeks to correct for the major failures in distributed object and distributed component design. It's an attempt to <b style=""><i style=""><span style="color: red;">create "things" that are more reliable to outages, more secure, and more easily versioned and evolvable, things that objects/components never really addressed or solved.<o:p></o:p></span></i></b></span></p> <p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">For example, building services to be autonomous (as per the "Second Tenet of Service-Orientation", as coined by Mr. Box) means that the service has to<b style=""><i style=""><span style="color: red;"> recognize that it stands alone</span></i></b>, and <b style=""><i style=""><span style="color: red;">minimize its dependencies</span></i></b> on other "things" where possible. Too much dependency in distributed object systems meant that if any one cog in the machine were to go out for some reason, the entire thing came grinding to a halt, a particularly wasteful exercise when over three-quarters of the rest of the code really had nothing to do with the cog that failed. But, because everything was synchronous RPC client/server calls, one piece down somewhere on the back-end meant the whole e-commerce front-end system comes to a shuddering, screeching pause while we figure out why the logging system can't write any more log messages to disk.<o:p></o:p></span></p> <p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">Or, as another example, the First Tenet states that "Boundaries are explicit"; this is a well-recognized flaw with any distributed system, as documented back in 1993 by Wolrath and Waldo in their paper "A Note on Distributed Computing". Thanks to the fact that traversing across the network is an expensive and potentially error-prone action, past attempts to abstract away the details of the network ("Just pretend it's a local call") eventually result in nothing but abject failure. Performance failure, scalability failure, data failure, you name it, they're all consequences of treating distributed communication as local. It's enough to draw the conclusion "well-designed distributed objects are just a contradiction in terms".<o:p></o:p></span></p> <p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">There's obviously more that can be said of both the "Web" angle as well as the "Services" angle, but hopefully enough is here to recognize the distinction between the two. We have a long ways to go with both ideas, by the way. Interoperability isn't finished just because we have XML, and clearly questions still loom with respect to services, such as the appropriate granularity of a service, and so on. Work remains. Moreover, the larger question still looms: if there is distinction between them, why bring them together into the same space? And the short answer is, "Because individually, each are interesting; collectively, they represent a powerful means for designing future systems." By combining interoperability with services, we create "things" that can effectively stand alone for the forseeable future.<o:p></o:p></span></p> <p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">And in the end, isn't that what we're supposed to be doing?</span></p> <br> <span id="zj35f7r" class="bannerdescription"><br> </span><img src ="http://www.tkk7.com/SteelHand/aggbug/5328.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/SteelHand/" target="_blank">铁手</a> 2005-05-30 13:16 <a href="http://www.tkk7.com/SteelHand/archive/2005/05/30/5328.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> 使用 WebSphere Application Server V6 构徏企业服务ȝhttp://www.tkk7.com/SteelHand/archive/2005/05/27/5268.html铁手铁手Fri, 27 May 2005 07:29:00 GMThttp://www.tkk7.com/SteelHand/archive/2005/05/27/5268.htmlhttp://www.tkk7.com/SteelHand/comments/5268.htmlhttp://www.tkk7.com/SteelHand/archive/2005/05/27/5268.html#Feedback1http://www.tkk7.com/SteelHand/comments/commentRss/5268.htmlhttp://www.tkk7.com/SteelHand/services/trackbacks/5268.htmlIBM Websphere 中国开发站Ҏ几篇新的Websphere V6中构建ESB的文章,目前已发?:
分别?nbsp;Q?br>
使用 WebSphere Application Server V6 构徏企业服务ȝ —?
W? 部分
  WebSphere V6 消息传递资源入?/a> 
W? 部分Q?a > 业务需求以及ȝ

W?部分Q?nbsp; 单的 JMS 消息传递实?/span>

跟踪?....



铁手 2005-05-27 15:29 发表评论
]]>
Java q_持久性机制的比较http://www.tkk7.com/SteelHand/archive/2005/05/24/5098.html铁手铁手Tue, 24 May 2005 02:26:00 GMThttp://www.tkk7.com/SteelHand/archive/2005/05/24/5098.htmlhttp://www.tkk7.com/SteelHand/comments/5098.htmlhttp://www.tkk7.com/SteelHand/archive/2005/05/24/5098.html#Feedback0http://www.tkk7.com/SteelHand/comments/commentRss/5098.htmlhttp://www.tkk7.com/SteelHand/services/trackbacks/5098.htmlJava q_持久性机制的比较

 

讉K持久性数据是所有应用都需要考虑的一个重要方面。Java 语言严格的遵循了持久性数据和暂态性数据的分离Q将持久性管理留l了应用或者分层机制。SUN使用一U严格的比较机制试和比较了Javaq_上的各种革新的持久性机制?/P>

通过选择Q选出了一个有代表意义的几个系l来q行评h和比较。这些机刉通过OO7J的基准测试进行量化分析?/P>

所有的试环境都具有够的内存Q得测试数据库完全可以在内存中ȝQ排除磁盘访问等g的媄响,也是今天主要服务环境的通用内存定w配置。OO7J的虚拟机变体讄性能基线Q每一U机刉和它q行比较。OPJ的PJama实现得到了M最高分。它只需要最的源代码修改,甚至对OO7J的主体基本不需要,虽然它仅是一个原型实玎ͼ却取得了最好的性能。但是它的确需要一个定制的虚拟机?/P>

EJB 框架看v来最p,需要最多的源代码修改和最坏的性能和可伸羃性?/P>

JOS ?JBPQ虽然因为它们缺乏增量访问从而得在d数据的时候性能也很p糕Q但是,他也仅需要很的代码修改q能在数据在内存中的情况下全速运行?/P>

JDBC Ҏ代码修改也有较大影响Q但是性能却是在JVM和数据库的边~交叉处的大量交互体现的很好。两个JDO 的变体则展现出JDO模型对不同外部数据存储的多能性。特别是JDO-TP 和其事务对象模型对关pL据库工作的很好,同时允许源代码对基线保持最的变更。ƈ且, JDO 的性能也排在前列,一旦数据在内存中,q是合情合理的,比JDBC ?EJB而言也是如此?/P>

虽然EJB CMP 的性能要优于EJB BMPQ其性能也差于JDO-TP很多。EJB性能差的原因q不清楚Q也应该注意刎ͼ一些应用服务企业有很差的性能Q可能是容器实现的原因?/P>

作ؓl论Q很昄Q持久性对应用代码的媄响是很宽的,也对l果pȝ的性能影响很大? 如果在虚拟机一U得到支持,OPJ可望提供最有竞争力的性能。在另一个极端,EJBg很难辑ֈ可接受的性能水^Q除非应用对象模型发生戏剧性的变化Q从而避免在映射到EJB时生的l粒度对象。虽然这些方法已l反映在标准的EJB设计模式中了Q但是其暗示着在应用程序的各个斚w均要附加更多额外的努力。相反,JDO 试图在对应用设计的媄响最的情况下达到合理的性能Q同时保持对外部数据源的中立。因此,当前QJDO g能够提供面向对象应用所需的最佳的M持久性机制。但是,目前QSUN了一个最新的实体Bean持久性规?[Sun04]Q提交给 EJB3.0Q它可能更加接近于JDO 模型?/P>

 

报告的原文可以在以下地址下蝲Q?A >http://research.sun.com/techrep/2004/smli_tr-2004-136.pdf

同时Q这也是SUN首次公开披露EJB的性能问题。这也解释了Z么EJB一直得不到很好的广泛用的原因QE然还有它的复杂性和部v的高成本性(需要昂늚EJB容器Q。作为J2EE规范中的一个重要的核心lgQSUN的赌注押在了EJB3.0上面。EJB3.0相关的持久性机ӞJSR220Q吸收了JDO和oracle的TopLink的优点,q且可望提供向后兼容性和q移API?/P>

虽然QEJB从其规范和目标来说看上去很美。但是EJB3.0臛_要今q晚些时候才能出场,目前我们能够使用什么呢?考察目前市面上的持久性框Ӟl合你的应用要求Q也不难得出选择。毕竟,应用来说Q性能q不是第一位的?/P>

对于持久性框架的选择Q从应用和功能上Ԍ主要考虑以下斚wQ?/P>

  • 对O-R mapping框架的用经验?nbsp;
  • 数据源(Data SourceQ,必须支持不同的数据源Q包括关pL据库和JCA体系?
  • 最好提供图形化的映工hq行对象和数据库表之间的映射Q自动生成XML配置文g?nbsp;
  • 数据库支持,可以利用数据库的优势Q如存储q程Q触发器Q支持高U数据类型和数据库安全?nbsp;
  • 查询支持Q应该支持通过Java代码或者OO查询机制Q如EJB QLQ按例查询,标准SQL 来编写自q查询?
  • 锁定。必L持不同应用访问同一数据库时候的锁定机制?nbsp;
  • ~存。提供有效的~存基址Q减网l和查询的开销?nbsp;q支持不同节点的集群?
  • 支持到EJB 3.0的迁UR?/LI>

 

目前QJBOSS已经在AS 4.0中提供了EJB3.0的早期实现。可以参考?A >http://www.jboss.org/products/ejb3

 

如果你不怕在Oracle数据库^C锁定Q你打可使用ToplinkQ这也是目前性能最好的POJO的持久性框架。Oracle也是EJB3.0的专家组Q将来肯定会提供q移的手Dc?你可以阅读这文章:Preparing for EJB3.0. 地址Q?A >http://www.oracle.com/technology/tech/java/newsletter/articles/toplink/preparing_for_ejb_3.html

 

注:

JOS

JOSQ称为Java对象序列化,是JDK 1.1 引入?[Sun99]Q它是一U支持几乎所有对象到的~码和从解码的机制。他不是Z属性表的编码,而是Z文本的,对象序列使用标准的二q制~码格式。JOS 是Javaq_默认的持久性机Ӟ也被用来作ؓ JAVAq程Ҏ调用RMI的参数编l协议。在最低层ơ上QJOS 构成了对基础cd的编码和解码的^台支持。但是,序列化遇CcL化的严重问题Q这也得在Java1.4中引入了“JavaBean的长期持久化”的新系l?/P>

JDBC

JDK 1.1 也引入了Java数据库连?JDBC) API [FEB03]作ؓ使用标准的SQL语言在Java和关pL据库之间的通信机制。JDBC为Java 向关pL据库提供了一个强有力的蟩板,q且被^C的很多API实现证明很成功。设计者很成功地将Java ~程语言和SQLq行了嫁接,而且JDBC 对直接的数据库访问非常容易用。然而,如果应用需要底层数据的对象视图的时候,比如Q将主键转换成相{的对象间的引用关系Q程序将便得非常复杂和容易出错。ؓ了解册个问题,有许多系l开发出来试图自动化q个程Q这通常UCؓ是对象关pL(O-R MappingQ。大多数开发环境都提供对这一机制的不同程度的支持?JDBC API 也在发展Q近来支持直接将Java语言中的一个类映射到SQL的面向对象扩展中的相{类型?/P>

JDO

在JDBC 开发的同时Q对象数据库理l?(ODMG)定义了一个它们的对象模型到Java语言的绑定[Ced96]Q而许多对象数据库厂商则提供了q种l定的实现。因为对象数据库q不像关pL据库那样部v普遍Q因此反映在q个l定上面也是不怎么成功。JavaC֌程QJCPQ出现后Q这一努力被一个更q泛的徏议所替代Q即Java数据对象 (JDO) [JR03]。JDO 的目标是针对各种各样的底层数据存储,包括关系数据库,q向开发h员呈C个类gLJS所定义的对象模型,但附加限制更。而许多对象数据库厂商也支持JDO?/P>

OPJ

l合q些努力QSUN?Glasgow 大学合作Q提Z一个Javaq_的正交持久化机制 (OPJ) [JA00]。这一Ҏ以极高的透明性支持变成语a的各个方面。从本质上讲QOPJ d了对JVME_内存的支持,也意味着q一对JVM 实现的要求根本上限制了其可接受性?/P>

铁手 2005-05-24 10:26 发表评论
]]>
骡子力气比马大:一个ESB集成框架CodeHaus Mulehttp://www.tkk7.com/SteelHand/archive/2005/05/18/4737.html铁手铁手Wed, 18 May 2005 05:22:00 GMThttp://www.tkk7.com/SteelHand/archive/2005/05/18/4737.htmlhttp://www.tkk7.com/SteelHand/comments/4737.htmlhttp://www.tkk7.com/SteelHand/archive/2005/05/18/4737.html#Feedback0http://www.tkk7.com/SteelHand/comments/commentRss/4737.htmlhttp://www.tkk7.com/SteelHand/services/trackbacks/4737.html 

Mule 是一个基于ESB架构理念的消息^台。Mule 的核心是一个基于SEDA的服务容器,该容器管理被UCؓ通用消息对象QUniversal Message Objects /UMOQ的服务对象Q而这些对象都是POJO。所有UMO和其他应用之间的通信都是通过消息端点Qmessage endpointQ来q行的。这些端点ؓ众多的分立的技术,比如Jms, Smtp, Jdbc, Tcp, Http, Xmpp, file{等Q提供了单和一致的接口?/P>

Mule 应用通常是由|络中的许多Mule 实例l成。每一个实例都是一个驻留一个或者多个UMOlg的轻量容器。每一个UMO lg都有一个或者多个通过它(们)发送和接收事g的端炏V?BR>

clip_image001_0013.gif

容器通过UMOlg提供各种各样的服务,比如事务理、事件{换,路由Q事件关联、日志、审计和理{等。Mule对象构造从理手段中分d来,通常行框架和IoC/DI 容器Q如Spring, PicoContainer 或?Plexus 可用q种理手段来构Z的UMO lg?/P>

很多为, "Mule是一个Jms 实现"。实际上QMule 不是一个Jms serverQ但是可以配|来使用M你觉得非常漂亮的Jms server。Mule 的理忉|Q如果已l有了稳定和q泛接受的实玎ͼ׃会直接实CQ何传输。例如,Mule 重用了Axis ?GLUE 的SOAP栈而不是重新实C个。Mule 提供了一个一致的服务集来理Mcd的连接的事g、关联、事务、安全和审计?/P>

 

下面是Mule Server lg的简单图C:

clip_image002_0002.gif

Mule Manager

Mule Manager是Mule server 实例的中?也称Z个节Ҏ或者Mule Node)。其主要的角色是理各种对象Q比如Mule实例的连接器、端点和转换器。这些对象然后被用来控制q出你的服务lg的消息流Qƈ且ؓModel和它所理的组件提供服务?/P>

Model

model 是管理和执行lg的容器。它控制q出lg的消息流Q管理线E、生命周期和~充池。默认的MuleModel是基于SEDA的,它用一个有效的Z事g的队列模型来获取的最大的性能和直通性?/P>

UMO Components

UMO代表Universal Message ObjectQ它是一个可以接收来自于M地方的消息的对象。UMO lg是你的业务对象。它们是执行引入的事件之上的具体业务逻辑的组件。这些组件是标准的JavaBeanQ组件中q没有Q何Mule特定的代码。Mule Z你的lg的配|处理所有进出组件的事g的\由和转换?/P>

Endpoints

Endpoint是Mule的通信能力的基。一个Endpoint定义了两个或者多个组建应用或者存储库之间的通信渠道。ƈ且提供了一个强大的机制来允怽的对象在一个统一的方式上再多U协议之上进行交谈。端点可以通过消息qo器、安全拦截器和事务信息进行配|来控制什么消息,在何Ӟ以及怎样通过端点q行发送和接收?/P>

External Applications

外部应用可以使Q何应用,从应用服务器到遗留的传统应用Q主机程序,或者C/Spȝ。基本上是Q何可以生和操纵数据的应用。因为Mule通过endpoints执行所有通信QUMO lgq不打算在其中包含应用生数据,以及应用LQ以及用传输协议的部分?/P>

 

关键Ҏ?/STRONG>

  • ZJ2EE 1.4的企业消息ȝQ?Enterprise Service Bus (ESB)Q和消息代理QbrokerQ?
  • 可插入性连接,比如Jms (1.0.2b ?1.1), vm (嵌入), jdbc, tcp, udp, multicast, http, servlet, smtp, pop3, file, xmpp{?
  • 支持M传输之上的异步,同步和请求响应事件处理机?
  • 支持Axis或?A >Glue的Web Service.
  • 灉|的部|结构[Topologies]包括Client/Server, P2P, ESB 和Enterprise Service Network.
  • 支持声明性和~程性事务,包括XA 支持
  • 对事件的路由、传输和转换的断到端支持
  • Spring 框架集成。可用作ESB 容器Q而Mule c也可以很Ҏ的嵌入到Spring 应用中?
  • 使用ZSEDA处理模型的高度可伸羃的企业服务器
  • 支持REST API 来提供技术独立和语言中立的基于web的对Mule 事g的访?
  • 强大的基?A >EIP模式的事件\由机?
  • 动态、声明性的Q基于内容和Z规则的\由选项
  • 非入侵式的方式。Q何对象都可以通过ESB 容器理
  • 强大的应用集成框?
  • 完整的可扩展的开发模?/LI>

何时使用

一般在q些情Ş下用Mule -

  • 集成两个或者多个需要互盔R信的或者多个现有的pȝ.
  • 需要完全和周围环境去耦合的应用,或者需要在pȝ中׾~不止一个组件的pȝ
  • 开发h员不知道未来是否会将其应用分发或者׾~需求的单VM 应用?/LI>

目地址Q?A >http://mule.codehaus.org/



铁手 2005-05-18 13:22 发表评论
]]>
一U优雅的行架构QStruts+Spring+Hibernate (1)http://www.tkk7.com/SteelHand/archive/2005/04/29/3934.html铁手铁手Fri, 29 Apr 2005 03:42:00 GMThttp://www.tkk7.com/SteelHand/archive/2005/04/29/3934.htmlhttp://www.tkk7.com/SteelHand/comments/3934.htmlhttp://www.tkk7.com/SteelHand/archive/2005/04/29/3934.html#Feedback20http://www.tkk7.com/SteelHand/comments/commentRss/3934.htmlhttp://www.tkk7.com/SteelHand/services/trackbacks/3934.html用java来徏立一个很有h值的web 应用不是一个简单的d。在架构q个应用时要考虑很多的因素和问题。从更高的层ơ来看,开发h员面临着关于如何构徏用户接口Q何处驻留业务逻辑Q以及如何实现数据持久性这些问题。这3层都有各自的问题需要回{。而每一层又需要实现那些技术?应用如何设计来进行松散耦合q能q行灉|变更Q应用架构是否允许某一层变更而不影响到其它的层次Q应用应该如何处理容器一U的服务比如事务Q?/P>

在ؓ你的应用创徏一个架构之前有许多问题需要澄清。幸q的是,有很多开发者都意识到这个问题,q徏立了很多框架来解册些问题。一个良好的框架可以让开发h员减轻重新徏立解军_杂问题方案的负担和精力;它可以被扩展以进行内部的定制化;q且有强大的用户C֌来支持它。框枉常能很好的解决一个问题。然而,你的应用是分层的Q可能每一个层都需要各自的框架。仅仅解决UI问题q不意味着你能够很好的业务逻辑和持久性逻辑和UI lg很好的耦合。例如,你不应该使具有JDBC代码的业务逻辑攑օ控制器之中,q不是控制器应该提供的功能。一个UI 控制器应该是轻量化的lgQ由它代表对UI范围之外的其它应用层的服务调用。良好的框架自然地Ş成代码分ȝ原则。更为重要的是,框架减轻了开发h员从头构建持久层代码的精力,从而集中精力来应用逻辑上,q对客户端来说更为重要?/P>

本文讨论了如何结合几个著名的框架来达到松散耦合Q如何设计你的架构,以及如何辑ֈ各个层次的一致性设计。面临的挑战是,框架整合v来,以每一层都向另外的层次以一U松散的方式来暴露接口,而不底层功能用的是什么技术。本文还讨论整合3U著名开源框架的一U策略。对表现层,我们使用StrutsQ业务层使用SpringQ对于持久层我们使用的是Hibernate。你可以取代这里的某个框架而用你喜欢的框架已辑ֈ同样的效果。图1昄了框架被整合hӞ从最高层ơ看到的视图?BR>
clip_image001_0007.gif


 

应用?/STRONG>

许多设计良好的web 应用Q可以被按职责分为四层。这些层ơ是表现层、持久层、业务层、和领域模型层。每一个层ơ都有其独特的职责,不能把各自的功能与其它层ơ相混合。每一个应用层都应该和其它层隔d来,但允怋用接口在层间q行通信。我们开始来看看每个层,q讨Z下它们各自都应该提供什么和不应该提供什么?/P>

表现?/STRONG>

一个典型的web 应用的末端是表现层。许多Java 开发者都知道Struts 提供了什么东ѝ然而,太多时候,耦合代码比如业务逻辑被放qorg.apache.struts.Action中。所以,我们先ȝ一下Struts 之类的框架应该提供什么。下面就是Struts 的职责所在:

  • 理用户的请求和响应
  • 提供一个控制v来将调用委托C务逻辑和其他上游处?/LI>
  • 来自于抛出例外的其他层的例外处理到Struts Action ?/LI>
  • l装可以在视图中表现的模型对?/LI>
  • 执行UI 校验

下面是一些经常可以用Strutsq行~码但是不应该和表现层关联的事情Q?/P>

  • 直接和数据库交互Q比如JDBC 调用
  • 与应用相关的业务逻辑和校?/LI>
  • 事务理

在表现层中引入这些类型的代码导致类型耦合和维护负担?/P>

持久?/STRONG>

一个典型Web应用的另一端是持久层。这也是应用中最Ҏ很快失控的地斏V开发者通常低估了自己构q持久层框架的挑战。一个定制的Q内部开发的持久层不仅需要大量的开发时_q且通常~Z功能和难以管理。目前有许多解决q些问题的开源对象关pL?(ORM) 框架。特别地Q?Hibernate 框架允许Java中的对象-关系的持久性和查询服务。Hibernate 对已l熟悉了SQL 和JDBC API 的Java开发者来或具有中度的学习曲线。Hibernate 的持久对象基于POJO和Java 集QcollectionsQ。此外,使用Hibernate 不和你的IDE接口。下面列Z你需要在持久性框架中~写的代码类型:

  • 查询关系信息到对象中。Hibernate 是通过UCؓHQL的OO查询语言Q或者用更有表现能力的规则APIQ来完成q个工作的。除了用对象而不是表Q用字D而不是列的方式,HQL非常cM?SQL。也有一些新的特定的HQL 语言特征需要学习;但是Q它们是很容易理解和良好~写的。HQL 是一U用于查询对象的自然语言Q而对象,只需要很的学习曲线吧?
  • 存储、更新和删除存储在数据库中的信息
  • 高的对象关pL框架比如Hibernate支持大部分主SQL数据库,它们支持?子关p,事务Q承和多态?/LI>

下面是应该在持久层避免的一些事情:

  • 业务逻辑应该|于应用的更高层中。这里只允许数据讉KҎ?/LI>
  • 不应该持久逻辑和表现逻辑耦合。避免表现组件如JSP或者基于servlet的类中的逻辑直接和数据访问进行通信。通过持久性逻辑隔离在其自己的层中,应用具有更加灵zȝ修改性而不影响到其他层的代码。例如, Hibernate 可以使用其他持久框架和API代替Q而不需要修改其它层中的代码?/LI>

业务?/STRONG>

典型的Web应用的中间组件一般是业务层和服务层。从~程的角度来_service layerl常被忽略。这U类型的代码散布于UI表现层和持久层ƈ不是不多见。这些都不是正确的地方因为它D了紧密耦合的应用和难以l护的代码。幸q的是,大多数框枉解决了这个问题。这个空间内最行的两个框架是Spring 和PicoContainer。它们都被视为是h非常的QfootprintQƈ且决定如何将你的对象整合在一L微容器(microcontainerQ。这些框枉建立在一U叫做依赖性注入(dependency injectionQ?(也称控制反{Qinversion of controlQIOCQ?的简单概念之上。我们将xSpring中通过针对命名配置参数的bean属性的setter 注入的用。Spring 也允怸U更加高U的构造器注入Qconstructor injectionQŞ式作为setter injection 的可选替代。对象通过单的XML 文gq行q接Q该配置文g包含对各U对象的引用Q比如事务管理处理器Qtransaction management handlerQ?对象工厂Q包含业务逻辑的服务对象,以及数据讉K对象(DAO)?/P>

我们随后会用一些例子来澄清Spring中用这些改变的方式?/P>

业务层应该负责下面的问题Q?/P>

  • 处理应用的业务逻辑和业务校?/LI>
  • 理事务
  • 允许与其他层q行交互的接?/LI>
  • 理业务U对象之间的依赖?/LI>
  • 加入了表现和持久层之间的灉|性,以便它们不需要彼此进行直接通信
  • 从表现层暴露上下文给业务层以获得业务服务
  • 理从业务层到表现层的实?/LI>

领域模型?/STRONG>

最后,因ؓ我们要解军_际的问题的web应用Q我们需要一套在不同的层间移动的对象。领域模型层包含的是表达实际业务对象的对象,比如Order, OrderLineItem, Product {等。这一层允许能让开发者不再构建和l护不必要的数据传输对象DTO来匹配其领域对象。例如, Hibernate允许你读取数据库信息C个领域对象的对象图中Q以便你可以在离U的情况下将其表现在UI层中。这些对象可以被更新q跨q表现层发送回去,然后q行数据库更新。另外,你不再需要将对象转变成DTOQ因为它们在不同的层间移动时可能会丢׃务。这U模型允许Java 开发者能够以OO风格的方式很自然的处理对象,而不用编写额外的代码?/P>

整合一个简单的例子

到此Q应该对各种层次和组件有一个高层的理解了Ş。可以开始一些实践了。再ơ说明。我们的例子整合了Struts, Spring, 和Hibernate 框架。每个框枉包含大量的内容细节,我们不会多述。我们的目的使用一个例子向你说明如何将它们整合在一hZ个优雅的Web应用架构。实例将演示一个请求是如何得到各层的服务的。此应用的用户可以将一个订单保存在数据库中q且察看数据中的已有订单。进一步的增强允许用h新和删除现有订单?/P>

首先Q我们将常见我们的领域对象,因ؓ它们是要和各层沟通的。这些对象将允许我们能够定义那些对象需要持久化Q那些业务逻辑需要提供,以及应该设计那些表现接口。接下来Q我们将使用Hibernate 来ؓ领域对象配置持久层和定义对象关系映射。然后,我们定义和配置我们的业务层。在完成q些lg后,我们讨论如何用Spring这些层兌h。最后,我们提供一个表现层Q它知道如何与业务服务层通信以及如何处理来自于其他层的例外?/P>

铁手 2005-04-29 11:42 发表评论
]]>
վ֩ģ壺 þ޾ƷƵ| 99ƷƵ߹ۿѲ| ƵպƵ| ѹԺ߹ۿ| 2020ΪĻѹۿȫ | vƬѲ| 67194츾ѹۿ | ޹Ʒһҳ| ձvѷƵ| aëƬȫ| ޱ龫Ʒһ| þþþavרˮ| һĹ˾| AҹƬƷվ| ëƬȫѹۿ| һƵ| 99ƷƵѹۿ| Ƶ| ߹ۿ| þƷѹۿ| ˸һ91| AVAV˵ò| 츾һ | Ůվѿվ| ձxxxxɫƵ߹ۿ| ѸƵ| ѹۿӰ| ɫѲ| Ʒ| йɫվ| 99þùƷһ| 99þѹػ| ѾƷ99þùۺϾƷ| ձɫͼ߹ۿ| ٸƷһѶ̬| һƵ| þóѵӰ| ƬվŮ| վ| Ƭ51˿Ӱ| |