Object 3Tier Infoworks (简称 O3W)

声明:摘自 基于O3W平台的证券交易系统设计与实现_易轶 2007年硕士学位论文 仅供学习,如有侵权,请联系作者删除!

第二章 Object 3Tier Infoworks 平台的研究


2.1 分布式多层架构技术介绍

 传统的分布式应用系统模式是“主机/终端”或“客户机/服务器客户机/服务器系统(Client/Server System)的结构是
指把一个大型的计算机应用系统变为多个能互为独立的子系统,而服务器便是整个应用系统资源的存储与管理中心,
多台客户机则各自处理相应的功能,共同实现完整的应用。

 但是,随着对各种旧有应用的不断扩充和新应用的不断增加,各企业IT部门面临的问题也越来越多,诸如不同硬件平台、
诸如不同硬件平台不同网络环境不同数据库之间的互操作、多种应用模式的并存、系统运行效率过低、传输不可靠、

数据加密、开发周期过长等问题,单纯依赖传统的的结构的系统已经不能满足要求。于是为解决传统模式与应用需求日益
突出的矛盾,为解决传统模式与应用需求日益突出的矛盾,以交易中间件为基础框架的三层客户机服务器模式应运而生。

 三层结构以中间层管理大量的客户端,并为其联接、集成多种异构的服务器平台,通过有效的组织和管理,
在极为宽广的范围内将客户机与服务器进行高效组合。同时中间件开创的以负载平衡动态伸缩等功能为代表的管理模式,
己被广泛证实为建立关键业务应用系统的最佳环境,使在传统模式下不可能实现的应用成为可能,并为应用提供了充分的扩展余地。

 目前最流行的分布式架构技术主要是 MicrosoftCOM/DCOM/COM+ 和 700多个厂商共同提倡的 COBRA 以及 
Sun 公司提倡的 EJB ,三者虽然实现的方案和平台各自不同,但是它们的核心架构都是一样的,都是由客户端程序中间层
服务程序数据库服务三层共同构成。在中间层,分布式业务组件负责企业应用的商业逻辑部署

1、ActiveX方案
 ActiveX是微软综合Winn32,OLE和COM/DCOM等技术所建立的一整套Internet应用开发,平台其核心是微软的组件模型
COM/DCOM。ActiveX的运行机制是,浏览器下载ActiveX控件,脚本或者文档并在本地运行,他们可以作为DCOM客户,
利用DCOM的对象远程过程调用机制访问应用服务器中的对象,也可以通过服务器上ISAPI等接口,访问后端数据库。

  ActiveX是从对象联接与嵌入技术OLE演化而来,在此之前所开发的大量的OLE对象可以被ActiveX所重用,从而节省了
软件开发的投资。ActiveX是一种与语言无关的开发平台,ActiveX控件或者脚本可以用Visual C++、Visual Basic、Java、
 JavaScript 等多种语言实现,因而方便了程序员的开发。然而目前DCOM只支持Windows平台,因此用ActiveX的分布式计算
组件模型只能运行在Windows平台上无法满足异构环境下应用的要求。

2、Java RMI方案
 远程方法调用RMI是Sun公司用Java语言建立的分布对象计算环境。其客户端程序是一个Java Applet或者JavaBeans对象,
它通过RMI内部通信机制调用应用服务器上Java的对象的有关方法,继而以JDBC等方式访问资源数据库。

 因为Java RMI是在纯Java环境下实现的,Java语言本身的可移植性使得RMI有很强的跨平台性。此外,在处理纯Java对象
之间的通信的时候,RMI具有较高的效率。但是RMI只能访问Java对象这妨碍了它与其他语言编写的应用之间的交互,影响了
其应用范围的扩展。从内部实现机制上来看,RMI可以看成一种广义的ORB。

3、COBRA方案
  在该方案中,COBRA客户方程序从HTTP服务器下载执行,与应用服务器上COBRA的应用对象通过IIOP协议进行通信,
调用其指定的操作。COBRA应用对象首先对客户的请求进行认证和解释,根据客户的请求的内容,或者直接访问
资源层的数据库,或者与网络上其它COBRA对象相互交互,共同完成客户的请求。COBRA方案的优势在于它是一个
完整的开放的稳定的分布式对象计算体系,并且具有“即插即用“的软总线机制,而且其具有跨平台、跨语言的特性。

