• 针对SOA关键问题进行详解(转载) - []2008-01-25

    对于SOA尤其是像开发人员和CIO等仍有若干关键问题需要回答。Web 服务以及越来越多的面向服务架构(Service Oriented Architecture,SOA)已经在市场上投放了大量广告。两者都可以给企业带来广泛的短期和长期利益。但对于SOA尤其是像开发人员和CIO等仍有若干关键问题需要回答。

    问:SOA的前提是能够使应用程序像服务那样工作。软件如何像服务一样工作呢?

    答:没有SOA,软件包是被编写为独立的(self-contained)软件,即在一个完整的软件包中将许多应用程序功能整合在一起。实现整合应用程序功能的代码通常与功能本身的代码混合在一起。我们将这种方式称作软件设计"单一应用程序"。与此密切相关的是,更改一部分代码将对使用该代码的代码具有重大影响,这会造成系统的复杂性,并增加维护系统的成本。而且还使重新使用应用程序功能变得较困难,因为这些功能不是为了重新使用而打的包。

    SOA旨在将单个应用程序功能彼此分开,以便这些功能可以单独用作单个的应用程序功能或"组件"。这些组件可以用于在企业内部创建各种其他的应用程序,或者如有需要,对外向合作伙伴公开,以便用于合作伙伴的应用程序。

    "服务"的概念是要使用与实施细节无关的标准化接口来构建这些"组件"。针对一套应用程序服务的Web服务描述语言文档,描述需要作为请求特殊服务(例如,"检查库存"功能可能需要零件数)输入来传输的数据名称和类型,并描述服务响应的细节(它可能返回表示库存中零件数量的一个整数)。

    这些详细信息看上去好像与 Java、C++、COBOL 等中实施的功能相同,因此,服务的请求程序无需知道使用的何种语言,而且可以使用任何语言来编写请求程序。这就使一个平台上的服务可以和为另一个平台编写的应用程序集成。互操作性的关键是请求和响应消息,例如,使用SOAP消息发送,其消息使用 XML 编写代码。

    问:请举例说明 SOA 如何使企业受益。

    答:关键的优势是互操作性,可以使用任何平台之间的功能,而与编程的语言、操作系统和计算机类型等等无关。在上述示例中,"检查库存"功能可能已经编写为一个应用程序要求的服务,例如,监控库存并在需要时自动重新定购的服务,但我们后来发现,同样的服务无需修改即可用于支持由员工使用的基于 Web 的库存监控工具。

    就内部而言,应用程序的重复使用是一项关键优势,因为它可以降低开发成本。服务的重复使用,其长期作用在于减少企业中冗余的功能,简化基础架构,从而降低维护代码的成本。通过按服务的使用者来组织应用程序,与传统的编程技术相比,我们获得一个要灵活敏捷得多的集成模型,使我们可以迅速修改业务流程模型。

    就外部而言,为服务交互而详细定义的"合同"使业务合作伙伴之间的交互"自由联合",提供集成所必需的稳定性,并提供更改基层软件(underlying software)问题的一个解决方案。当保留了相同的消息格式时,支持该格式的软件只要仍然支持消息合同,则可以按需进行更改。只要它支持相同的消息格式,甚至可以使用另一种编程语言的实施来完全替换系统,请求程序无需更改。当消息合同不断发展而必须更改时,与相当困难的任务,即支持多个版本的程序 API 和文件格式相比,它使用版本控制(versioning),更容易作为过渡策略支持多个版本的应用程序。

    这些是部分关键益处,还有许多其他益处。

    问:SOA与Web服务以及SOA和网格计算之间是何关系。

    答:SOA是一种面向业务应用程序系统的体系架构设计风格,但可以应用于其他系统,包括中间件技术,例如网格计算。

    Web服务是可以用于创建SOA的一套标准。尽管没有Web服务标准也可能创建SOA(例如,在SOAP之前,人们已经在HTTP或JMS上使用XML来实现相似的结果),但运用Web服务标准却是我们目前针对与外部软件交互的最佳方法。

    网格计算是一种系统管理策略,其目标是最大限度地减少硬件资源的使用。例如,当突然的需求溢出指定的服务器时,它可能临时将一些请求转向相对没那么繁忙的服务器。网格计算设计为一种面向服务架构(用于调整网格计算的服务叫做网格服务)。

    随着我们转向SOA,我们将看到该方法用于支持各种其他新的系统功能。另外一个示例是自主计算伙子管理系统。事实上,SOA是Web服务高级功能的基础,例如WS-Trust和联合身份识别管理规范。

    问:因为还没有通用互操作性标准,SOA最大的问题不仍然是供应商中心性(vendor-centricity)吗?

    答:有一些基本标准正好适用于Web服务,它们可以用于实施面向服务架构。XML和XML方案分别自1998年和2001年就已成为标准。SOAP 1.2自2003年6月成为标准。UDDI在2003年夏天标准化。WS-Security在2004年4月成为标准。

    除了著名标准机构(例如W3C和OASIS)支持的这些正式标准以外,许多"技术建议书规范"也被广泛接受,并作为事实标准得到充分支持。例如,直到 W3C完成WSDL 2.0为止,要求在其产品中支持Web服务的大多数供应商都支持WSDL 1.1规范。

    事实上,目前大部分软件供应商对Web服务标准的支持,已导致使用Web服务来广泛实施SOA。

    问:SOA如何影响SLA?而您如何让SLA适合您的SOA?

    答:当前企业之间的SOA实施通常侧重于改善合作伙伴之间现有业务的效率。同样,性能保证的概念并不是像方便的互操作性和自由联合集成那样的问题,它们可以借助Web服务标准来实现。

    当服务成为企业付费的产品时,对特定水平的性能或可用性的保证,以及其它服务质量注意事项具有更为重要的作用。我们可以想象这在将来会成为一个常见要求,正在进行这方面的工作以支持该模型。

    问:我如何着手构建 SOA?

    答:最佳的方法时开始构建较小的SOA,侧重于提高当前缺乏效率的交互性。例如,假设使用一个系统上需要重新键入到另一个系统的打印报告,将两个计算机系统紧密联系在一起,这会消耗时间、浪费成本,导致出错,而且数据无法保持罪行。可以设计一个简单的基于Web服务SOA项目,直接链接信息,将含更新的SOAP消息发送到合作伙伴系统,而不是打印报告。

    开始简单的SOA使企业可以在作出大投资之前先衡量ROI,并在出现大的问题之前获得小改善的经验。

    CIO在购买软件时应该询问供应商关于对Web服务和SOA的支持,作为一个重要的注意事项。应该检查新应用程序的开发,以便考虑是否某些应用程序功能可能需要用于其他目的,以及可以嵌入对Web服务标准的支持以支持重复使用。

    最终要完成大规模的企业转型,可能需要通过建立企业服务总线(形成SOA的骨干网或神经系统)来开始该工作。然后以企业合理的节奏,将服务提供商何服务请求程序逐渐添加到ESB。随着IT的SOA的增长,ESB成为在服务水平上连接应用程序,并调节消息流量以提高效率和可靠性的一种有力方式。

    问:管理SOA需要哪些新的服务管理技能?

    答:在运用Web服务之前,因缺乏标准和自由联合的策略,合作伙伴整合受到严重限制。随着我们开始使用Web服务和SOA来整合合作伙伴,我们可以发现,使用业务合作伙伴所提供的功能的IT系统已经开始依赖于这些功能的可用性。我们从内部管理我们自己服务的可用性转向要求监视和管理(可能有许多)企业之间的可用性。这明显大大增加了管理IT系统的复杂性,但它也带来了巨大的价值,这就是为什么许多企业要转到这个方向的原因。

    Web应用程序系统正在不断发展以支持Web服务标准。"Web服务分布式管理"或WSDM标准正在由OASIS开发,对Web服务管理提供标准化的支持,通过使用Web服务来实现对不同平台的管理,满足涉及独立业务实体的大规模SOA对分布式管理的要求。

    Tags: SOA

    nanjabarwa 发表于 15:16:44 | 阅读全文 | 评论 0 | 引用 0 | 编辑
  • Channel Modelling - []2007-12-10

    In order to evaluate the effectiveness of a given channel coding and processing technique before construction, some model of the channel must be developed that adequately describes the environment. Such analysis reduces the cost of developing a complex system by reducing the amount of hardware that has to be developed for evaluation of performance. Theoretical models have a second advantage in their ability to reproduce a channel for comparison between various communication strategies, resulting in an accurate measure of relative performance.

    Indoor channels are highly dependent upon the placement of walls and partitions within the building. In such cases, a model of the environment is a useful design tool in constructing a layout that leads to efficient communication strategies. To achieve this aim, a channel model of an indoor environment must be applied to various layout plans of offices which will lead to the characterisation of design methodologies. Much work has been carried out in measuring the channel in buildings of various layouts, and structural compositions. In order to combine these results, some unified model of an indoor channel must be developed.

    A channel model is useful in determining the mechanisms by which propagation in the indoor environment occurs, which in turn is useful in the development of a communication system. By examining the details of how a signal is propagated from the transmitter to the receiver for a number of experimental locations, a generic model may be developed that highlights the important characteristics of a given indoor environment. Generic models of indoor communications can then be applied to specific situations to describe the operation of a radio system, and may also be used to generate building designs that are particularly well-disposed to supporting radio communication systems.

    Tags: 信道建模

    nanjabarwa 发表于 09:41:01 | 阅读全文 | 评论 0 | 引用 0 | 编辑
  • CLR与MSIL - [.Net]2007-12-07

    CLR - Common Language Runtime

    CLR(公共语言运行库)和Java虚拟机一样也是一个运行时环境,它负责资源管理(内存分配和垃圾收集),并保证应用和底层操作系统之间必要的分离。

    为了提高平台的可靠性,以及为了达到面向事务的电子商务应用所要求的稳定性级别,CLR还要负责其他一些任务,比如监视程序的运行。按照.NET的说法,在CLR监视之下运行的程序属于“受管理的”(managed)代码,而不在CLR之下、直接在裸机上运行的应用或者组件属于“非受管理的”(unmanaged)的代码。

    CLR将监视形形色色的常见编程错误,许多年来这些错误一直是软件故障的主要根源,其中包括:访问数组元素越界,访问未分配的内存空间,由于数据体积过大而导致的内存溢出,等等。

    然而,这种对受管理代码的运行监视是有代价的。虽然当前还不可能精确地得到监视程序运行所需要的开销,但从当前Beta测试版的性能表现来看,正如Microsoft所承认的那样,我们可以预料由它导致的性能降低程度至少达到10%。当然,如果监视程序运行能够将稳定性和可用性提高到一个新的档次,我们可以怀疑10%的性能降低是否还可以称为一件坏事……

    MSIL - Microsoft  Intermediate Language

    MSIL是将.NET代码转化为机器语言的一个中间过程。它是一种介于高级语言和基于Intel的汇编语言的伪汇编语言。当用户编译一个.NET程序时,编译器将源代码翻译成一组可以有效地转换为本机代码且独立于CPU的指令。当执行这些指令时,实时(JIT)编译器将它们转化为CPU特定的代码。由于公共语言运行库支持多种实时编译器,因此同一段msil代码可以被不同的编译器实时编译并运行在不同的结构上。从理论上来说,MSIL将消除多年以来业界中不同语言之间的纷争。在.NET的世界中可能出现下面的情况一部分代码可以用EFFIL实现,另一部分代码使用C#或VB.NET完成的,但是最后这些代码都将被转换为中间语言。这给程序员提供了极大的灵活性,程序员可以选择自己熟悉的语言,并且再也不用为学习不断推出的新语言而烦恼了。

    Tags: 编译 CLR MSIL

    nanjabarwa 发表于 17:16:29 | 阅读全文 | 评论 0 | 引用 0 | 编辑
  • 什么是.NET(转载) - [.Net]2007-12-07

    自从比尔·盖茨在2000年提出.NET战略,五六年过去了,人们对到底什么是.NET仍然不是很清楚。这篇文章的目的就是希望能够阐明.NET的内在含意,.NET的缘由以及.NET技术的应用场景。

    大家对.NET概念上的迷惑,部分的原因是由于微软自己不十分清晰的市场策略造成的。比如在2000-2002年间,许多微软的产品在发布新版本的时候都在版本上加上了.NET后缀,尽管它们跟.NET技术没有太多关系。现在微软已经意识到这个名称的误用,开始着手把.NET后缀从产品名称中去除。2003年发布的产品中,惟一带有.NET的产品是Visual Studio.NET 2003-微软的集成开发工具。事实上,Visual Studio.NET 2003的下一个版本(代号为Whidbey,将在今年年底发布),它的名称将回归到简单的Visual Studio 2005。

    .NET现在可以看成微软的一个品牌。微软有两个非常成功的品牌,那就是Windows和Office。.NET会成为微软的另一个品牌。它不仅仅是一组技术,产品,或服务(微软的服务包括MSN, Passport, MSDN订阅,等等)。一个品牌具有一些特征。比如,Rolex是一个手表品牌,它代表了高质量,时尚,昂贵,成功,等等。那么.NET代表了什么呢?

    .NET代表着联通性,敏捷性,和成功。让我分别对这几点来解释一下。

    1。联通性。.NET的远景是让所有的事物都连接起来。不管是人,信息,系统,还是设备;不管是一个企业的内部员工,外部合作伙伴,还是客户;不管是Unix, Windows, 还是 Mainframe;不管是SAP, Siebel, 还是 Oracle ERP套件;不管是桌面PC,手机,还是手表。在一个异构的IT环境里,.NET技术能够将不同的系统连接起来。

    2。 敏捷性。商务敏捷性和IT敏捷性。面向服务的商务体系结构跟面向服务的IT体系结构很好的配合在一起。SOA (Service-Oriented Architecture)能够给一个企业带来IT敏捷性和商务敏捷性。.NET技术是基于SOA思想和原则设计的,并且采用了像XML和Web Services这些支持应用整合和系统互操作的开放标准。这样,采用.NET技术开发应用,能够带来灵活性和敏捷性。.NET是一个非常合适的技术平台来创建支持SOA体系结构的IT系统并通过这些系统的开发和部署运行达到IT和商务的敏捷性。

    3。成功。GE的前主席Jack Welch曾经说过一句话,“在GE,我们只有两个竞争优势:第一,比竞争对手更快的洞悉更多有关客户的信息的能力;第二,比竞争对手更快的将这种理解转化为行动的能力。”最终,IT都是为业务服务的。敏捷带来商务上的成功。.NET可以帮您创建一个敏捷的系统,既容易去洞悉市场,作出战略上的调整,也容易将新的计划付之实行。

    这些听上去像是在做市场宣传。但事实确是如此。其它的IT厂商也在谈论这些东西:XML, Web Services, SOA, 敏捷性,联通性,等等。他们可能会使用不同名词,但这些名词后面的含意应该都是非常相似的。

    所以你可以发现一个有趣的现象,所有IT厂商都支持同样一组开放标准,即XML和Web Services,我们都认可企业应该做SOA,我们都认为敏捷性非常重要。那这些IT厂商之间有什么不同呢?不同之处就在各自的技术实现上。XML, Web Services, 和SOA只是技术规范和技术理念,需要采用一种技术平台才在应用系统中实现这些技术规范和技术理念。各个IT厂商的技术平台有很大的不同。

    .NET就是微软的用来实现XML,Web Services, SOA和敏捷性的技术。

    对技术人员,想真正了解什么是.NET,必须先了解.NET技术出现的原因和它想解决的问题,必须先了解为什么他们需要XML, Web Services 和 SOA。

    技术人员一般将微软看成一个平台厂商。微软通过技术平台,而技术人员在这个技术平台之上创建应用系统。从这个角度,.NET也可以如下来定义:

    .NET是微软的新一代技术平台,为敏捷商务构建互联互通的应用系统,这些系统是基于标准的,联通的,适应变化的,稳定的和高性能的。

    从技术的角度,一个.NET应用是一个运行于.NET Framework之上的应用程序。(更精确的说,一个.NET应用是一个使用.NET Framework类库来编写,并运行于公共语言运行时 Common Language Runtime之上的应用程序。)如果一个应用程序跟.NET Framework无关,它就不能叫做.NET程序。比如,仅仅使用了XML并不就是.NET应用,仅仅使用SOAP SDK调用一个Web Service也不是.NET应用。

    微软.NET技术包括哪些东西?核心的东西当然是.NET Framework。 Visual Studio.NET 2002和Visual Studio.NET 2003是创建.NET应用的集成开发环境。Visual Studio For Office (VSTO)可以用来创建基于Word和Excel等文档的.NET解决方案。Web Service Extensions (WSE)是一组支持高级Web Services 标准的.NET类,这些标准包括WS-Security, WS-Policy, WS-ReliableMessaging 和 WS-Attachments,等等。Enterprise Library是一组支持企业级.NET应用程序开发的可重用的应用程序模块,它提供了应用程序开发中需要解决的共性的问题,比如配置管理,数据访问,异常处理,日志管理,等等。

    .NET仅仅是跟Web Services相关吗?当然不是。它是微软的新一代技术平台,你可以在这个平台上面创建任何类型的应用系统:传统的Windows桌面应用,Web应用,Office 应用,移动应用,智能设备应用,等等。在一个Pocket PC (Phone Edition)上面,你可以使用.NET Compact Framework (.NET Framework在设备上的一个简化版)创建一个.NET客户端应用程序。或者你可以开发一个.NET移动Web应用,部署在一个IIS Web 服务器上面,然后用户就可以使用Pocket PC (Phone Edition)上面的Internet Explorer 浏览器去访问这个网站,这个网站的页面都是专门为这种设备的小屏幕设计的。

    Tags: .NET 概念

    nanjabarwa 发表于 15:32:02 | 阅读全文 | 评论 1 | 引用 0 | 编辑
  • Java进度条在事件处理过程中不更新?(转载) - [Java]2007-08-02

    为什么进度条在事件处理过程中不更新,而是在完成后,从0%调到100%?
    分两种情况:
    1)在AWT事件线程中执行的操作
    当应用程序在事件线程中执行长时间的操作时,会阻塞正常的AWT事件处理,因此阻止了重绘操作的发生。这同常会在下列情况下发生:应用程序响应一个来自用户界面的请求时,在连接到一个按钮或其他GUI组件的事件处理程序中执行任务,任务的内容可能会需要较长时间,使事件线程挂起,直至远程系统发出答复为止。当应用程序调用JProgressBar的setValue方法时,进度条可能更新期内部状态并调用repaint,这样做会把一个事件放置到AWT事件队列中。不幸的是,直至应用程序的事件处理程序完成其处理并把控制权返回到线程的事件处理循环,才能处理该事件。
    可以通过调用JComponent的paintImmediately方法来这样做,该方法有两种形式:
    public void paintImmediately(int x, int y, int width, int height);
    public void paintImmediately(Rectangel rect);
    例如:
    Dimension d = bar.getSize();
    Rectangel rect = new Rectangle(0,0, d.width, d.height);
    ...
    bar.setValue(progressValue);
    bar.paintImmediately(rect);
    ...
    2)在另一个线程中执行的操作
    如果在一个单独的线程中执行该操作,当调用进度条的setValue方法,它的更新不会出现任何问题,问题在于,后台线程必须调用JProgressBar的setValue。而Swing组件只有在事件线程中才能安全的访问。因此,从执行实际工作的线程调用setValue方法是不安全的!解决的方法是使用SwingUtilites的invokeLater方法,让AWT事件线程稍后进行setValue调用。
    例如:
    ...
    SwingUtilities.invokeLater(new Runnable() {
    public void run() {
    bar.setValue(value);
    }
    });
    ...
    还有一种可能,不能再线程中改变swing组件,例如,不能从线程调用label.setText,但是可以使用EventQueue类的invokeLater和invokeAndWait方法,以便在事件调度线程中执行该调用程序。(From Core Java)

    Tags: 进度条

    nanjabarwa 发表于 14:54:53 | 阅读全文 | 评论 1 | 引用 0 | 编辑