Tag Archives: java

给Scala新手的猫纸

猫纸,即广东话说的CheatSheet。 这份Scala猫纸其实是一份示例代码再加上一些说明组成的。该示例代码是从我在上一次珠三角技术沙龙使用的版本精简过来的,代码行数缩减到了100行以内,里面已经包含了Scala大部份常见的语法以及特性,仅供新手参考,高手请无视。其他更高级的特性由于时间和篇幅的原因没有包含在里面,如类型的隐形转换、并发编程的更高级使用方式、“:”的乾坤大挪移神功等等。这些容我在以后的关于Scala DSL或分布式并发编程的文章中再进一步说明吧。 这里也顺便讲一讲这段代码的歌词大意吧,注意了,第56行开始才是主程序的入口: 从前有个叫techparty的用户组(Group)在举办活动,有一些技术爱好者(Member)参与了活动,活动开始时大家先自我介绍,然后带来Topic的成员开始宣讲,活动完毕以后大家一起去了聚餐,最后各自返家。会后有很多人来询问关于techparty的一些事情,组织者忙不过来就分发给几个组委来同时回答这些问题(并发编程原型),没想到,问题的答案竟全是一样的:名字叫Jeff的人实在太多了。 好了,不妨碍大家用纸。点击有大图!

Posted in 技术 | Tagged , , | 8 Comments

《learn scala in half an hour》讲稿及录音

本月23号我参加了珠三角技术沙龙2011年1月广州小沙龙,并在会上给大家做了一个关于Scala的分享,形式是通过一个设计好的剧本(以沙龙聚会为背景),现场编码至完成该剧本为止,在编码的过程中逐步引入Scala的各种特性。这里先送上讲稿及现场录音还有演示代码,稍晚我将整理一份文字版的《learn scala in half an hour》。 Scala jeff View more presentations from jeff kit. 现场录音在这里。 示例代码在这里。 如果有兴趣与我探讨Scala,欢迎与我联系或给我留言 :)

Posted in 技术 | Tagged , , , , | 4 Comments

介绍ExtremeTable的下一代Jmesa

说到ExtremeTable(以下简称ET,呃,,,ET…..),可以说不知道的人甚少.不过估计用的也未必多罢了.今天,给大家介绍一个由ET的作者重新实现的一套关于Table的API.JMesa. 我是一个偶然的机会知道Jmesa,我在做一个数据展现系统的时候想寻找ET的帮忙,但发现ET己不再更新,作者把精力转移到了新的项目中,也就是这个 JMesa.这个项目的目的是为开发者提供更有效的表格展现的API,而不是简单的TagLib.无论从灵活性,易扩展性,易用性,均比ET上了一个层 次.最近Release的版本里面,并不包括TagLib.而在下一个版本(2.1.0)将会加入TagLib,目前TagLib己经可用,在SVN里已 有.只是等待下一个版本的发布,其间会有一些更新,不过会兼容目前的TagLib的. 假如我从API开始介绍JMesa,恐怕并不是个好的办法,像我以前的文章里面有介绍,结果反响不大.这次决定从TagLib入手,来给大家介绍一下Jmesa. 大家可以从附件里拿到一个Demo.注意Demo依赖JMesa以及其他Lib.在Lib文件夹下有详细说明. 现在来看看JMesa的使用: <jm:table id=”product” items=”products” caption=”product listing”> <jm:column property=”name” sortable=”true” filterable=”true”/> <jm:column property=”price” /> <jm:column property=”createdTime” /> <jm:column property=”id” title=”edit”> <a href=”viewProduct.action?id=<jm:property/>”><jm:property name=”name”/></a> </jm:column> </jm:table> 估计比较容易看得懂的代码吧. Jmesa 的检签规范当中只有三个Tag:Table,Row,Column.而当前的TagLib实现中只实现了Table和Column两个(Row是可选 的).另加一个Property的Tag.此阶段,Property的Tag是很有用的,其起到的作用与Webwork的PropertyTag相差无几, 用来获得对象的某个属性.之所以使用Property Tag是因为当前的TagLib有个限制就是暂时不支持如JSTL的${}这种写法.将来会支持,届时Property Tag也会继续获得兼容.Jeff比较倾向于使用迭代的方式实现Tag,那样可以支持${}这样的写法.不过作为TagLib的开始,问题不大.有时间再 重构一下TagLib,支持JSTL的写法. 好了,来说一说这些Tag的使用方法: Table: Attribute Description id 表格的ID(必须) items 对象或者Map的集合 (必须) caption 表格的标题 theme 表格的主题,自定义样式 exportTypes 使用逗号分割导出的类型,目前支持导出类型有CSV,Excel width … Continue reading

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

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

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

JBPM gop的四个模型

GOP = groph oriented programing 见: http://docs.jboss.com/jbpm/v3/userguide/graphorientedprogramming.html 面向图形编程。 JBPM的流程执行模型以下面几个模型为原型: Node 节点,Action 动作,Transition 流向,Excution 执行。 简单看过GOP的代码,初步了解了JBPM的执行模型及原理。先记下来。 Node:节点代表流程中一个状态,如开始、结束、等待等。一个节点里可以通往其他节点,我们把通往其他节点这样的表象叫做”流向”。一个节点可能过往N个节点,即在流程中的某一个状态,我们下一步可以去到另外几个状态。 另外 ,节点还有一系列的动作,在接受不同的事件时作出响应。而该响应不是通往其他节点,而是进行一些具体的动作,而不离开此节点。 总结一下节点。一个节点内可以有一系列的流向及一系列的动作,可以响应事件。 Action:动作,实现一个执行的方法。当节点响应某事件时,如果该动作被绑定于该事件,该会被运行。 Transition:流向。每一个流向有一个名称及其将流向节点的名称。名称用来标识流向,目标节点名称起导航作用。 Execution:执行。代表执行一次流程。执行的一个必要属性是节点,在流程的每一个不同状态,执行内的节点也不一样。流程去到某一个节点,执行就把这个节点作为自已当前节点,可以去触发当前节点的事件,或者进行流向跳转。 以后再慢慢展开写下自已的心得。

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