4、EJB方案
 EJB定义了一种服务器端组件模型,它允许商务对象的开发,并可以从一种品牌的CTM组件事务监控器
转移到另一种品牌的CTM。组件(bean)代表一个简单的编程模型,它允许开发者集中于商务目的。EJB的服务器遵循
EJB规范的CTM,则负责将组件生成分布式对象与管理各种服务,如事务性、持久性、并发性和安全性等。
除了基于商务逻辑定义bean外,开发者还要定义bean的运行属性、方法与选择可视化组件的显示属性类似。
组件的如事务性、持久性、并发性和安全性行为能通过一系列属性中选择定义。最终结果是, EJB使在健壮的事务环境中
开发分布式组件系统更加容易。对于那些关键性的任务,尤其高速执行的分布式系统中使用COBRA DCOM
和 JAVA RMI感到复杂的开发者和IT厂商而言,
EJB提供了一个更简单、更高效的开发平台。

 EJB已经成为了一种事实上的工业标准,很多供应商早在规范最后完成前就宣布了他们对EJB的支持。
EJB提供了一种标准分布式组件模型,可以大大简化开发过程,并允许在一个供应商的EJB服务器上开发和配置
bean的能轻易被配置到其他供应商EJB服务器。

 在目前的企业计算环境中,EJB COMCOBRA并列为三大组件标准。
 EJB是用于开发和部署多层结构的、分布式的、面向对象的应用系统的跨平台的构件体系结构。

 采用EJB可以使开发商业应用系统变得容易,应用系统可以在一个支持EJB的环境中开发,开发完之后部署
在其他的环境中。从而随着需求的改变,应用系统可以不加修改地迁移到其他功能更强、更复杂的服务器上。

中间件技术介绍

1、中间件的定义

 由于划分的标准不同,目前对于什么是中间件并没有准确而统一的定义。在众多关于中间件的定义中,
比较普遍被接受的是IDC表述的:

  • 中间件是一种独立的系统软件或服务程序
  • 分布式应用软件 借助 这种软件 在不同的技术之间共享资源,
  • 中间件位于客户机服务器的操作系统之上,管理计算资源和网络通信。

 IDC对中间件的定义表明

  1. 中间件是一类软件,而非一种软件;
  2. 中间件不仅仅实现互连,还要实现应用之间的互操作;
  3. 中间件是基于分布式处理的软件,最突出的特点是其网络通信功能。

在综合现有研究成果的基础上,我们可以给出如下的关于中间件的完整性定义,即

  • 中间件是位于应用软件系统基础软件之间的独立的具有相应层次的系统软件或通用服务,
  • 通过提取可重用的应用模式以及对标识认证授权目录安全性等服务的标准化和互操作,
  • 为应用提供统一的标准化程序接口和协议
  • 隐藏底层硬件、操作系统和网络的异构性,
  • 统一管理网络资源的网络通信,灵活高效地开发分布式应用。

中间件是基础软件的一大类,属于可复用软件的范畴,总的作用是:

  • 为处于自己上层的应用软件提供运行与开发的环境
  • 帮助用户灵活、高效地开发和集成复杂的应用软件


由此定义不难看出,中间件具有如下基本特征:

  1. 独立性:独立于应用程序和系统软件,保证应用程序接口的稳定性
  2. 标准化:支持标准的协议和接口,用来实现互连和应用之间的互操作
  3. 层次化:本身具有的一定的层次,构成中间件的层次开发结构
  4. 透明性:支持分布计算,提供跨网络、硬件和操作系统的透明性
  5. 领域相关性:针对不同的应用领域,需要与应用领域相适应的中间件。

2、中间件的基本作用


 对于应用软件开发,中间件远比操作系统和网络服务更为重要。中间件的作用是为处于自己上层的应用软件提供运行与开发
的环境,帮助用户灵活、高效地开发和集成复杂的应用软件,通常用于系统内部数据库与应用之间的消息传递处格式转换等问题。

 中间件带给应用系统的,不只是开发的简便、开发周期的缩短,也减少了系统的维护、运行和管理的工作量,还减少了
