You are browsing the archive for 2009 02月.

春节回乡游:黎明千龟山风景一日游

1:02 pm in 生活点滴/Enjoy Life by aronezhang

 

在丽江古城的同一个客栈中,刚好有从杭州驾车到丽江旅游的一对夫妇,也想到黎明去感受一下还未被深度开发的风景区,因此我和LP就和她们合伙,一早从丽江古城驾车前往丽江市玉龙县的黎明乡。

 

Read the rest of this entry →

春节回乡游:丽江古城

9:44 am in 生活点滴/Enjoy Life by aronezhang

 

已经好几次带着LP回老家过年的时候准备顺便在云南几个有名的景点去偷闲一下,可是很多次都是由于各种原因而导致我们的旅游计划流产,刚过的春节终于和领导请了年假,LP也是在扣工资的情况下请到了几天假。在老家过完初五后,通过转机昆明我们踏上了丽江旅游的旅途。

 

下面是记录这次古城游的几个小故事。

 

Read the rest of this entry →

jBPM开发:上下文(Context)和流程变量

3:08 am in Java开源 by aronezhang

 

上下文同流程变量有关,流程变量是同流程实例相关的key-value对信息,在jBPM流程开发过程中需要频繁的存取变量。

 

Read the rest of this entry →

jBPM开发:流程图的组成元素

2:37 pm in Java开源 by aronezhang

 

上一篇文章中我们实现了一个简单的审批流程,但是对于流程中涉及的元素没有做任何的解释,本文主要针对的流程的主要组成元素进行描述。

内容根据 jBPM的用户手册进行描述,主要描述一下后面将要实现的一个实际例子中所涉及的元素。

 

一,基本概念和名次解释

流程定义(Process Definition)是基于定向图表示的一个业务流程的声明,由节点和转换组成,图中的每个节点都有一个特定的类型,节点类型定义了运行时的行为,流程定义有且只有一个开始状态。

令牌(Token)是执行的一个路线,令牌是运行的时间概念,用来维护图中指向节点的指针。

流程实例(Process Instance)是一个流程定义执行的实例,当一个流程实例被建立后,一个令牌也为主要执行路线建立了,这个令牌称为这个流程实例的根令牌,它的位置处于流程定义的开始状态。

一个信号(Signal)指示令牌继续流程图的执行,当接受到无名的信号时,令牌将用缺省的离开转换离开节点,当转换名字在信号中明确指定,令牌将使用指定的转换离开节点。

在令牌进入节点后,节点被执行,节点负责继续图的执行。图执行的连续是通过让令牌离开节点来完成的,每个节点类型为了连续图执行实现了不同的行为,一个节点如果不能传播执行将被认为是一个状态。

动作(Action)是在流程执行中在事件上执行的一段Java代码。动作是一种在图形表示之外增加更多技术细节的机制,一旦图放在某个地方,它可以使用动作来修饰。

 

二,节点的职责

流程图由节点(Node)和转换(Transition)组成。每个接点有一个指定的类型,节点类型定义了当执行到达这个节点的时候将发生什么,jBPM 预定义了一套节点类型,开发人员可以编写自己的代码实现节点的行为。

节点有2个主要责任:

首先是执行Java代码,Java代码和节点的功能相关,如建立一个新的任务实例、发送一个通知、更新数据库等等;

其次,节点负责传播流程的执行,节点有下列可选的传播流程执行的选项:

  1. 不传播执行。节点的行为是作为一个等待的状态
  2. 执行节点的离开转换来传播执行。令牌到达节点后通过一个调用 executionContext.leaveNode(String)方法来达到离开转换,节点可执行一些客户化的程序逻辑,然后自动继续执行流程,不会等待。
  3. 建立新的执行路线。节点可以决定建立新的令牌。每个新令牌表示一个新的执行路线,并且每个新令牌可以通过节点的离开转换被调用。一个很好的例子就是fork(分支)节点模式的行为。
  4. 结束执行路线。节点可以决定结束执行路线,令牌一旦结束表明执行路线执行完成。

 

三,常用的节点类型

