[原创]Java技巧:分布式Jtables处理[1]

[原创]Java技巧:分布式Jtables处理[1]

概要

当显示一个有数万行或者更多行table的时候,需要很快的响应和显示。达到这样目的,可以用一种专门的TableModel,这种模式只有当需要一个数据的时候才从服务器从新获取,因此更少的数据被下载。为了更好的提高效率,行数据可以每次获取50行并且存储在客户端上以便以后使用。下面的文章将说明如何编写这样的分布式table,并且利用它的优势。

Jeremy Dickson著

 

在数据被驱使的年代,显示数万行的table是标准的作业。组成表格的数据一般都是从远程数据库从新获得,这有相当的困难:你的程序是否只下载一次table数据,或者只下载请求数据的第一个块?如果用户只是对开始的部分感兴趣,可是程序在用户使用之前,一开始就下载了所有的数据,这会导致用户等待较长时间,而厌恶它。在Web搜索中,一般一次下载一个数据块,例如在Google中,块的大小是10页的结果。无论如何,在某些情况下,你可能需要在一个table中显示这些数据,但是开始最小化的开始数据给用户。作为建议,你可能需要一个列资料,单元查询和数据编辑的电子table。由于Jtable一个灵活设计,当优化下载数据的时候,可以使JTable有丰富的用户接口。

注释:可以下载这篇文章的代码,地址:http://www.javaworld.com/javaworld/javatips/jw-javatip137.html?#resources#resources

 

分布式存储TableModel


Jtable依据了Model-View-Controller设计模式。在这个模式下,组成数据源被从可视化部分分离,并且控制部分也明确的分成了三个模块(参照http://www.javaworld.com/javaworld/javatips/jw-javatip137.html?#resources#resources)。在JTable实例中,这种模式由接口TableModel组成。这使得JTable有很强的适应性,因为可以在TableModel执行中包括任何模式的数据源,在JTable中TableModel,并且在屏幕上显示table。例如,可以建立一个表格显示多种数据,这些数据可以是来自文件,数据库,或者使用这种方法的消息队列。在这个技巧里面,可以充分显示适应性的优点。

JTable从TableModel载入数据采用了一种懒惰方法:只在需要的时候,从model读取数据,这样比在显示之前读取所有的数据好。当需要显示一个特殊表格单元在显示器上时,JTable在它的TableModel调用方法getValueAt(int row, int column)从新获得数据值。说是懒惰的方法,是因为数据要求这种方法可以被任何方法启动。例如,将数据放置在服务器上,使用一个URL就可以返回这个单元的数据,因为XML. getValueAt()可以分析,返回最终显示在JTable的XML。

无论如何,远程调用是耗时的,那为什么不将请求的多个数据单元捆绑成一个远程调用并且存储需要的额外数据单元?如果请求需要行0,列0,可以调用servlet返回所有0到50行的数据。这就意味着对于所有当前可视表格单元所有数据都服务getValueAt()。当用户成卷下载table,就得到了更多的数据。此外,可以在客户端放置合适行数的缓存区域。当客户端下载超过适当行数的时候,数据最初的已经不被需要的部分将会被覆盖。如果客户向回滚动表格,数据在需要的时候可以从服务器从新获得。
 
执行一定数量的类和接口被定义用于这种分布式存储JTable。(图1)


图1,实现分布式存储table模式的类

 

建立了一个专门TableModel,叫做DistributedTableModel。通过完成类DistributedTableClientCache的所有功能实现TableModel接口方法,类DistributedTableClientCache从数据源获得大批的数据并且暂时存储在客户端。DistributedTableClientCache从一个利用接口的DistributedTableClientCache对象从新获得所有的数据。通过这个接口,恢复了逻辑上需要但是分布式的数据,将这些数据变成我们习惯并且有效的TableModel。例如,方法getTableDescription()返回一个包含了表描述元素的对象-行和列的数量,以及列名和分组的类型。方法Object[][] retrieveRows(int from, int to)在处理当前数据的时候抛出异常。只要TableModel需要一个不在缓存里面的行数据的时候,方法retrieveRows()被调用,然后获得一组行数据。

DistributedTableModel实例建立,构造器调用中使用了三个参数:

·      TableDataSource:DistributedTableDataSource执行。它有专门处理,例如,从Remote Method Invocation (RMI) 或者CORBA service获得它的数据。
·      ChunkSize:必须一次从服务器获得的数据行数。
·      MaximumCacheSize:缓存区可以存储的最大的行数。


图2 显示了数据获得过程的图标

图2 一个流程图,显示了当JTable显示时,DistributedTableModel的获得分布式数据过程。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值