计算机总体费用的投入。其次,中间件作为新层次的基础软件,其重要作用是将不同时期、不同操作系统上开发应用软件
集成起来像一个天衣无缝的整体协调工作。这是操作系统、数据库管理系统本身做不了的,从而节约了大量的人力,财力投入。
另外,在越来越热的电子商务领域,中间件依然大有作为。中间件可以用来广泛地集成电子商务中的各种应用,支持大量客户的
并发访问,使应用开发商快速开发出灵活多变的电子商务应用,并尽快把信息系统和商务活动放到中。


  中间件的作用具体体现在它所提供的服务上,主要包括

  1)通讯服务


  目前的操作系统都支持网络编程接口但是这些接口通常都是底层的并且非常复杂而不利于使用。
中间件则对分布式应用的开发者屏蔽了复杂的底层网络编程细节。
  由于中间件需要屏蔽分布环境中操作系统网络协议的异构性,因此它必须能够提供分布环境下的通讯服务。
基于目的和实现机制的不同,应用间的分布式通讯包括以下三类

  • 远程过程调用RPC
  • 消息
  • 对象请求代理ORB

在这些基本的通讯平台之上,可以构筑各种框架,为应用程序提供不同领域内的服务,如事务处理监控器
分布数据访问对象事务管理器OTM等。

 

  2)并发性服务

  基于中间件的应用必须具有高度可扩展性,通常以每秒所处理的请求或消息的数量(QPS)来衡量。
这种要求在系统中保证最大化的并发性,这样就可以同时执行尽可能多的任务。中间件系统使用
很多技术和模式来增强并发性,例如在服务器进程中采用多线程技术,多线程技术允许中间件子系统
最大化网络连接的处理以及达到这些连接的请求和消息的处理等。

  3)通用中间件支持

  除了提高通信和并发服务支持外,分布式应用中使用中间件服务来解决那些独立于任何特定应用领域的问题。
最常用的中间件服务有目录服务事务服务安全服务管理服务事件服务连续性服务负载平衡服务配置服务

3、中间件的分类


  中间件的种类有很多,通讯和事务处理中间件是中间件层次划分中最为基本的中间件,