JBPM quick start 第九章 流程模型

9.1概述 一个流程定义是对一个业务流程的正式说明,以及它是基于有向图的。该图是结点(node)与流向(transition)的组合。图中每一个结点都是一个特殊的类型,结果的类型决定了该结点的运行时的行为。一个流程定义有且仅有一个开始状态。 一个令牌(token)是执行的轨迹。令牌是一个运行时的概念,其维护着速个图中指向结点的指针。 一个流程实例(process instance),是流程定义的一次执行过程。当流程实例被创建 ,一个令牌被创建,该令牌叫做这个流程实例的根令牌并处于这个流程实例的开始状态。 信号(signal)命令令牌继续执行,当接收到一个未命名的信号时,一个令牌将通过默认的“离开流向”离开当前结点,如果该信号有明确命名,令牌将通过指定的流向离开该结点。给流程实例发送命令是由令牌来代理。 当令牌进入结点后,结点会被执和,结点本身负页让流程继续,而让流程继续就是让令牌离开当前结点,每个结点类型可以实现不同的动作来让流程继续。一个结点如果不继续执行则可以看作是一个状态。 动作(Action)是在执行流程的时候事件触发执行的Java代码,图是软件需求的重要表达方式,但是图只是一个软件的视图,它隐藏了许多技术的细节。动作就是把技术细节隐藏在图以外的一种 机制。动作可以装饰图。主要的事件有:进入一个结点,离开一个结点,开始一个流向等。 9.2流程图 流程定义的基本设施是由结点及流向组成的图。那些信息是由一个叫processdefinition.xml的XML文件来定义的,每个结点有自已的类型,如状态、选择、分支、合并。每个结点有自已的流向集,每个流向有其唯一的名称。如,下面一幅图是一个JBAY拍卖流程的流程图: 下面是其对应的processdefinition.xml <process-definition> <start-state> <transition to=”auction” /> </start-state> <state name=”auction”> <transition name=”auction ends” to=”salefork” /> <transition name=”cancel” to=”end” /> </state> <fork name=”salefork”> <transition name=”shipping” to=”send item” /> <transition name=”billing” to=”receive money” /> </fork> <state name=”send item”> <transition to=”receive item” /> </state> <state name=”receive item”> <transition to=”salejoin” /> </state> <state name=”receive money”> <transition to=”send money” /> </state> <state name=”send money”> <transition to=”salejoin” /> </state> <join name=”salejoin”> <transition to=”end” /> </join> … Continue reading

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

初识动态Bean

来自Jakata的Common-beanUtil包,动态Bean可以让我不需要事先编一个JavaBean而可以在运行中生成一个 JavaBean并使用。省事不少。刚接触了一个BasicDynaBean,感觉像是一个Map,这是个简单的封装,再复杂些的封装有待研究。下面是个例子,看过文档之后试验用的,记下来用以备忘。:) import java.util.Date; import org.apache.commons.beanutils.BasicDynaClass; import org.apache.commons.beanutils.DynaBean; import org.apache.commons.beanutils.DynaClass; import org.apache.commons.beanutils.DynaProperty; public class TestService { public static void main(String[] hey) throws Exception{ DynaProperty[] pro = new DynaProperty[]{//准备一个属性,动态定义类依靠这些属性来决定类的构成。 new DynaProperty(“title”, String.class), new DynaProperty(“content”, String.class), new DynaProperty(“createdTime”, Date.class), new DynaProperty(“id”, Integer.class), … Continue reading

Posted in 技术 | Tagged | Leave a comment

pager-taglib 体验

可能是自已习惯了用自已的分页组件。一直不知道有这样一个现成的分页标签。直到那天,白衣跟我提起了一下,我Search了一下,发现了Pager-taglib这个东东。支持多种风格的分页显示。 先简单介绍一下Pager-taglib。实际上,她是一个Jsp标签库,为在JSP上显示分页信息而设计的一套标签,通过这些标签的不同的组合,会形成多种不一样的分页页面,风格各异,她自带的DEMO就有七种左右的分页风格,包括Google的分页风格。而需要订制自已的风格的分页页面也非常简单。 接触的当天、匆匆看了下Demo和文档,发现这个很早(2002年最新版一直到现在)就已经有的东西,似 乎比较擅长显示端分页。如,把所有的数据传到页面,通过参数设定页面大小等,可能得到很完美的分页效果。 第二天回家,做了些小动作,把一个页码参数塞进URL里面,让程序在页面之下分了页再把结果传出来,简单地实现了服务器的分页的功能。 Pager-taglib的文档很详尽,我如果有说也只有翻译的份,要是真的翻译也就免了,文档还是挺容易看懂的。于是我开始作了另外一个小Demo,用了原先Demo里面的一个分页风格(Simple),稍作修改。希望能帮助自已理清脉络和对朋友们有用:P 一、模拟业务类: package  net.jf.ajax.business; import  java.util.ArrayList; import  java.util.List; public   class  PageManager  { private   static  List names; { names  =   new  ArrayList(); names.add( ” black ” ); names.add( ” black ” ); names.add( … Continue reading

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