基于实用的原则,本节只介绍一些常用的节点类型,并没有覆盖全部的类型。

  1. 任务节点(Task Node)clip_image001任务型接点代表一个或多个可以被人执行的任务。当执行到达一个任务节点,任务实例将在工作流参与者任务清单中被建立,之后节点将被作为一个等待节点。因此当用户执行他们的任务,任务完成将触发执行继续。换句话说,令牌将调用一个新的信号。
  2. 状态(State)clip_image001[5]状态是一个单纯的等待状态。它没有任务实例在任务清单中创建,这在流程需要等待外部系统的时候非常有用。如:以上的节点入口中(node-enter事件中的动作),一个消息将被发送到外部系统,随后流程进入等待状态,当外部系统发回消息的时候,发送token.signal()方法触发流程继续往下执行
  3. 决策(Decision)clip_image001[7] 在jBPM中有两个方法来进行决策,它们之间的主要区别在于由“谁”来进行决策,其中一个是由流程来做出决定,另外一个是通过外部的实体来提供一个决策的结果。
  4. 当有一个流程需要来做一个决策的时候就要使用一个决策节点。有两个方式来指定决策的标准,最简单的方式是给转换增加一个条件,条件是一个返回结果为boolean的EL表达是或beanshell脚本表达。

    在运行时决策代码会被转换反复调用(按照XML指定的顺序)来评估每个条件,但条件值为“true”的时候就会发生转换,如果所有的条件都返回“false”的话,默认的转换将被执行(XML定义中的第一个)。

    另外一种方式是使用一个表达式来返回转换的名称,使用属性“expression”,可以为决策节点来指定一个表达式来决定如何转换。

    还有一种方式是指定一个“handler”属性,它需要是DecisionHandler接口的实现,在Java类中决策的转换由DecisionHandler实现中的决策方法(decide-method)来返回。

    当决策是由外部合作者来决定(含义:不是流程定义的一部分),可以用多个转换离开状态或等待状态节点,然后转换可以提供外部的触发在等待状态完成后继续执行。比如 Token.signal(String transitionName) and TaskInstance.end(String transitionName).

  5. 分支(fork)clip_image001[9] 一个分支把一个执行路线分割成多个并行的执行路线。默认分支的行为是为每个分支转换建立一个子令牌,在令牌要到达的分支之间建立一个父子关系
  6. 联合(join)clip_image001[11] 默认的联合假设所有来自同一个父亲的子令牌结合,上面介绍的分支发生的时候并且所有令牌分支创建之后,而且所有分支都到达同一个联合时,当全部令牌都进入联合的时候,联合就结束了。
  7. 节点(Node)clip_image001[13]节点类型是用来完成在节点中编写自己的程序代码,它需要一个动作的子元素,用来在执行路径到达节点的时候执行,编写在actionhandler中的代码可以实现任何的逻辑,同时它必须负责传播执行。他和任务节点的区别就在于它不需要等待用户做出响应就流程继续往后执行,而任务节点只有用户做出响应后流程才会继续

 

四, 转换

转换有一个来源节点和一个目标节点,来源节点通过一个from属性来指定,目标节点通过一个to属性来指定

一个转换有一个可选的名称,很多jBPM都依赖于唯一的转换名称,如果有多个转换都拥有同样的名称,那第一个转换将会被选中执行,重复的转换名称将会导致Map getLeavingTransitionsMap() 方法返回的元素数量少于 List getLeavingTransitions() ,列表中默认的转换是第一个转换。

 

五,动作(Actions)

动作其实就是一段 Java 代码,在有事件发生时执行流程,流程的图在软件需求社区是一个很重要的指令,但是图只是将要实现软件的一个视觉(投射),它隐藏了技术的实现细节。动作是在图形化表示之外加入技术细节的机制,当一个图被创建,它可以用加入动作来进行装饰,这样通过 Java 代码在不修改图结构的情况下可以和图关联起来了,主要的事件类型是:进入节点、离开节点执行转换

 

下一篇文章将描述变量的上下文。

 

更换探索者主题

2:51 pm in 探索者故事 by aronezhang

 

自从申请Oracle Seeker之后开始记录日志以来,探索者已经过半岁多了,开始创建本站的目的仅仅是为了记录一些在

项目中使用的技术以及经验,还有平时不断瞎折腾摆弄的一些知识点,以备有需之时进行查询,同时也为自己

不断学习、不断累积知识提供了一个督促的理由,使自己不在那么“懒惰”。

 

由此对本站的主题也没有特意去关注,只是觉得自己看起来过得去就可以了,但是几个原因致使我们现在决定更换探索者的主体:

  1. 随着认识本站的人越来越多,大家对格式要求更高了
  2. 浏览本站的很多同学对探索者的主题提出了“看起来太丑了,能不能弄一个好看一点的主题啊”之类的看法
  3. 原来的主题只是针对我本本分辨率(1920×1200)来设计的,但是目前大部分同学还是1024×768,看起来不舒服
  4. 原来的主题内容看起来不紧凑,太凌乱

 

基于以上各点原因,我们认为是有必要进行主题更换,将内容以新的方式展现给大家的时候了,但是基于几个博主对美术设计

都是比较陌生,因此也只能找一个我们认为比较满意的主题来使用了,基于以下几点:

  1. 两栏风格,流出足够的空间展现技术文章的内容
  2. 简约精致的风格,能够重点突出真正的技术的内容
  3. 分辨率最佳支持为1024×768,不易太大或太小
  4. 要支持Widget,方便插件的安装使用
  5. 需要兼容2.7版本
  6. 不需要依赖的插件,否则使用起来反而不方便

 

因此很快就看上了mg12的设计的 iNove 主题,这款主题在wordpress主题库中排名也在很前面,同时也有很多站点在使用它。

在 Hailuo.liu 的帮助下,进行了主题一些细节的调整,终于有了目前的探索者,恭喜一下!!!

 

希望大家能够喜欢,同时感谢各位一如既往地支持以及给我们建议。