它们向下需要网络协议的支持,向上为最高层应用提供基础平台。因此在上述层次划分的基础上,
可以根据功能将中间件进一步细化为以下种类:

    • 通信处理中间件(包括远程过程调用中间件和消息中间件
    • 事务处理中间件
    • 数据存取中间件
    • 分布对象中间件
    • 安全中间件
    • 网络中间件
    • 服务器中间件包括Web务器中间件服务器构架中间件以及专用平台中间件等。

 

2.3 Object 3Tier Infoworks平台的技术介绍


  在证券行业的大型计算机应用系统中,中间件的使用日益普及,中间件已与操作系统数据库并列为三大基础软件。
Object 3Tier Infoworks(o3w)平台是日本野村综合研究所开发的己成为行业标准的分布式多层架构中间件,在日本的
证券行业中广泛使用。通过对分布式应用的开发者隐藏底层信息屏蔽网络和分布式应用的复杂性,并为网络和分布式应用
提供相应的服务,使得开发者可以集中致力于应用逻辑。

  Object 3Tier Infoworks平台是在证券企业、Internet这样的分布式运算环境中开发和管理三层结构的
客户服务器型关键任务应用系统的强有力工具。它具备分布式事务处理应用通信功能,并提供各种完善的服务来建立、

运行和管理关键任务应用系统。开发人员能够用它建立跨多个硬件平台、数据库和操作系统的可互操作的应用系统。
Object 3Tier Infoworks平台是企业、Internet分布式应用中的基础主干平台。

  Object 3Tier Infoworks平台提供了一个开放的环境,支持各种各样的客户、数据库、网络、遗留系统和通讯方式。
它使分布式关键任务应用系统具有大型主机的性能,从而使这些应用系统能够应付数以千计的用户,大交易吞吐量,多
并行数据库存取和大量数据,同时保持较短的反应时间,较高数据完整性和安全性,并且确保全年天,每周天,每天小时
的系统可用性。同时,Object 3Tier Infoworks平台还能让开发人员和系统管理人员享用分布式运算环境提供的好处,
如技术成本的低增长率,灵活性提高,快速应用开发和安装以及业务信息存取得以改善。

  关键业务应用通常是面向事务的,要求具有准确的数据完整性、较好的性能和管理需求。这些需求要求对应用的开发、
调度和操作给出一个结构化的方案。由像Object 3Tier Infoworks平台这样的中间件支持的组件软件模型为分布式环境
处理关键性业务应用提供了一个结构化的解决方案,。
Object 3Tier Infoworks平台和基于组件的应用设计从异构的计算资源中创建了一个虚拟主机在分布式应用系统级提供
可管理的相互关联的资源。
O3W平台具有以下中间件功能


1、通信处理中间件

 由于中间件需要屏蔽分布环境中异构的操作系统和网络协议,因此它必须能够提供分布环境的通讯服务。
通信处理中间件能在不同平台之间进行通信,实现分布式应用中实时、可靠、高效的跨平台数据传输。

 O3W平台采用消息中间件来构建,通过消息中间件来把应用扩展到不同的操作系统和网络环境。消息中间件非常适合
时间驱动的应用,事件发生后,消息中间件通知服务方应该进行何种操作。由于采用消息中间进行编程,消息中间件
可以非常方便地扩展到不同操作系统和硬件平台上。消息中间件的核心安装在需要进行消息传递的系统上,建立消息传递
的逻辑通道,由中间件实现消息发送。消息中间件是一种点到点的机制,既支持同步方式也支持异步方式,因而非常适
合面向对象的编程方式。


2、数据存取中间件
  数据存取中间件适用于应用程序数据源之间的互操作模型。在分布式系统中,重要数据集中存放在
数据服务器中,客户端使用面向数据库的API,提请直接访问和更新基于服务器的数据源,包括关系型非关系型
对象型数据源,也包括经过加密或压缩存放的各种格式的多媒体类型。平台为分布式网络环境下的虚拟缓冲存取
格式转换以及解压缩等带来方便,采用了数据库厂商直接提供的数据存取中间件,如JDBC等。

  数据存取中间件大多基于语句,采用同步通信方式。数据存取中间件使得开发分布式应用简单,但是若在
广域网上使用会带来严重的效率问题,这是因为广域网上语句的交互使得通讯流量过大,同时对数据压缩、加密带来不便。
因此针对不同的应用需求,如对海量数据、异格式数据、压缩数据以及加密数据等,需要分别有相应的中间件。

3、分布对象中间件
  面向对象技术是软件界孜孜以求的目标,传统的面向对象技术通过封装继承以及多态提供了良好的代码重用功能。
但是这些对象仅存在程序中,无法向外界表明它们的存在,因此无法被外部所访问。O3W平台采用了适用于浏览器的
J2EE面向对象中间件,提供了标准的构件框架,使得不同厂商的软件通过不同的地址空间、网络和操作系统相互交互
访问,此构件的具体实现、位置以及所依附的操作系统对客户而言都是透明的。

 

2.4 Object 3Tier Infoworks平台的优点


1、缩短应用的开发周期
  Object 3Tier Infoworks平台的三层结构组件软件模型将用户界面的表示部分业务逻辑部分按客户组件
服务器组件分开,使开发人员能够按组件的思想专注入于业务逻辑的开发,用户界面部分可用流行的前端开发工具
来快速完成。而客户和服务器之间、服务器和服务器之间的通讯,异构平台之间的数据变换,以及服务器和数据库之间
的集成和事务控制都由平台来完成。当数据库或服务器端的业务逻辑改变时,客户端则不一定要改变反之当客
户改变或增加新的客户界面时,服务器端则不一定要改变,大大增加了应用系统的各部分的可复用性。
平台提供的简洁使用户程序能够物理地点透明地在客户和服务器之间、服务器和服务器之间进行各种方式的通讯,
极大地减轻开发人员的负担。

 

2、减少系统运行成本

 没有使用中间件的应用系统,其初期的资金及运行费用的投入要比同规模的使用中间件的应用系统多一倍。

3、减少项目开发风险
 
研究表明,没有使用标准商业中间件的关键应用系统开发项目的失败率高于90%。利用Object 3Tier Infoworks平台有助于
减轻应用软件开发者的负担,使他们利用现有的硬件设备、操作系统、网络、数据库管理系统以及对象模型创建分布式应用软件
时更加得心应手。


4、减少应用开发费用
  对于应用软件开发,Object 3Tier Infoworks平台提供的程序接口定义了一个相对稳定的高层应用环境,不管底层的计算机
硬件和系统软件怎样更新换代,只要将平台升级更新,并保持中间件对外的接口定义不变,应用软件几乎不需任何修改,从而
保护了企业在应用软件开发和维护中的重大投资。

5、非常高的性能
  一方面,平台能够使多个客户连接到一个服务器进程,由这个服务器进程存取数据库,为客户的请求服务。这样,
数据库为处理连接所需的资源大大减少。另一方面,客户和服务器之间,服务器和服务器之间的通讯中,网络上流动的
只有相对较少的客户或服务器的请求和服务器处理的结果,而不再是两层结构中客户和之间的大量请求和应答。

6、系统的安全性
  平台通过结构化用户界面支持应用服务的验证、授权和存取控制,允许用户加入自己的验证服务模块。平台还提供信息加密
服务,允许对网络上传输的信息进行算法加密。


7、技术革新性
  企业对自我建造的基础中间件软件平台的频繁革新是极不容易实现的不实际的。而采用Object 3Tier Infoworks平台,
则对技术的发展与变化可以放心,因为开发Object 3Tier Infoworks平台的野村综合研究所会责无旁贷地把握技术方向和进行技术革新。

第四章证券交易系统的具体实现


本证券交易系统总的处理流程是:

  1. 客户端浏览器发出请求,
  2. 控制器接收用户的请求后,先进行输入项目验证,并决定应该调用哪个业务模型来进行处理,
  3. 再对业务模型所需的接口参数编辑处理,
  4. 然后,模型用业务逻辑来处理用户的请求并返回数据,
  5. 最后用相应的视图格式化模型返回的数据,
  6. 并根据Web页面跳转控制文档来控制Web页面转换,
  7. 把返回的数据以JSP页面呈现给用户。

 本系统使用 O3W_Studio 附带的XML_Creator文件来实现EXECL加载宏功能,这样就能利用该功能生成的XML文档来进行系统功能控制。

  只要定义好

  • Data Store Bean 文件、
  • Web页面跳转控制文件、
  • 模块功能调用文件、
  • 数据变换文件
  • 及接口参数定义文件等Excel文档

  点击EXECL软件的XML_Creator宏功能,就会自动生成相对应的Data Store Bean文件、Web页面跳转控制文件、模块功能调用文件、

数据变换文件及接口参数定义文件等的XML文档。

  1. 首先编写文档:
    • Data Store Bean定义文件、
    • Web页面跳转控制定义文件、
    • 模块功能调用定义文件、
    • 数据变换定义文件
    • 及接口参数定义文件
  2. 然后通过EXECL软件的XML_Creator宏功能,生成相对应的XML文件。
  3. 最后编写JSP页面代码和实现业务逻辑COBOL的代码,并把这些文件及上述的文件配置到服务器上。

4.1、系统视图层的实现


  本证券交易管理系统中的视图部分主要是由一系列页面组成,主要功能是进行请求将模块处理的数据表现给客户端。
JSP页面使用了大量的JavaScript作为共同函数,以此进行软件代码复用,简化开发过程。作为一种嵌入HTML文档的、
基于对象的脚本设计语言,其中很大一部分的语法同JAVA语言很相似,而且的设计可以使它很容易地同语言一同工作,它可以充
分支持JAVAapplet小应用程序,JAVAapplet的小应用程序也可以很方便地访问已有的代码。所以,
可以把JavaScript看成是JAVA语言的某种简化版本。


  在JavaScript这样的用户端脚本语言出现之前,传统的数据提交验证工作均由用户端浏览器通过网络传输到服务器上进行。
如果数据量很大,这对于网络和服务器的资源来说实在是一种无形的浪费。而使用JavaScript就可以在客户端进行数据验证。
JavaScript可以方便地操纵各种浏览器的对象,可以使用JavaScript来控制浏览器的外观状态甚至运行方式,可以根据用户的

需要“定制”浏览器,从而使网页更加友好。可以使多种任务仅在用户端就可以完成而不需要网络和服务器的参与,

从而支持分布式的运算和处理。

在视图层主要使用了以下技术

 

1、TagLib
 在JSP前端页面中使用各种标签完成页面数据逻辑的组织与显示。如(html,bean,logic)

2、国际化的消息处理功能
 在JSP页面中不出现特定语言的字符串描述,将这些统一的字符串信息统一的提取到文件中,通过标签提取。
便于整个系统的语言变更与组织。


3、界面组合功能
    统一组织页面的结构,便于系统改版、维护。


4.1.1视图层的数据交换

  在本系统中的所有的数据交换过程都是通过类型缓冲区来完成的。所谓类型缓冲区,即一块特定格式的内存块,
用来实现客户端和服务端之间的数据交换。Object 3Tier Infoworks平台提供了名为Data Store Bean缓冲区来供开发者使用。
这种统一定义的类型缓冲区可以使它们在跨越不同网络、不同协议、不同构架以及不同操作系统之间得到统一的处理,
这就使得开发者在分布式计算环境中有效地避开了异构网络和异构计算机系统带来的差异,把精力集中在商业逻辑的开
发上。
  对缓冲区的操作有增加、删除、修改等。客户端调用某项服务之前,如需要使用DSB,则要事先对DSB实例进行内存分配

实例初始化工作,再向此缓冲区中写入需要传递的数据同样端首先要从中取得传入的参数,并检查参数的有效性,
再进行下一步操作。在返回数据时,同样要对进行一些写入操作。

4.2.1 COBOL语言的使用


  在本系统中,是采用COBOL语言来实现业务逻辑功能。COBOL的全称是 Common Business Oriented Language,
意即通用商业语言。在企业管理中,数值计算并不复杂,但数据处理信息量却很大。为专门解决经企管理问题,于1959
年,由美国的一些计算机用户组织设计了专用于商务处理的计算机语言COBOL,并于1961年美国数据系统语言协会公布。
经不断修改、丰富完善和标准化,己发展为多种版本。

  COBOL语言使用了300多个英语保留字,大量采用普通英语词汇和句型,COBOL程序通俗易懂,素有“英语语言”之称。
语言语法规则严格。用语言编写的任一源程序,都要依次按标识部、环境部、数据部和过程部四部分书写,

  • 程序结构的“”内包含“
  • ”内包含“
  • 段内包含语句
  • 语句字或字符串组成,

整个源程序象一棵由根到干,由干到枝,由枝到叶的树,习惯上称之为树型结构。
目前COBOL语言主要应用于情报检索商业数据处理等管理领域。

 Java擅长使用者接口的设计,COBOL而则是在商业逻辑上(business logic)十分强大。COBOL被用来
开发存货、银行、支付、流通和股票交易系统,可说大部份重要应用都是用开发的,而且这些都是企业里最最重要的系统。

 COBOL一直是符合业界标准,像是近年分别取得ANSI以及ISO的标准认证,随着环境的变迁,
也不断增加许多新的功能,其中最大的特色在于我们转变为对象导向一的程序语言,这使得一直持续和的合作。
现在就是以协助企业开发组件化的应用为目的。

4.2.2事务的使用


 本系统业务逻辑的实现中采用了事务。我们要求在(分布式)资源上的一组操作被当作一个工作单元(unit)
在一个工作单元中,操作的所有部分一起成功或失败并恢复。在所有情况下,都要求应用维护一个工作单元的成功或失败。
在失败的情况下,所有资源要把数据状态返回到以前的状态,(比如说,工作单元开始前的状态)。

事务的概念即为了在一个工作单元中维护数据的完整性。

一个事务是有下列属性的一个工作单元:

1、原子性(ATOMCITY):一个事务要被完全的无二义性的做完或撤消。在任何操作出现一个错误的情况下,
构成事务的所有操作的效果必须被撤消,数据应被回滚到以前的状态。

2、一致性(CONSISTENCY)均一个事务应该保护所有定义在数据上的不变的属性例如完整性约束。
在完成了一个成功的事务时,数据应处于一致的状态。换句话说,一个事务应该把系统从一个一致状态转换到另一个一致状态。
举个例子,在关系数据库的情况下,一个一致的事务将保护定义在数据上的所有完整性约束。

3、隔离性(ISOLATION):在同一个环境中可能有多个事务并发执行,而每个事务都应表现为独立执行。
串行的执行一系列事务的效果应该同于并发的执行它们。这要求两件事:在一个事务执行过程中,数据的中间的可能
不一致状态不应该被暴露给所有的其他事务;两个并发的事务应该不能操作同一项数据。数据库管理系统通常使用锁来实现这个特征。

4、持久性(DURABILITY):一个被完成的事务的效果应该是持久的。

 

posted @ 2019-06-26 18:23  Eagle_Fly  阅读(1585)  评论(0编辑  收藏  举报