Monthly Archives: 06月 2007

Jmesa系列(三)开始使用JMesa

相关文章: jmesa系列之一:什么是Jmesa jmesa系列(二)Jmesa源码的包结构解读 这次目标很简单:实现服务器端分页列表功能。暂时不包括过滤、排序及Ajax。 诸如过滤、排序及Ajax功能会在过程中逐一加上去。 下面以一个简单的商品列表来说明JMesa的使用方法。 从JSP的代码可以看出.开发者不需要在页面上使用任何的JSP Tag来显示表格,只需要简单把products变量Print出来即可.而显示的逻辑基本上是放到Controller了.肯定有同学有疑问,这样的使 用方法远远不及使用JSP Tag方便啊!为什么要这样做? 这里的显示仅仅是做一个API的使用Demo,为了说明我们可以直接使用Jmesa的API,构造出只要你能想得到的形式的表格展现,而不限制于JSP Tag.你想封装成跟EC一样的Jsp Tag是很容易的事.那就是说,ExtreamTable只可以是JSP Tag.而Jmesa是可以提供Jsp Tag还有Jsp Tag以外的东西.在架构上,作者从EC到Jmesa的转变就是值得肯定的.对了,作者在Jmesa中引进了Groovy,目的我想就是可以让开发人员动态地决定表格的显示啦.效果跟JSP Tag一样,并且更方便. 说说我目前在做的一个报表数据显示应用,同一个页面,可以显示不同构的数据列表,支持过滤,排序等.如果使用JSP Tag是很难达到动态显示数据列的目的,而用Jmesa的API转而易举.. 本文的目的是让大家对Jmesa有个感性的认识.而他的各个元素,如Limit,CoreContext这些,将会在接下来的时间详细说明. 代码:Java代码仅有一实体类,一个Service,及一个Controller Product.java java 代码 public class Product { private static int index = 1; private int id; private String name; … Continue reading

Posted in 技术 | Tagged , , | Leave a comment

Memcached大量数据缓存策略探讨

使用Memcached。需求是这样的:系统需要把大量的关键常用数据(十万条以上,在不断增长中)放到缓存中,为提高程序执行效率。那么这些数据在缓存中的存储方式是怎样的时候,效率最高?站在目前的缓存工具角度来想,假设要缓存的数据为手机的订阅关系,可以有下面两种做法: 一,在缓存中建一个Cache,键为subsription,值则是一个大哈希表,哈希表存放所有的数据,以唯一的手机做Key,相关订阅信息做Value。 如此要查询一个手机的订阅数据,要先从Cached里拿到到key为subscription的缓存,这是个大哈希表,然后再从哈希表里按手机拿出订阅信息: Map datas = memcached.get(“subscription”); Subsciption s = datas.get(mobile); 这样的缺点就是查询客户端会从Memcached的Server拿到一个巨大的Map。不仅网络开销大,并且客户端也要开辟大块内存来存放这个临时的Map。 二,每一个订阅关系作为一个缓存实体放到Memcached中。那就意味着查询极为方便: Subscription sub = memcached.get(mobile); 但是在Memcached里就会有几十万个缓存实体了,不知道是否会给查询带来速度上的影响。另一个不便的地方就是从缓存里拿不到订阅关系的总数(当然这个需求显得很鸡肋)。 下面是我自己的一些幻想。假如我按照做法一来存放数据。查询能这样就好了: Subscription sub = memcached.get(“subscription#” + mobile); 不需要担心服务器端给客户端返回一个大Map,又占用客户端巨大的内存资源。所有的嵌套查找工作交给服务器去做,最后返回我想要的订阅关系即可。当然,我依然可以使用get(“subscription”)拿回一个大Map。 不过看起来我这样的想法应该是有点不实际。更多的是我想请教下大家,在大数量缓存的情况下,大家会使用什么样的缓存策略?

Posted in 技术 | Tagged | Leave a comment

Jmesa系列(二)Jmesa源码的包结构解读

Jmesa源码的包结构大致分为四个包: org.jmesa.core Jmesa的核心包,所下面定义下最核心的接口CoreContext,CoreContext的作有容后再述,下面有四个子包: org.jmesa.core.filter 过滤器(按条件对纪录进行过滤) org.jmesa.core.sort 排序,该包提供纪录按指定列进行排序的功能 org.jmesa.core.message I18N资源文件实现,使用Java内置的ResourceBundle实现。较简单 org.jmesa.core.preference Jmesa选项,使用Java内置Properties实现。也较简单 org.jmesa.limit 该包提供对纪录进行过滤的功能,limit的原意为限制,这里表现为过滤。Jmesa提供接口让开发人员自定义存放Limit的地方。该接口就是位于该包 下面子包state下的State接口,用来保存当前用户查询选项或参数的状态,这些参数可能包括过滤条件(Filter),排序条件(Sort)以及分 页信息等。 org.jmesa.view 视图,亦即展现。该包下定义了展现表格的接口及提供了两种实现,CSV及HTML。展现的原理很简单,一个视图拥有一个被展现的组件(Component)和渲染器(Renderer)。使用渲染器来渲染组件。那么自然而然,View包下面又看到两个子包: org.jmesa.view.component 定义了表格需要的组件,即表格,行,列。 org.jmesa.view.renderer 定义表格所需要的一系列渲染器,如行渲染,列渲染,单元格渲染等 org.jmesa.web 为在Web环境中使用Jmesa提供的一系列便利的类。 这就是Jmesa源码的分布。个人觉得结构很清晰明白,代码看起来也不费力。代码是最有说服力的文档。有时候,看文档还比不上直接读源码。

Posted in 技术 | Tagged , , | Leave a comment

jmesa系列之一:什么是Jmesa

Jmesa是ExtremeTable的作者基于ExtremeTable并进行重写的新项目。ExtremeTable己停止更新。与 ExtremeTable相同的是,Jmesa同样是一个强大的Table组件。而与ExtremeTable根本不一样的是,ExtremeTable 是一套JspTaglib,而Jmesa则希望成为一套Table组件的Api,不仅仅可以输出到WEB页面上。 首先,我还没有正式使用过ExtremeTable,当然没有资格做任何评论。而我本身是一个能避免用Jsp tag就不用的人,我决定在自己的项目中使用Jmesa。看过其核心的代码,接口清晰并且简单,可扩展性是很不错的。也可以强烈地感觉到作者把作品从 Jsp Taglib到组件产品的转型的决心。 接下来,我将会一边学习Jmesa,一边在项目里面使用。过程中将会尝试写一些学习心得或者是文档翻译。 Google Jmesa,中文网页除了Ecside的作者Fins提过一下,基本上找不到其他资料。希望自己可以为Jmesa的中文文档贡献点力量。

Posted in 技术 | Tagged , , | Leave a comment