- 浏览: 940349 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
hw7777777:
非常感谢作者提供这么好的工具,在使用的过程中遇到一些问题?1、 ...
基于java nio的memcached客户端——xmemcached -
SINCE1978:
多久过去了时间能抹平一切
无路用的人 -
fangruanyjq:
[img][/img]引用
用osworkflow写一个请假例子(提供代码下载) -
thinkingmysky:
楼主,你确定,java memached client能处理并 ...
memcached java client性能测试的几点疑问和说明 -
hellostory:
aaa5131421 写道07年2月hibernate已经出来 ...
dozer与BeanUtils
hoho,今天完成了选择路由的实现,完成了配置文件的读写和解析,流程定义文件还是决定采用xml文件,不过与其他工作流引擎采用的xml完全不同,因为是基于petri网的,因此引入了place的概念,比如下面这个4个节点的顺序路由的流程:
并行路由和选择路由引入了and-split,and-join,or-split,or-join四种transition,比如and-split,它就有多个输出place:
Place和Transition都有条件,用于决定操作是否执行,Transition额外指定了驱动的资源,这一点非常重要,资源可能是用户、用户组、某个时间点定时事件、特定消息等等。初步有个想法写一个GUI的流程定义工具,不过我对GUI编程了解有限,先暂时推后了。
今天额外发现的一个好处就是,引入Place之后,我可以轻易地将不同的流程连接起来组织成一个更复杂的流程,仅仅是需要修改各个流程的开始和结束的节点的输入输出库所,从而实现了层次化的Petri网,,类似代码:
xml 代码
- <workflow maxCases="100">
- <node type="start" name="start" id="0">
- <inputs>
- <place id="1" />
- </inputs>
- <outputs>
- <place id="2" />
- </outputs>
- </node>
- <node name="hello" id="1" resource="user">
- <conditions type="and">
- <condition
- class="net.rubyeye.insect.workflow.impl.NullHandler" value="false"
- variable-name="name" />
- </conditions>
- <handler
- class="net.rubyeye.insect.workflow.test.HelloWorldHandler" />
- <inputs>
- <place id="2" />
- </inputs>
- <outputs>
- <place id="3" />
- </outputs>
- </node>
- <node name="calc" id="2" resource="user">
- <conditions type="and">
- <condition variable-name="num">
- <exp>
- <![CDATA[num<=1000]]>
- </exp>
- </condition>
- <conditions type="or">
- <condition variable-name="num">
- <exp>
- <![CDATA[num>=10]]>
- </exp>
- </condition>
- <condition
- class="net.rubyeye.insect.workflow.impl.NullHandler" value="false"
- variable-name="name" />
- </conditions>
- </conditions>
- <handler
- class="net.rubyeye.insect.workflow.test.CalculateHandler" />
- <inputs>
- <place id="3" />
- </inputs>
- <outputs>
- <place id="4" />
- </outputs>
- </node>
- <node type="end" name="hello" id="3">
- <inputs>
- <place id="4" />
- </inputs>
- <outputs>
- <place id="5" />
- </outputs>
- </node>
- </workflow>
并行路由和选择路由引入了and-split,and-join,or-split,or-join四种transition,比如and-split,它就有多个输出place:
xml 代码
- <node name="split" type="and-split" id="1" resource="user">
- <inputs>
- <place id="2" />
- </inputs>
- <outputs>
- <place id="3" />
- <place id="4" />
- </outputs>
- </node>
Place和Transition都有条件,用于决定操作是否执行,Transition额外指定了驱动的资源,这一点非常重要,资源可能是用户、用户组、某个时间点定时事件、特定消息等等。初步有个想法写一个GUI的流程定义工具,不过我对GUI编程了解有限,先暂时推后了。
今天额外发现的一个好处就是,引入Place之后,我可以轻易地将不同的流程连接起来组织成一个更复杂的流程,仅仅是需要修改各个流程的开始和结束的节点的输入输出库所,从而实现了层次化的Petri网,,类似代码:
java 代码
- WorkFlow sequence = wm.getWorkFlow("sequence");
- WorkFlow concurrency = wm.getWorkFlow("concurrency");
- WorkFlow choose = wm.getWorkFlow("choose");
- //组合流程
- composite = new WorkFlow();
- composite.setName("composite");
- composite.setId(100);
- wm.saveWorkFlow(composite);
- //修改开始结束节点的输入输出库所
- sequence.getEnd().setType(TransitionType.NORMAL);
- sequence.getEnd().setOutputs(concurrency.getStart().getInputs());
- concurrency.getEnd().setType(TransitionType.NORMAL);
- concurrency.getEnd().setOutputs(choose.getStart().getInputs());
- composite.setStart(sequence.getStart());
- composite.setEnd(choose.getEnd());
- List<Transition> transitions = new ArrayList<Transition>();
- transitions.addAll(sequence.getTransitions());
- transitions.addAll(concurrency.getTransitions());
- transitions.addAll(choose.getTransitions());
- composite.setTransitions(transitions);
发表评论
-
传说中的精确广告投放
2009-03-19 19:04 5595本图不针对任何网站和个人,仅仅是因为很离谱。 -
终于跑了一万米
2008-11-16 18:37 2029跑步快3个月了,其实并没有天天跑,基本每周都休息两三天 ... -
一封邮件
2008-10-04 14:02 1583今天邮箱里收到的一封邮件,标题是《寻找好心人帮忙,不介 ... -
漂亮的代码
2008-10-09 23:58 1526Ruby的创造者为《代码之美》撰写的文章标题是《代码如 ... -
广州opensource camp小记
2008-09-21 09:01 1661与锋爷、小朱、阿 ... -
因果与因缘
2008-08-23 09:20 1473我对佛教的了解很 ... -
反省
2008-08-06 23:04 1478有段时间没更新blog了。主要是这段时间内自 ... -
值的纪念的一天
2008-06-29 16:08 1255沸沸扬扬的华南虎案(更想说是闹剧)终于告一段落,在广 ... -
关于加班
2008-06-23 01:29 1798加班在国内的公司好像是司空见惯的事情,更司空见惯的是加 ... -
理发二三事
2008-06-13 21:55 1566头发乃人 ... -
最近的学习和工作
2008-05-21 11:48 1694转眼间,来广州 ... -
17岁少年杀人事件
2008-04-19 12:49 132117日的南方周末的 ... -
国际米兰100周年
2008-03-10 18:39 18891908年的3月9日,四十多名“叛逃者” ... -
最近的工作和学习
2008-03-04 19:13 1733最近一直在写Ruby脚本,说出来你可能不相信,我用Ru ... -
新年第一博
2008-02-13 11:31 1495习惯了,如果没有过完春节,感觉这一年还不算过去。年过完 ... -
图文:男子低温天气徒步18小时探望女友(转)
2008-01-31 10:07 2668http://www.sina.com.cn 2008年01月 ... -
一副对联
2008-01-22 14:13 1605天涯上的牛人真多 -
换工作
2008-01-11 15:59 1767我从来就不是很安分的人,来福州两个月了,在star-net也干 ... -
2:1,不好意思,我们又赢了
2007-12-24 08:55 1543什么都不说,pazza inter! -
读《人工智能的未来》
2007-11-18 22:27 3761《人工智能的未来》的作者是Jeff Hawkins,也 ...
相关推荐
### 一个简单C#工作流的实现 #### 一、背景介绍 在现代软件开发过程中,工作流的应用越来越广泛,特别是在需要多步骤处理且涉及多个角色的业务场景中。例如,高等学校岗位聘用审核系统就是一个典型的工作流应用...
本文将详细阐述如何从头开始,搭建一个基础的工作流框架,包括表单设计、流程规划以及工作启动三个核心环节。 #### 一、设计表单:业务需求的载体 表单设计是工作流构建的起点,其重要性在于它是业务数据的收集和...
本文将详细介绍如何使用`FileInputStream`和`FileOutputStream`类来实现二进制文件的读写,并提供一个具体的示例代码进行解析。 #### 一、基础知识概述 1. **FileInputStream**:用于读取原始字节流的输入流。它是...
在这个项目中,"一个用C#文件流写的通讯录"是一个实现个人联系人管理的简单应用,它利用文件流来读取、写入和存储联系人的信息。下面将详细讲解如何利用C#文件流进行操作,并探讨在创建通讯录应用程序时可能涉及的...
在本文中,我们将深入探讨如何使用C#编程语言创建一个简单的计算器应用。C#是一种面向对象的、现代的编程语言,常用于开发Windows桌面应用程序、Web应用以及游戏等。对于初学者来说,创建一个基本的计算器是学习C#的...
在本项目中,"C语言写的一个简单的画图程序"是一个用C语言编写的轻量级图形绘制应用程序。这个程序展示了如何在不依赖高级图形库的情况下,利用C语言的基础功能来实现基本的图形操作。主要涉及到的技术点包括链表的...
下面是一个简单的二进制文件写入的示例: ```csharp using System; using System.IO; class Program { static void Main() { // 定义要写入的数据 byte[] data = new byte[] { 1, 2, 3, 4, 5 }; // 指定...
总的来说,这个项目结合了Java的IO流操作、Apache POI处理Excel、Spring的依赖注入和事务管理以及Hibernate的ORM功能,实现了一个高效且健壮的Excel数据读写与数据库存储的解决方案。这样的技术栈在数据分析、报表...
标题中的“D Parser 之前:写一个简单的虚拟机”指的是在构建D语言解析器之前,先设计和实现一个简单的虚拟机。虚拟机是许多编程语言解释执行的基础,它模拟了真实的计算机硬件,允许编译后的代码在不同平台上运行。...
对于文件操作,`using`可确保流或其他资源在完成工作后被正确关闭。 6. **文本编码** 当处理非ASCII字符时,需要指定正确的文本编码,如UTF8或Unicode。在`StreamReader`和`StreamWriter`构造函数中可以指定。 7...
这种数据结构相对较为抽象,从数据结构中看不到和 ID3V1 的各字段长度的对应关系,因此只能一个个字段的手动复制。 知识点五:C# 语言读取数据 在 C# 语言中,读取数据可以使用流操作来读取文件,并手动复制到数据...
首先,我们来看如何将一个文件作为二进制数据保存到数据库中。这里我们以SQL Server为例进行说明,但这些方法也适用于其他类型的数据库系统,只需稍作调整即可。 ##### 1. 准备工作 在开始之前,确保已经安装了...
设计一个简单的二级文件系统,有助于学生巩固课堂所学,并提升实践技能。在这个设计中,我们需要实现几个核心功能: 1. 用户登录(Login):设计一个登录系统,用户需输入正确的用户名和密码才能访问文件系统。在...
JGRAPH中对图和顶点与边的定义与存储结构是非常简洁与实用的,利用数据库或者是GXL文件中的这些数据可以非常简单的处理一个复杂的流程图........... 该工具经过修改后,也可以实现一个实时监控界面和其它的适合于...
这是一份AI代写的详细教程 + 适用于大学毕业生和白领等 + 可以作为居家的第二职业 + 本教程为作者本人原创录制/没有勾子/教程很详细/是作者操作了近三年的结晶 课程目录: 第01节 AI代写变现的介绍和简单实操 第02节...
《一个简单的串口操作工具——探索串口通信与音频切换模块》 串口通信,全称为串行通信,是计算机通信领域的一种基本技术,广泛应用于嵌入式系统、物联网设备以及各种工业自动化设备中。本篇文章将围绕一个名为...
在“三步教你用Verilog写一个CPU”的系列中,我们已经进入了第三步,这通常涉及到CPU核心的实现。在这里,我们将会讨论如何将之前的概念转化为实际的代码。 ### 第一步:理解CPU的基本结构 CPU是计算机的中央处理...
通过这些知识点,我们可以编写一个简单的程序,读取一个图像文件,将其转换为二进制数据,然后将这些数据写入另一个文件。在实际应用中,这可能是为了备份图像,或者在不支持特定图像格式的环境中传输图像数据。 ...
例如,当你需要从一个字节流读取文本数据时,可以先创建一个InputStreamReader,指定所需的字符集,然后用它来创建一个BufferedReader,这样就可以按字符读取文本了。 在实际开发中,我们通常会结合使用各种流类,...