第57章高级数据管理服务_第1页
第57章高级数据管理服务_第2页
第57章高级数据管理服务_第3页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第57章高级数据管理服务本章补充了在数据管理服务( DMS )的前一章节,通过懒惰关系的工作收集解决项目 暂停错误和管理用户指定数据的技巧。57.1 DMS的概述有很多的途径可以应用DMS,这些可用的途径有时让人晕头转向。从权衡懒惰关系和渴望关系优势的对比,到选择大多数的可用的通讯渠道和端点、最合理利用客户端和服务器端的库。在这一过程中,有一些缺点是可以避免的。本章涵盖了三个专题项目相关的一些DMS项目。这些是可能没有被正式文件所涵盖。简要到详细信息的建模一一 通常情况下,在给用户提供一个项目的全部信息之前都会先列出以个简要信息。通过LCDS会有很多的实现方法,但是结果却有一些微妙却重要的不同

2、。克服item-pending的错误LCDS的空对象错误要进行对 MXML透明的绑定处理,特别是 ActionScript代码。封装一个可以找出item-pending错误的简单的函数,反复使用它直到所有项目的未决部分都被检查过。管理共享和User-Specific 的数据 一一LCDS可以很容易的实现用户之间的数据 同步,相反有时一个清晰的只属于个人的数据模型是必须的。在本章的最后以官方文件为基础指出了一些重要的但是没有在此书中详细介绍的技巧。57.2概要到详尽的建模许多大型的互联网应用程序在允许用户“放大”选定项目并查看详细信息之前都先罗列出它的概要信息。例如,电子邮件客户端经常显示摘要信

3、息,在用户的收件箱中列出包含标题,发件人和邮件的日期。 当一个客户选择一个消息,它就会显示出它所属的邮件的正文或全部会话内容。这是从性能和内存角度选择出的模式,因为它只需要预先提取简要的资料。没有必要在用户只想查看其中一个或两个有关细节的时候提取所有会话的全部详细内 容。相反,他们可以根据他们的需要进行提取信息。此行为可能引导LCDS开发利用懒惰关系的优势填充信件的具体内容,使用管理对象模型类似如图57-1EmailSummary+ id :String+ title:String+ sender:String+ sentDate:Date+ received date: Datethread

4、<lazy>EmailDetails+ EmailSummaryO+ id :String+ body:Stri ng+ attachments :String+ EmallDetailsOFigure 57-1然而,这决定不应掉以轻心,因为这可能会导致性能不佳,更高的内存消耗,和不必要 的服务请求-也就是原意相反的!这取决于所涉及的数据,如何使用绑定,以及以何种方式 用户可以与数据交互。想象一下,用户界面是一分为二,就是电子邮件的摘要列表左侧,而右边,是所选信息的详细信息。如果用户选择第一个信息, 然后在列表中快速向下滚动光标。所有信息都将被选取。如果绑定是用来呈现懒惰的关系,通

5、过信件的具体内容,那么每次消息被选中,其细节将自动从服务器提取。这将导致许多不必要的服务请求, 并在被管理对象模型规模的增加, 因为这些细节对象在被归还时不会被自动清理。通过获取项目替换懒惰关系在这样的情况下,一般最好使用getltem ()或fill ()方法而不是懒惰关系之间建立摘要和详细信息链接。这使得邮件细节的实际接受和后期的清理更加容易控制。电子邮件客户端实现可以选择在内存中只以一个邮件的形式保存电子邮件的全部会话,而不是每查看新E 厂日 W*d.:5!ring-:论 iStrirj mdr : Srir: -S?itD3t= :* EmailS umma ry()信息就越来越多的收

6、集更多的数据。图57-2显示了概要到详细的 FILL方法的定义。Ernail5umrriaryKt5»mbls,EmailDetails Ass; mbter|-MfEmai Summar«i>1*summarD :String):CoNectionEmaUktails+ i 二:Stnrz+ tDdh>' :String -砒二r 小:Strirf -ErrllD-ELdllSI IFigure 57'2该 EmailSummaryAssembler 定义一个 FILL 方法,getEmailSummaries (),填充 EmailSumma

7、ry管理对象集合。EmailSummary ID属性可以用作第二个FILL方法的参数,getConversation (),在 EmailDetailsAssember 中的填充 EmailDetails 管理对象集合的方 法只适于单独的会话。在一个EmailSummary从列表视图中被选中的时候需要协调客户端这边使当地调用getCo nversatio n()来填充方法。57.3 克服 Item-Pending 错误Item-Pending错误对LCDS来说相当于空对象错误对Flex。他们经常意外的发生,通常是因为小的编程错误或是系统变更的副作用。 一个单元测试套件可以很容易地抵御空对象错

