InputStream is = java.util.Date.class.getResourceAsStream("Collection.class");
1 JBPM的子流程是怎么工作的?
没有做
2 B2C也是担保交易,支付宝压款是完全可以接受的。
3 在退款协议期可能会有死循环,所以要介入人工处理阶段。人工处理应该是数据库定时JOB,将超时的任务导出到到后台小二的job list,子流程处理也要返回两个结果,退或不退,来判断是否退款是否结束
4 JBPM的任务节点(task-node)
任务节点是一个需要人工参与的节点,当流程进入节点,会生成相应的任务实例(task instance),并通过实现某个委派接口AssignHandler或jBPM表达式将任务委派给参与者,在界面上,需要根据参与者角色生成某个按钮,参与者按了后,节点才会进入下一个流程。节点进入等待状态,知道任务被参与者完成或跳过,过程才会继续。
判定节点(decision)
判定节点的设计目标是根据上下文环境和程序逻辑来判定流程转向。通过指定的DecisionHandler接口的实现类或jBPM表达式,返回transition字符串名称。来决定流程的方向。
普通节点(node)
普通节点也可以处理定义的相应的处理任务,通过实现的ActionHandler的类。同任务节点不同的是,普通节点定义的任务是自动执行的,而不需要人工来点,比如通知消息。
可以定义成一个Node节点,在时间发生后,发Email或wangwang消息。或退款成功,通知支付宝按退款协议给双方打款,也可以做成一个Node节点。
5 Node,TaskNode,Decision上都可以挂接EventNode,
三种结点都可定义结点事件(event):
node-enter,该事件在流程进入结点时触发
node-leave,该事件在流程离开节点是触发
可以在事件上挂接ActioinHandler接口的实现类来完成一些特定的功能。
在EventNode中,写ActionHandler的实现类,从而自动完成一些任务,比如发邮件等任务。
6 NodeTask的具体定义,几个参数是什么意思?
比如General,Detail,Assignment,Controller,Reminder分别代表什么意思。
7 JPML中最常用的几个程序回调接口
动作处理接口ActionHandler,在需要evnet,antion的地方回调
interface ActionHandler{
void execute(ExecutionContext executionContext) throws Exception;
}
该接口通过执行上下文ExecutionContext来了解当前的状态,比如节点处的位置,买卖双方的信息等。
判定接口(DecisionHandler)
public interface DecisionHandler extends Serializable {
String decide(ExecutionContext executionContext) throws Exception;
}
会返回一个字符串,在这个节点,根据字符串,决定往哪个transision分支走。
委派处理接口(AssignmentHandler)
接口方法:void assign(Assignable assignable, ExecutionContext executionContext) throws Exception;
适用于TaskNode中新增的Task节点,对应的是Assignment的Tab,他的作用是将Task委派给指定的人员或角色。
委派处理接口被用户任务元素(task)的委派(assignment)子元素中,它的职责很明确,就是将任务分配给指定的人员或角色。
在AssignmentHandler接口的方法中,Assignable变量通常指任务实例(TaskInstance)。通过将ExecutionContext和TaskInstance两个变量都暴露给接口方法,用户就可以根据流程上下文情况,来决定要将指定的任务分配个谁。
作用于Node和作用于transision的handler虽然都是继承自同一个接口ActionHandler,但是Node的execute的方法内,必须执行executionContext.leaveNode来保证流程的向下执行,而transition不用使用这个方法。
8 一个TradeProcessConstans类,来包装所有字符串常量。
我们对Jbpm的封装
9 当流程开始的时候,创建流程常量。
protected void createProcessInstance(String user){ //生成实例 pi = pdf.createProcessInstance(); //设置流程发起人 pi.getContextInstance().createVariable("initiator", user); //触发流程转向 pi.signal(); //进入流程的第一个节点,会触发第一个Transision。 //新建一个ProcessInstance,会自动触发这步,但是,因为系统升级的过程中,有的流程是正在退款的过程中,所以,对这种流程要判断,并且要赋给它一个初始的状态。 }
当用户提交借款申请。
当经理审批通过,是经理在界面点击通过或不通过的按钮,业务层调用:
TaskInstance ti = pi.getTaskMgmtInstance().getInstance().iterator().next(); ti.end("部门经理审批通过");
如果如果点击不通过。
ti.end("部门经理审批不通过");
打印出TaskInstance所有的向下的支路.
List<Transistion> transitions = ti.getToken.getNode().getLeavingTransitions(); for(Transition t : transitions){ sysout(t.getName()); }
进入TaskNode节点,会自动回调TaskNode的Task节点的AssignHandler和ControllerHandler,决定流程如何向下一个节点流转。
10 executionContext.getContextInstance.getVarable();
可以把OrderID或外部ID,用户ID等放到varable中去,并持久化到数据库。
11 超时是应用层考虑还是数据库层考虑,这里放到一边。
设计的结果是应用层考虑超时。
12 借款的流程顺序。
第一个Transision,StartProcessActionHander
第二个回调:在提交支款申请里面,DepartmentManagerHandler
第三个回调:AssignmentHandler,进入部门经理审批流程,将这个审批任务分配给一个或一群人。调用这个Handler来调用:DepartmentManagerApproveAssignmentHandler来进行分配。
第4个回掉:ActionHandler的回调,在审批同意的Transition里回调
ManagerApprovedAction
第5个回调,在部门经理审批同意后,看金额是否大于6000,决定是否上调给总经理审批。
如果小于5000,自动执行小于5000的Transition,在DecideNode,不需要等待,直接执行。执行"<5000 财务拨款"Transition,进入下一个Node"财务拨款"。
问题,在这个过程中,如果保证事务,如果一个节点失败了,是否要进行回滚,和如何进行回滚,JBPM有机制来保证这个过程吗?
第6个回调,流转到"财务拨款",财务拨款是个Node,系统自动调用,而不需要人工参与。
Node和TaskNode中的Action不同的是,NodeAction的execute最后必须调用
/* * 这句别漏了,否则流程不会向下走哒 */ executionContext.leaveNode();
不然,流程不会向走。
第7个回调,Trasition流转到邮件通知这步,流转调用SendMailActionHandler,,其实邮件通知可以在BenforeNode和LeaveNode里面用Event来做,也是一种方法。
13 ProcessDefinition
--ProcessInstance
----TaskInstance
------Token
--------Node
----------Transition
14 JbpmContext的用处。
15 怎么在Jbpm中使用单元测试。
16 怎么在mysql指定的数据库上创建一个用户名密码,并且把所有或部分的权限赋给他。
17 部署Jbpm
调用ProcessDefinition,将其在内存中生成,并部署到MySql中去。
18 class.getResourceAsStream 是以当前目录为基础,得到InputStream.
可以用
InputStream is = java.util.Date.class.getResourceAsStream("Collection.class");
得到了InputStream就可以用ClassLoad将类重新载入内存了。
19 怎么得到ClassPath的路径,实际上,需要的是类路径上的配置文件。
Class.getResourceAsStream("/log4j.properties"); Class.getClassLoader.getResourceAsStream("log4j.properties");
20 使用EmEditor的技巧。
怎么在每一行某位加一个";",比如在数据库脚本?
查找(^[^--]*$) 表示所有不以--开头的行,用()将他们括起来,是为了back reference(向后引用),将他们替换成\0;表示将前面查到的所有都替换,并且在末尾加一个;
怎么删除空行?
查找^[ \t]*$\r\n,并将他们替换为空.
发表评论
-
为什么我们要写单元测试?
2009-05-07 00:56 1297今天下午下班前,退款流程改造项目,前台的开发人 ... -
自定义Maven Package 类型
2008-09-27 00:30 14888问题提出 pom.xml中的<packagi ... -
交易中心810问题
2008-08-13 22:11 11451 使用sftp上传或下载文 ... -
交易三期808问题
2008-08-13 21:51 14061 XiaoerTransferMoeny,少加了一个out_ ... -
交易中心626问题
2008-07-02 01:50 16121 Facade->Service->Manage ... -
交易三期619任务
2008-07-02 01:40 2137this.executeQueryForObject(&quo ... -
研究JBPM的用法
2008-06-22 15:23 15911 将JBPM的配置文件打包 ... -
交易中心610的问题
2008-06-14 15:41 11221 Mysql 如何将访问mysql的sql语句输出到一个文件 ... -
Ebay的可伸缩性架构
2008-06-09 20:59 10911 Maven的原理和API 2 毕玄推荐的两本书。 计算 ... -
用户中心602问题
2008-06-02 21:06 14331 写单元测试,模拟用户中心可能发生的各种情况,比如,数据库挂 ... -
用户中心601问题-2
2008-06-01 22:04 11761 怎么把svn-base从Open Reso ... -
用户中心601问题
2008-06-01 13:40 9941 关于线程同步 线程调 ... -
用户中心531问题
2008-06-01 13:19 10581 定时器Timer,TimerTask,Timer的内部实现 ... -
用户中心528问题
2008-06-01 13:15 15461 能够从UIC中学习什么。 怎么按功能在Eclipse里面把 ... -
用户中心526问题
2008-06-01 13:02 190414 Runtime.getRuntime().addShut ...
相关推荐
在jPDL中,与流程设计相关的文件有三个:processdefinition.xml、gdp.xml、processimage.jpg。其中processdefinition.xml是流程定义的描述文件;gpd.xml是对图形界面呈现的XML描述;而 processimage.jpg则是对图形...
通过本文档的学习,相信读者已经对jBPM有了较为全面的认识。jBPM不仅提供了强大的工作流管理功能,还支持灵活的定制化需求。对于希望改善内部业务流程的企业来说,jBPM无疑是一个值得考虑的选择。未来随着技术的不断...
python学习资源
jfinal-undertow 用于开发、部署由 jfinal 开发的 web 项目
基于Andorid的音乐播放器项目设计(国外开源)实现源码,主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的学习者,也可作为课程设计、期末大作业。
python学习资源
python学习资源
python学习一些项目和资源
【毕业设计】java-springboot+vue家具销售平台实现源码(完整前后端+mysql+说明文档+LunW).zip
HTML+CSS+JavaScarip开发的前端网页源代码
python学习资源
【毕业设计】java-springboot-vue健身房信息管理系统源码(完整前后端+mysql+说明文档+LunW).zip
成绩管理系统C/Go。大学生期末小作业,指针实现,C语言版本(ANSI C)和Go语言版本
1_基于大数据的智能菜品个性化推荐与点餐系统的设计与实现.docx
【毕业设计】java-springboot-vue交流互动平台实现源码(完整前后端+mysql+说明文档+LunW).zip
内容概要:本文主要探讨了在高并发情况下如何设计并优化火车票秒杀系统,确保系统的高性能与稳定性。通过对比分析三种库存管理模式(下单减库存、支付减库存、预扣库存),强调了预扣库存结合本地缓存及远程Redis统一库存的优势,同时介绍了如何利用Nginx的加权轮询策略、MQ消息队列异步处理等方式降低系统压力,保障交易完整性和数据一致性,防止超卖现象。 适用人群:具有一定互联网应用开发经验的研发人员和技术管理人员。 使用场景及目标:适用于电商、票务等行业需要处理大量瞬时并发请求的业务场景。其目标在于通过合理的架构规划,实现在高峰期保持平台的稳定运行,保证用户体验的同时最大化销售额。 其他说明:文中提及的技术细节如Epoll I/O多路复用模型以及分布式系统中的容错措施等内容,对于深入理解大规模并发系统的构建有着重要指导意义。
基于 OpenCV 和 PyTorch 的深度车牌识别
【毕业设计-java】springboot-vue教学资料管理系统实现源码(完整前后端+mysql+说明文档+LunW).zip
此数据集包含有关出租车行程的详细信息,包括乘客人数、行程距离、付款类型、车费金额和行程时长。它可用于各种数据分析和机器学习应用程序,例如票价预测和乘车模式分析。
把代码放到Word中,通过开发工具——Visual Basic——插入模块,粘贴在里在,把在硅基流动中申请的API放到VBA代码中。在Word中,选择一个问题,运行这个DeepSeekV3的宏就可以实现在线问答