日期:2014-05-19  浏览次数:20630 次

J2EE业务层模式--值列表处理器
问题:

    远程客户端要遍历一个很大的结果列表。

    很多J2EE应用系统都会让客户端执行各种查询。这些查询经常从表现层开始,有业务层执行,最后显示在浏览器中。

   可以用很多方法来完成查询。如果是entity bean 实现的业务对象,可以用entity bean 的finder方法。如果没有用entity bean ,那么通常就会使用数据访问对象执行查询。当查询只返回一个很小的结果集的时候,不会出现什么问题。但是查询返回了大量匹配的entity bean ,那么entity bean 的finder方法的效率就会很低了。

   另一个问题在于,也许客户端没有处理大型结果集的能力,所以就要由服务器来处理结果,客户端往往都不会使用查询的全部结果,所以在查看,使用了一部分结果之后,剩下的也就抛下不用了。比如用户可能用浏览器执行一次查询,查看了开头的几条结果,抛下了剩下的结果,有执行另一次查询了。

  所以,通常不需要把整个的查询结果都返回还给客户端,如果客户端只显示了前几条结果,然后就抛下了这次查询,那么网络的带宽没有浪费,因为数据可以再服务器那里缓存着,可能永远也不会送到客户端。

约束:

    需要避免使用EJB finder方法来处理大型的查询造成的负载。

    需要实现一种只读用例,这种用例不需要事务

    需要为客户端提供一种机制,能够高效率的进行查询,并且遍历一个大型的结果集

    需哎哟在服务器端维护查询结果

解决方案:

    使用值列表处理器来执行查询、缓存结果、并且让客户端遍历、选择查询查询结果。

    值列表处理器提供了查询和迭代的功能。为了完成这一一次查询,值列表处理器使用个数据访问对象执行查询,从数据库获取匹配的结果。即使应用系统使用了entity bean 实现业务对象,本模式也避免使用ejb finder方法。