8、误,但难以保护 Item-Pending 错误,因为他们可能出现或消失取决于服务器的配置更改。绑定表达式是最简洁的处理 Item-Pending 错误的方式,当绑定到一个懒惰关系属性时, Item-Pending 错误的发生就会被绑定结构吞没。每当属性被接收,绑定就启动,直到所有的 关联都被装载。例如,如果个人到地址的关联是之后的,哪么随后的MXML 将会隐藏Item-Pending 错误,然后接收地址数据提交给street。<mx:Label text= ” person.address.street ”/>但是有时会有 Item-Pending 错误需要提交给内部编程处理的 A

9、ctionScript 类。此传统的 方法是附加响应这个 Item-Pending 错误,所以当一个属性被接受时结果处理函数就被调用。 然后结果再次调用函数就需要懒惰关系。这种方法有一定局限性。 如果有问题的属性链有一个以上的惰性关联, 那么 fetchAddressResult ( )方法本身可 能引发 Item-Pending 错误 。 处理不同级 别的 个 别 Item-Pending 错误是十分冗杂的,所以需要更好的解决办法。57.3.1 Repeated AttacksRepeated attack 是一种解决在 Action Script 中这种错误的简单技术。 它通过多次调用 (

10、或attacking)能引起Item-Pending错误的代码块直到不再发生这样的错误。错误处理代码限制 于一个单独的地方。这是通过高度递归响应挂接到原来的函数,如下所示这种技术允许processPersonalDetails()函数内部代码保持简单,而不去关注Item-Pending 错误。该函数可以被编码,犹如渴望关系,而不是懒惰关系,创建的代码,其他开发人员更 容易阅读和理解。注意一个被 try-catch 围绕的函数被多次调用时这个技术是很重要的。这种技术相比效 率更在意简洁, 因为目标函数虽然简单但是在逻辑上可能处理了很多次。在某些情况下, 可以更好地修改管理的数据模型,以减少懒惰关

11、系。57.4 数据管理与用户特殊数据DMS 便于用户之间同步数据, 但有些时候数据需要特殊保存到单个用户, 而不是共享。 事实上,协作应用程序的数据形式通常即需要有管理的数据模型共享的部分可以用来访问和 被多个用户同时更新。 也有其它部分只属于个人用户。 一个像这样的数据管理模型需要进行 仔细设计,以确保私有的信息不被共享和错误同步。5741 个简单的即使消息系统考虑建立一个即时消息到一个Flex应用程序的系统内案件。用户可以将消息发送到一个或多个收件人,然后它将作为一个新的未读邮件出现在收件箱中。当收件人打开这个邮件,它将被标记为已读。 这个模型中,主要信息的详细信息一一主题,信息体和发件人

12、一一都是在收件人之间共享的, 但是这封邮件的已读与未读的标记是对于用户所特有的。一个简单的即时信息系统的信息数据模型如下所示Figure 57-3.+ id :Strip?+ rscipent :lls«rD=t3 its0据*+ id String亠 :Sirhj+ 陶:Sbrij+ attachrn?rts:Array:DateFigu re 57-3MessageDetails类包含了一般的信件信息,而UserMessage类拥有用户特有属性。从UserMessage类到 MessageDetails类有多对一的关系。MessageDetails类有一对多的关系与用 户类来为信

13、息创建收件人模型。每个UserMessage类通过一个一对一的关系从属于单独的一 个用户模型。可以通过这本书的InstantMessaging项目找到这个简单的即时消息系统的源代码。它提供了一个部分共享,部分用户独有的数据管理模型的例子。另外,它演示了一个AMF流连接到高性能的 NIO-server和addltemToFill ()以Java LCDS库推动用户特有服务的有效改 变的特征。建立一个新的信息详细项目通过LCDS,有各种方式创造新的管理的数据项。他们可以创建使用的CreateItem ()方法的客户端,或增加到了一个已经管理的集合,或者他们可以直接在服务器上拖拽出客户端。在即时通讯

14、系统的情况下,客户首先创建一个MessageDetails类的新实例时,点击发送按钮,如下所示消息对象被构造,那么它的属性设置为各种输入控件的值。收件人的属性被设置成一个发件地址指向的被管理用户对象的链性集合。新信息在提交给服务器确认之前就被传递到数据服务的createltem()方法中,因为自动提交功能被禁用了。这个导致了新对象被传递给相 应服务器的createItem()方法。5743创建和提交用户邮件在服务器端,MessageDetailsService目标使用 Java对象适配器和一个自定义汇编, MessageDetailsAssembler 。 createItem() 方 法 的

