- 浏览: 313750 次
- 性别:
- 来自: 重庆
文章分类
- 全部博客 (286)
- 设计模式 (14)
- spring (5)
- 开发工具 (12)
- java (19)
- apache.commons工具 (7)
- ibaits (5)
- extjs4.0 (4)
- 数据库 (2)
- spring工具类 (2)
- jquery1.8 (32)
- 杂记 (1)
- linux (2)
- Quart (1)
- springMVC (2)
- webservice (1)
- oracle (5)
- dwr (6)
- jbmp3 (27)
- lucene3.5 (27)
- javascript (18)
- hibernate3.3.2 (27)
- spring事务管理 (10)
- nio (2)
- strust2 (3)
- jvm (7)
- jquery-easyui-1.2.6 (22)
- 多线程 (14)
- maven (3)
- 常用正则表达式 (4)
最新评论
-
HF_SKY000:
请问:
一、能否提供一下密钥库文件的生成方法?
二、密钥库的密 ...
Java sslSocket 聊天实例
public class JbpmFacadeImpl extends AbstractManager implements JbpmFacade {
private JbpmConfiguration jbpmConfiguration;
public long addProcessInstance(String processName, Document document) {
JbpmContext context = getJbpmContext();
ProcessDefinition def = context.getGraphSession().findLatestProcessDefinition(processName);
ProcessInstance instance = new ProcessInstance(def);
instance.getContextInstance().setVariable("document", document.getId());
//将公文标题也提交到流程实例变量中,以便在E-Mail中能够提示这个公文的名称
instance.getContextInstance().setVariable("docTitle", document.getTitle());
//将公文的相关属性设置进入流程实例变量
Map props = document.getProperties();
if(props != null){
Set entries = props.entrySet();
for (Iterator iterator = entries.iterator(); iterator.hasNext();) {
Map.Entry entry = (Map.Entry) iterator.next();
String propertyName = (String)entry.getKey();
Object obj = document.getProperty(propertyName);
//将变量放入流程实例变量
instance.getContextInstance().setVariable(propertyName, obj);
}
}
context.save(instance);
return instance.getId();
}
public void delProcessDefinition(String processName) {
JbpmContext context = getJbpmContext();
List defs = context.getGraphSession().findAllProcessDefinitionVersions(processName);
for (Iterator iterator = defs.iterator(); iterator.hasNext();) {
ProcessDefinition def = (ProcessDefinition) iterator.next();
context.getGraphSession().deleteProcessDefinition(def);
}
}
public void delProcessInstance(long processInstanceId) {
JbpmContext context = getJbpmContext();
context.getGraphSession().deleteProcessInstance(processInstanceId);
}
public String deployProcessDefinition(byte[] processDef) {
JbpmContext context = getJbpmContext();
ProcessDefinition def = ProcessDefinition.parseXmlInputStream(
new ByteArrayInputStream(processDef)
);
context.deployProcessDefinition(def);
return def.getName();
}
public String nextStep(long processInstanceId, String actorId,
String transitionName) {
JbpmContext context = getJbpmContext();
ProcessInstance instance = context.getProcessInstance(processInstanceId);
//当前节点
String currentNodeName = instance.getRootToken().getNode().getName();
//起点的名称
String startNodeName = instance.getProcessDefinition().getStartState().getName();
//如果是在起点
if(startNodeName.equals(currentNodeName)){
if(transitionName == null){
instance.signal();
}else{
instance.signal(transitionName);
}
}else{
List taskInstances = context.getTaskMgmtSession().findTaskInstances(actorId);
for (Iterator iterator = taskInstances.iterator(); iterator
.hasNext();) {
TaskInstance ti = (TaskInstance) iterator.next();
if(ti.getProcessInstance().getId() == processInstanceId){
if(transitionName == null){
ti.end();
}else{
ti.end(transitionName);
}
break;
}
}
//查找所属组的任务实例
List pooledTaskInstances = context.getTaskMgmtSession().findPooledTaskInstances(actorId);
for (Iterator iterator = pooledTaskInstances.iterator(); iterator
.hasNext();) {
TaskInstance ti = (TaskInstance) iterator.next();
if(ti.getProcessInstance().getId() == processInstanceId){
if(transitionName == null){
ti.end();
}else{
ti.end(transitionName);
}
break;
}
}
}
//返回转向之后的节点名称
return instance.getRootToken().getNode().getName();
}
//回退
public Object[] backStep(long processInstanceId, String actorId) {
JbpmContext context = getJbpmContext();
//根据流程实例标识查找流程实例
ProcessInstance instance = context.getProcessInstance(processInstanceId);
Object[] os = new Object[2];
//搜索用户对应的所有的任务实例
List taskInstances = context.getTaskMgmtSession().findTaskInstances(actorId);
for (Iterator iterator = taskInstances.iterator(); iterator
.hasNext();) {
TaskInstance ti = (TaskInstance) iterator.next();
if(ti.getProcessInstance().getId() == processInstanceId){
//先判断是否是要回退到起点
Set set = ti.getToken().getNode().getArrivingTransitions();
for (Iterator iterator2 = set.iterator(); iterator2.hasNext();) {
Transition t = (Transition) iterator2.next();
//如果它需要回退到起点
if(t.getFrom().equals(ti.getProcessInstance().getProcessDefinition().getStartState())){
int docId = (Integer)ti.getProcessInstance().getContextInstance().getVariable("document");
//结束当前的流程实例
ti.getProcessInstance().end();
//结束当前任务实例
ti.end();
//重新创建流程实例对象
ProcessInstance pi = new ProcessInstance(ti.getProcessInstance().getProcessDefinition());
pi.getContextInstance().setVariable("document", docId);
//将流程实例对象重新持久化到数据库
context.save(pi);
os[0] = Document.STATUS_NEW;
os[1] = pi.getId();
return os;
}
}
//如果不需要回退到起点
ti.end(CreateTransitionAction.BACK_TRANSITION);
break;
}
}
os[0] = instance.getRootToken().getNode().getName();
os[1] = processInstanceId;
return os;
}
public List searchMyTaskList(String actorId) {
JbpmContext context = getJbpmContext();
List docIds = new ArrayList();
List taskInstances = context.getTaskMgmtSession().findTaskInstances(actorId);
for (Iterator iterator = taskInstances.iterator(); iterator.hasNext();) {
TaskInstance ti = (TaskInstance) iterator.next();
Integer docId = (Integer)ti.getProcessInstance().getContextInstance().getVariable("document");
docIds.add(docId);
}
//查找所属组的任务实例
List pooledTaskInstances = context.getTaskMgmtSession().findPooledTaskInstances(actorId);
for (Iterator iterator = pooledTaskInstances.iterator(); iterator
.hasNext();) {
TaskInstance ti = (TaskInstance) iterator.next();
Integer docId = (Integer)ti.getProcessInstance().getContextInstance().getVariable("document");
docIds.add(docId);
}
return docIds;
}
public List searchNextTransitions(long processInstanceId, String actorId) {
JbpmContext context = getJbpmContext();
ProcessInstance instance = context.getProcessInstance(processInstanceId);
//当前节点
String currentNodeName = instance.getRootToken().getNode().getName();
//起点的名称
String startNodeName = instance.getProcessDefinition().getStartState().getName();
Collection transitions = null;
//如果是在起点
if(startNodeName.equals(currentNodeName)){
transitions = instance.getRootToken().getAvailableTransitions();
}else{
List taskInstances = context.getTaskMgmtSession().findTaskInstances(actorId);
for (Iterator iterator = taskInstances.iterator(); iterator
.hasNext();) {
TaskInstance ti = (TaskInstance) iterator.next();
if(ti.getProcessInstance().getId() == processInstanceId){
transitions = ti.getAvailableTransitions();
break;
}
}
//查找所属组的任务实例
List pooledTaskInstances = context.getTaskMgmtSession().findPooledTaskInstances(actorId);
for (Iterator iterator = pooledTaskInstances.iterator(); iterator
.hasNext();) {
TaskInstance ti = (TaskInstance) iterator.next();
if(ti.getProcessInstance().getId() == processInstanceId){
transitions = ti.getAvailableTransitions();
}
}
}
List transitionNames = new ArrayList();
if(transitions != null){
//为了不把Transition对象直接暴露给OA系统,需要将其转换为名称列表
for (Iterator iterator = transitions.iterator(); iterator.hasNext();) {
Transition transition = (Transition) iterator.next();
transitionNames.add(transition.getName());
}
}
return transitionNames;
}
private JbpmContext getJbpmContext(){
JbpmContext context = jbpmConfiguration.createJbpmContext();
context.setSession(getSession());
return context;
}
public void setJbpmConfiguration(JbpmConfiguration jbpmConfiguration) {
this.jbpmConfiguration = jbpmConfiguration;
}
}
发表评论
-
二十七、jbpm回退
2012-11-16 10:56 2071要实现JBPM的任务回退很 ... -
二十五、将JBPM集成到基于SSH的OA系统中
2012-11-15 22:43 933具体步骤如下: -
二十四、如何给角色分配任务,而且拥有此角色的用户必需要通过n个人的审批之后才能继续往下?
2012-11-15 21:33 784解决方案: 1、 在一个node-enter ... -
二十三、如何给角色分配任务,而且拥有此角色的用户只要有一个用户审批通过就可以继续往下
2012-11-13 14:41 773解决方案: 首先,是基于前一个解决方案,我们自己来给 ... -
二十二、如何给角色分配任务,而且拥有此角色的用户均需审批通过之后才能继续往下?
2012-11-13 14:18 849解决方法: * 在一个n ... -
二十一、如何在Jbpm的各种Handler中访问spring的bean
2012-11-13 11:42 1061import org.springframe ... -
二十、如何给角色分配任务
2012-11-13 11:12 1158实现AssignmentHandler接口,在接口的实现方法中 ... -
十九、会签(通过PooledActors或者在一个TaskNode中定义多个Task)来实现
2012-11-09 17:15 1007如何实现多人会签,而且只要其中一个人审批通过就继续往下? ... -
十八、自定义VariableResolver
2012-11-09 16:50 1038<decision name="decisio ... -
十七、Decision节点和DecisionHandler的使用
2012-11-09 16:15 1045<?xml version="1.0& ... -
十六、流程相关的用例图、流程图
2012-11-08 17:29 992部署流程: ... -
十五、从中间的TaskNode节点出发如何得到下一步可选路径列表
2012-11-06 16:12 826在上一节中说到: Set&l ... -
十四、从起点(StartState)出发,如何得知下一步可选的路径列表
2012-11-06 11:59 1021<process-definition name=&q ... -
十三、Fork和Join节点的基本用法
2012-11-06 10:48 1072<?xml version="1.0&qu ... -
十二、查询公文流转到哪个节点
2012-11-06 10:43 970//得到流程流转到的当前节点 @Test ... -
十一、流程流转
2012-11-06 10:43 940提交公文到下一个节点(本节点不是开始节点) pr ... -
十、查询某个用户的公文列表
2012-11-05 10:27 867private void printTask(JbpmCont ... -
九、提交公文
2012-11-05 10:29 790//将公文提交到第一个环节 @Test ... -
八、创建公文
2012-11-05 10:29 8211、创建公文对象 public ... -
七、部署流程
2012-11-05 10:28 890测试代码如下: //部署流程定义:根据流程 ...
相关推荐
【大厂面试专栏】一份Java程序员需要的技术指南,这里有面试题、系统架构、职场锦囊、主流中间件等,让你成为更牛的自己!_technology-talk
flashocc-QAT-PTQ.zip
那些年,与你同分同位次的同学都去了哪里?全国各大学在四川2020-2024年各专业最低录取分数及录取位次数据,高考志愿必备参考数据
那些年,与你同分同位次的同学都去了哪里?全国各大学在四川2020-2024年各专业最低录取分数及录取位次数据,高考志愿必备参考数据
那些年,与你同分同位次的同学都去了哪里?全国各大学在四川2020-2024年各专业最低录取分数及录取位次数据,高考志愿必备参考数据
那些年,与你同分同位次的同学都去了哪里?全国各大学在四川2020-2024年各专业最低录取分数及录取位次数据,高考志愿必备参考数据
CSDN海神之光上传的全部代码均可运行,亲测可用,尽我所能,为你服务; 1、代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,可私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、物理应用 仿真:导航、地震、电磁、电路、电能、机械、工业控制、水位控制、直流电机、平面电磁波、管道瞬变流、刚度计算 光学:光栅、杨氏双缝、单缝、多缝、圆孔、矩孔衍射、夫琅禾费、干涉、拉盖尔高斯、光束、光波、涡旋 定位问题:chan、taylor、RSSI、music、卡尔曼滤波UWB 气动学:弹道、气体扩散、龙格库弹道 运动学:倒立摆、泊车 天体学:卫星轨道、姿态 船舶:控制、运动 电磁学:电场分布、电偶极子、永磁同步、变压器
文件比较工具、文件夹比较工具、linux、ubuntu、linx麒麟等免费使用多日
Spire.XLS是一个基于.NET的组件,使用它我们可以创建Excel文件,编辑已有的Excel并且可以转换Excel文件.zip
文件名:Downhill Ride - Game Template 2020 LTS v1.2.3.unitypackage Downhill Ride - Game Template (2020 LTS) 是一个为 Unity 2020 LTS 版本开发的完整游戏模板,主要适用于开发极限运动或竞速类的下坡滑行游戏。这个模板专为快速原型设计和项目开发而打造,提供了关键功能和资源,帮助开发者轻松实现类似下坡竞速的游戏项目。 主要特点: 完整的游戏框架: 该模板包含基础的游戏逻辑,允许玩家通过控制角色在下坡道上滑行或骑行,避开障碍物并尽可能快速完成赛道。 物理与控制系统: 内置的物理引擎和角色控制器已经经过优化,可以实现平滑的下坡滑行体验,提供真实感十足的物理效果。 多种关卡支持: 模板支持多个关卡设计,开发者可以根据需要扩展或自定义不同难度的关卡。 UI 和交互设计: 包含基本的用户界面(UI)设计,带有主菜单、关卡选择、计分系统等功能,用户可以轻松扩展或定制这些 UI 元素。 优化的性能: 模板专为移动平台和桌面平台优化,确保良好的性能表现......
(1)课程设计项目简单描述 鉴于当今超市产品种类繁多,光靠人手动的登记已经不能满足一般商家的需求。我们编辑该程序帮助商家完成产品、商家信息的管理,包括产品、客户、供应商等相关信息的添加、修改、删除等功能。 (2)需求分析(或是任务分析) 1)产品类别信息管理:对客户的基本信息进行添加、修改和删除。 2)产品信息管理:对产品的基本信息进行添加、修改和删除。 3)供应商信息管理: 对供应商的基本信息进行添加、修改和删除。 4)订单信息管理:对订单的基本信 息进行添加、修改和删除。 5)统计报表:按选择日期期间,并按产品类别分组统 计订单金额,使用表格显示统计结果
那些年,与你同分同位次的同学都去了哪里?全国各大学在四川2020-2024年各专业最低录取分数及录取位次数据,高考志愿必备参考数据
yolo系列算法目标检测数据集,包含标签,可以直接训练模型和验证测试,数据集已经划分好,适用yolov5,yolov8,yolov9,yolov7,yolov10,yolo11算法; 包含两种标签格:yolo格式(txt文件)和voc格式(xml文件),分别保存在两个文件夹中; yolo格式:<class> <x_center> <y_center> <width> <height>, 其中: <class> 是目标的类别索引(从0开始)。 <x_center> 和 <y_center> 是目标框中心点的x和y坐标,这些坐标是相对于图像宽度和高度的比例值,范围在0到1之间。 <width> 和 <height> 是目标框的宽度和高度,也是相对于图像宽度和高度的比例值
Android System Webview(com.google.android.webvie) 125.0.6422.82 一般情况下设备可以从google play上更新,但是google play 中没有历史版本下载,所以在自己需要之后把资源上传
VLP超低轮廓铜箔,全球前10强生产商排名及市场份额(by QYResearch).docx
那些年,与你同分同位次的同学都去了哪里?全国各大学在四川2020-2024年各专业最低录取分数及录取位次数据,高考志愿必备参考数据
网鼎杯PPServ是一个Web开发集成环境,可以使用Apache,PHP,Mysql创建Web应用。_PPServ.zip
那些年,与你同分同位次的同学都去了哪里?全国各大学在四川2020-2024年各专业最低录取分数及录取位次数据,高考志愿必备参考数据
windows 安装包Miniconda3-py38-4.11.0-Windows-x86-64
yolo系列算法目标检测数据集,包含标签,可以直接训练模型和验证测试,数据集已经划分好,适用yolov5,yolov8,yolov9,yolov7,yolov10,yolo11算法; 包含两种标签格:yolo格式(txt文件)和voc格式(xml文件),分别保存在两个文件夹中; yolo格式:<class> <x_center> <y_center> <width> <height>, 其中: <class> 是目标的类别索引(从0开始)。 <x_center> 和 <y_center> 是目标框中心点的x和y坐标,这些坐标是相对于图像宽度和高度的比例值,范围在0到1之间。 <width> 和 <height> 是目标框的宽度和高度,也是相对于图像宽度和高度的比例值