15、执行 既支 持新的 MessageDetail 对 象使 用InstantMessageData 类,同时也支持对每个信件接收方创建和维持新的 UserMessage 对象。 这些对象到时会通过 DataServiceTransaction 类的 addItemToFill() 方法发送到正确的用户那 去。如下:数据的创建与维持通过数据的成员变量被 InstantMessageData 方法所处理。在示例项目 中,类实际上并不存在的数据到后台的数据存储, 而只是几个简单的维持在内存中的数据结 构。方法的重要部分是 DataServiceTransaction 类的使用。当前事务是首先抓住静态的

16、 getCurrentDataServiceTransaction() 方法。在每个循环之后,都为下一个邮件收件人创建一个 新的用户对象,然后通过 addItemToFill() 方法处理交给用户。这种简单的处理工作,因为 UserMessageService 填写方法是通过用户的 ID 参数,所以每个用户都有自己的填写方法。回到客户端,新UserMessage将由一个UserMessageService目标数据服务接收并添加到 信息管理集合。由于 UserMessageService 服务与 MessageDetails 有渴望关系,相应的 MessageDetails对象将与UserMes

17、sage一起被发送到客户端。这个邮件就会出现在控制列表, 当一个用户点击这个邮件,它的已读标记设置为true。由于这个UserMessage属于用户特有, 这个更改不与其他用户同步,这个情况是正确的。5745 AMF至U NIO终点的流即时信息的实例也演示了一个 AMF 流连接到通过 LCDS2.6 提供的高效 NIO 服务。这 种结合为用户提供了丰富的经验,因为一个永久的流连接是从每个客户端服务器进行维护, 使 LCDS 可以立即将新的消息发出去。 NIO-server 的使用意味着多个用户可以由同一 JAVA 线程进行服务,这样可扩展性就比被线程阻塞规则限制下的servler-based

18、终点方式大很多倍。channel 和 end point services-config.xml file 中的配置此频道中的定义, StreamingAMFChannel 是搭配 StreamingNIOAMFEndpoint 。配置属性 指定服务器将发送心跳消息,每个连接的客户端每 10 秒保持流连接。用户代理元素用于配 置特定于浏览器设置,确保流连接可适当确定,并限制每节并发连接数。 有关配置流渠道更全面的详细规定是在“流 AMF 和 HTTP 通道”的 LCDS 开发指南一节。57.5 深入学习有很多重要的论题虽然没在此书中提及但是确在官方的LCDS 开发指南中有详细的介绍。在着手一个

19、重要的 LCDS 项目之前,应鼓励开发者详细阅读开发指南,因为它涉及了 数百页的细节功能介绍。我们要特别注意数据管理服务的以下三种特征, 因为我们不是曾经忽略过就是仅在书中 稍微提到过。等级数据 这本书中所列举的各个样例应用都采用了一个独立的DMS 终点(数据管理服务)来管理一个单独的类。事实上,一个 DMS 终点可以被用来管理一个类型层次,尽 管会有所限制。这些类型层次中的各个类必须共享同一个身份和联系的性质。数据分页 尽管样例应用里解释并使用了客户对用户之间的分页, DMS 也支持后台 数据库(或其他系统)和服务器上的装配器层之间的分页。这对于把 DMS 应用改变到非常 大的数据设置。而且

20、,有了 LCDS2.6 之后,与 DMS 终端之间的关联也支持分页。冲突解决 通常当用 DMS 建立一个合作应用时,解决数据冲突时很必要的。通常是 在多个用户同时改变同一个已经被管理好的数据属性的时候需要解决冲突。 LCDS 图书馆具 有侦查与解决这种冲突的特征。下面一个话题不是针对 DMS ,而是整体应用 LCDD 的。它们对开发与调度企业 LCDS 应用很重要。适应性调查 这是一个高级的服务器端可伸展性的一点, 它允许开发人员修改 LCDS 服务器的信息排队等待和发送的行为。 可以用来提高服务质量和效率, 截流投送率。 将多个 信息混合为一个,或是丢掉稍微老旧的信息,用更新的来取代。安全性 LCDS 可以与 J2EE 的应用服务器的安全框架合为一个,从而被调用,但它 也可以支持自定义身份验证和授权的处理过程。 对每一个安全的沟通渠道的变化, 并有凭据 可以通过代理服务从客户端远程 HTTP 的 SOAP Web 服务的服务。用白名单和黑名单可以 保护 NIO

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论