百度
360搜索
搜狗搜索

流程引擎activiti,activiti在线设计-Activiti6.0中如何设计和关联表单?详细介绍

本文目录一览: 二、Activiti-自定义用户表

在很多项目中都不会使用activiti提供的用户信息表,因为一般公司都会有独立的用户系统,所以重构activiti的用户表是十分棘手且重要的事情。activiti中用户表是已act_id_*开头的四张表,分别是用户信息表、分组(角色)表、用户角色关联表、用户扩展信息表。具体数据表字段这里不展开叙述,大家有需要可以去网上查阅,接下来阐述怎么弃用activiti流程引擎中自带的4张用户表,构建自己的用户表。在重构的时候着实费了一番功夫,记录下来以备以后翻阅,也为大家提供一个参考。

Activiti的每一张表都有一个对应的实体管理器,在引擎初始化时会初始化所有表的实体管理器(提供CRUD等功能),每一个实体类都有一个对应的实体管理类及实体管理工厂类。实体管理工厂类实现SeesionFactory接口。

用户信息表:

角色表

用户、角色关联表

其他数据表这里不做展示,关键的就是这三张表。

其实activiti用户表的重构核心在于编写自定义的实体管理类和工厂类,覆盖activiti原来的方法,在方法中进行增删查改时使用dao接口进行操作,最后将得到的对象转化为activiti的对象,不然会出错。

致谢
activiti 自定义用户: https://blog.csdn.net/meng564764406/article/details/53789958

activiti在线设计-Activiti6.0中如何设计和关联表单?

activiti6的流程编辑器怎么整合进自己的项目中
建议你可以看一下咖啡兔的相关技术博文:
网页链接
,
activiti6和activiti5整合方式一致
1.为什么要整合
Activiti5.10版本把原本独立的ActivitiModeler模块整合到了ActivitiExplorer中,两者相结合使用起来很方便,通过Modeler设计的流程模型可以直接部署到引擎,也可以把已经部署的流程转换为Model从而在Modeler中编辑。
在实际应用中也有这样的需求,把Modeler整合到业务系统中可以供管理员使用,或者作为BPM平台的一部分存在,很遗憾官方没有给出如何整合Modeler的文档。
2.整合工作
2.1下载源码
首先需要从Github下载源码:
2.2复制文件
复制的所有文件均在activiti-webapp-explorer2目录中。
src/main/resources中的、、到项目源码的源码根目录,保证编译之后在classes根目录
src/main/webapp中的api、editor、explorer、libs到项目的webapp目录(与WEB-INF目录同级)
2.3添加依赖
?
123456789101112138008138004

__
__

activiti-explorer
__

5.14
__

____

______

vaadin
______
____
____

______

dcharts-widget
______
____
____

______

activiti-simple-workflow
______
____
__

__
__

activiti-modeler
__

5.14

2.4添加Java类
添加一个类保存到项目中,注册了一些REST路由。
?
1234567891011121380081380042526272829
package;
import;import;import;import;import;import;
publicclassExplorerRestApplicationextendsActivitiRestApplication{
publicExplorerRestApplication(){__super();_}_/**_*CreatesarootRestletthatwillreceiveallincomingcalls._*/_@Override_publicsynchronizedRestletcreateInboundRoot(){__Routerrouter=newRouter(getContext());__();__(router);__(router);__JsonpFilterjsonpFilter=newJsonpFilter(getContext());__(router);__returnjsonpFilter;_}
}
2.5配置
在文件中添加如下配置:
?
12345678910111213141516

__

RestletServlet
__
__

____
____
____
__

__

RestletServlet
__

/service/*

2.6控制器
使用SpringMVC做了一个简单的封装,也可以使用其他的MVC实现。
?
123456789101112138008138004252627282930313800373839404138004748495051380057585960613800676869707138007778798081380087888990913800979899100101102103104105106107108109110111112113800113800121122123124125126127128129138003138007138001138005138009138003138007138001162163
package;
import;import;
import;import;
import;import;import;import;import;import;import;import;import;import;import;import;import;import;import;import;import;import;import;import;import;
/***流程模型控制器**@authorhenryyan*/@Controller@RequestMapping(value="/workflow/model")publicclassModelController{
protectedLoggerlogger=(getClass());
@Autowired_RepositoryServicerepositoryService;
/**_*模型列表_*/_@RequestMapping(value="list")_publicModelAndViewmodelList(){__ModelAndViewmav=newModelAndView("workflow/model-list");__List

list=().list();__("list",list);__returnmav;_}

/**_*创建模型_*/_@RequestMapping(value="create")_publicvoidcreate(@RequestParam("name")Stringname,@RequestParam("key")Stringkey,@RequestParam("description")Stringdescription,_____HttpServletRequestrequest,HttpServletResponseresponse){__try{___ObjectMapperobjectMapper=newObjectMapper();___ObjectNodeeditorNode=();___("id","canvas");___("resourceId","canvas");___ObjectNodestencilSetNode=();___("namespace","#");___("stencilset",stencilSetNode);___ModelmodelData=();

ObjectNodemodelObjectNode=();___(_NAME,name);___(_REVISION,1);___description=(description);___(_DESCRIPTION,description);___(());___(name);___((key));

(modelData);___((),().getBytes("utf-8"));

(()+"/service/editor?id="+());__}catch(Exceptione){___("创建模型失败:",e);__}_}

/**_*根据Model部署流程_*/_@RequestMapping(value="deploy/{modelId}")_publicStringdeploy(@PathVariable("modelId")StringmodelId,RedirectAttributesredirectAttributes){__try{___ModelmodelData=(modelId);___ObjectNodemodelNode=(ObjectNode)newObjectMapper().readTree((()));___byte[]bpmnBytes=null;

BpmnModelmodel=newBpmnJsonConverter().convertToBpmnModel(modelNode);___bpmnBytes=newBpmnXMLConverter().convertToXML(model);

StringprocessName=()+".";___Deploymentdeployment=().name(()).addString(processName,newString(bpmnBytes)).deploy();___("message","部署成功,部署ID="+());__}catch(Exceptione){___("根据模型部署流程失败:modelId={}",modelId,e);__}__return"redirect:/workflow/model/list";_}

/**_*导出model的xml文件_*/_@RequestMapping(value="export/{modelId}")_publicvoidexport(@PathVariable("modelId")StringmodelId,HttpServletResponseresponse){__try{___ModelmodelData=(modelId);___BpmnJsonConverterjsonConverter=newBpmnJsonConverter();___JsonNodeeditorNode=newObjectMapper().readTree((()));___BpmnModelbpmnModel=(editorNode);___BpmnXMLConverterxmlConverter=newBpmnXMLConverter();___byte[]bpmnBytes=(bpmnModel);

ByteArrayInputStreamin=newByteArrayInputStream(bpmnBytes);___(in,());___Stringfilename=().getId()+".";___("Content-Disposition","attachment;filename="+filename);___();__}catch(Exceptione){___("导出model的xml文件失败:modelId={}",modelId,e);__}_}

}

###2.7注意事项

如果使用Spring代理引擎,并且在项目中同时有文件(不管在main/resources还是test/resources目录),在里面的引擎中添加下面的配置参数,否则会导致打开Modeler的编辑页面时读取数据返回**204**状态码。

引擎默认名称为default,()查询时会先检索main/resources,然后再检索test/resources的和文件,所以当main/resources监测不到指定文件时就会导致该引擎被当做web应用的引擎对象,这样会导致有两个引擎,所以把引擎的名称改为非默认的“default”。

##3.中文乱码问题解决办法

在JVM参数中添加参数:

>-=UTF-8-=UTF-8

**参考**:[在ActivitiModeler中设计的流程包含奇数个中文时不能部署问题](

##4.效果截图

在最新的kft-activiti-demo版本(1.7.0)中已经集成了ActivitiModeler,可以在线访问,也可以下载源码学习如何配置。

登录[

![kft-activiti-demo中的效果截图](/files/2013/03/)![kft-activiti-demo中的效果截图](/files/2013/03/)

Activiti6.0中如何设计和关联表单?
新增了环节用户任务,这时紧跟着新增一个表单即可,以及脚本、样式、WebAPI;删除了环节用户任务,这时可以不用管,为顾及旧版本的流程定义,其对应的表单还需要保留,并不能删除;修改了环节用户任务,比如在A环节新增了两个字段,同时在B环节减少了两个字段,这时就要为A、B两个环节各自重新创建表单、重新创建脚本、样式、以及重新创建WebAPI,因为表单变了,那么业务也就变了,SQL(表)也都跟着变了。
《Activiti实战》epub下载在线阅读全文,求百度网盘云资源
《Activiti实战》(闫洪磊)电子书网盘下载免费在线阅读
链接:
提取码:xdni
书名:Activiti实战
豆瓣评分:7.2
作者:闫洪磊
出版社:_倒ひ党霭嫔
出版年:2015-1-1
页数:508
内容简介:
《Activiti实战》立足于实践,不仅让读者知其然,全面掌握Activiti架构、功能、用法、技巧和最佳实践,广度足够;而且让读者知其所以然,深入理解Activiti的源代码实现、设计模式和PVM,深度也足够。
《Activiti实战》一共四个部分:准备篇(1~2章)介绍了Activiti的概念、特点、应用、体系结构,以及开发环境的搭建和配置;基础篇(3~4章)首先讲解了ActivitiModeler、ActivitiDesigner两种流程设计工具的详细使用,然后详细讲解了BPMN2.0规范;实战篇(5~14章)系统讲解了Activiti的用法、技巧和最佳实践,包含流程定义、流程实例、任务、子流程、多实例、事件以及监听器等;高级篇(15~21)通过集成WebService、规则引擎、JPA、ESB等各种服务和中间件来阐述了Activiti不仅仅是引擎,实际上是一个BPM平台,最后还通过源代码对它的设计模式及PVM进行了分析。
作者简介:
闫洪磊(咖啡兔)资深软件开发工程师和架构师,为Activiti贡献了大量代码,为Activiti在中国的推广与普及做了大量的工作,在社群中有很高的威望和知名度,被称为中国Activiti领域的第一人。多年来一直从事OA、ERP等系统的开发与架构设计工作,持续关注并深入研究工作流引擎,目前就职于小马购车,担任架构师一职,并负责公司内部工作流平台的建设工作。

解决activiti流程部署时报错:not a valid value for 'NCName'

项目中使用了activiti作为工作流引擎,为了使用更加方便,自己开发了一套流程设置功能。先构建 BpmnModel 对象,再使用 RepositoryService 提供的deploy方法动态部署到activiti中。
功能开发完成后,开发本地测试和一轮测试之前都是OK的。然后前几日,在回归测试的时候,出现了某些用户可以成功部署,某些用户无法成功部署的“奇怪”现象。观察后台无法部署的后台错误日志:
这个报错的意思大概是:
于是想着百度看看 NCName 是什么类型,有什么约束。然后似乎没有一篇能说明白。试探了多次,发现:
为了证实想法,借助谷歌终于弄清楚了。 NCName只能以下划线(_)或字母开头,只能包含中划线(-)、下划线、字母和数字 ,我们的流程ID是按 单位ID+'_'+部门ID 规则拼接的,而单位ID是随机生成的字符串,所以有的是以数字开头的就无法部署。最终,我们更改了单位ID的 生成规则,保证是字母开头(多么简单粗暴的solution...)。
http://3y.uu456.com/bp_7sdqb2ylp82b61z989o0_1.html

工作流Activiti表说明

Activiti工作流总共包含23张数据表,所有的表名默认以“ ACT_ ”开头。并且表名的第二部分用两个字母表明表的用例,而这个用例也基本上跟Service API匹配
用来保存部署文件的大文本数据。
保存流程定义图片和xml、Serializable(序列化)的变量,即保存所有二进制数据,特别注意类路径部署时候,不要把svn等隐藏文件或者其他与流程无关的文件也一起部署到该表中,会造成一些错误(可能导致流程定义无法删除)。
属性数据表。存储这个流程引擎级别的数据。
?
历史活动信息。这里记录流程流转过的所有节点,与HI_TASKINST不同的是,taskinst只记录usertask内容。
附件信息
历史审批意见表
历史详情表:流程中产生的变量详细,包括控制流程流转的变量,业务表单中填写的流程需要用到的变量等。
任务参与者数据表。主要存储历史节点参与者的信息。
历史流程实例信息
历史任务流程实例信息
历史变量信息
用户组表,用来存储用户组信息。
用户扩展信息表。
用来保存用户的分组信息
用户信息表
部署信息表, 用来存储部署时需要持久化保存下来的信息
流程设计模型表,创建流程的设计模型时,保存在该数据表中。
流程解析表,解析成功了,在该表保存一条记录。业务流程定义数据表
运行时事件
运行时流程执行实例,我的代办任务查询表
身份联系,主要存储当前节点参与者的信息,任务参与者数据表。
运行时定时任务数据表
运行时任务数据表
运行时流程变量数据表

activiti和jbpm工作流引擎哪个比较好

Activiti5与jbpm4,底层都是使用流程虚拟机(PVM),而jbpm5以后则使用Drools Flow作为底层架构,目前Activiti6上市,同样也已经移除了PVM。技术只适不适合,并没有好坏之分,Activiti与jbpm均支持BPMN规范,jbpm与JBoss的项目整合使用的话,具有先天的优势,在这点看来,使用jbpmn更好。而jbpm采用的是LGPL开源协议,Activiti采用了宽松的Apache License2.0协议,从开源的角度来说,使用Activiti更好。参考自《疯狂工作流讲义第2版(Activiti6)》第1章。

流程引擎出现异常

由于配置了数据表更新检查,当启动服务时,如果发现不存在表,则会创建表,按照这个思路,找到Activiti原生数据库实例对照就可以找到流程引擎出现异常的原因了。

activiti和flowable用哪个会比较好

activiti和Flowable各有其特色、优势,具体哪个会更好需要结合实际情况来决定,不能一概而论。
Activiti有非常大的影响力来改变目前BPM的生态。Activiti的Apache授权,完整的功能,将使Activiti到达一个新的水平。Activiti将推动业界的创新,因为BPM技术可以广泛而自由地被应用。通过实现这些想法以及开源社区的努力,也让Activiti成为事实上的 BPM和BPMN标准执行。
Flowable支持BPMN和CMMN、DMN规范、它的主要含有五个引擎和一个官方自带的Modeler流程设计器,以及一套数据库表,以及发布版本(5个war)/源代码等。
扩展资料:
flowable的表不需要自己创建,只要在spring boot配置好数据库连接相关配置,它会自动创建70张表,但不包含流程设计器所需要的表,这些表是以act_de_*开头。需要自己搞去配置让它自己生成,或者从它的war生成的库中去导入。
Activiti将成为Alfresco的默认的业务流程引擎,Alfresco公司将继续支持jBPM,以及目前与其他业务流程的企业内容管理软件集成的引擎。 Alfresco公司也将与Alfresco企业版一起,提供对Activiti的支持,维护和技术保证。
参考资料来源:
百度百科-activiti

在流程引擎activiti中任务节点有哪些属性

1、首先是根据流程ID获取当前任务:
List

tasks = taskService.createTaskQuery().processInstanceId(procInstanceId).list();

2、然后根据当前任务获取当前流程的流程定义,然后根据流程定义获得所有的节点:

ProcessDefinitionEntity def = (ProcessDefinitionEntity) ((RepositoryServiceImpl)rs).getDeployedProcessDefinition(task.getProcessDefinitionId());

List

activitiList = def.getActivities(); //rs是指RepositoryService的实例

3、根据任务获取当前流程执行ID,执行实例以及当前流程节点的ID:

String excId = task.getExecutionId();

ExecutionEntity execution = (ExecutionEntity) runtimeService.createExecutionQuery().executionId(excId).singleResult();

String activitiId = execution.getActivityId();

4、然后循环activitiList 并判断出当前流程所处节点,然后得到当前节点实例,根据节点实例获取所有从当前节点出发的路径,然后根据路径获得下一个节点实例:

for(ActivityImpl activityImpl:activitiList){

String id = activityImpl.getId();

if(activitiId.equals(id)){

System.out.println("当前任务:"+activityImpl.getProperty("name")); //输出某个节点的某种属性

List

outTransitions = activityImpl.getOutgoingTransitions();//获取从某个节点出来的所有线路

for(PvmTransition tr:outTransitions){

PvmActivity ac = tr.getDestination(); //获取线路的终点节点

System.out.println("下一步任务任务:"+ac.getProperty("name"));

}

break;

}

}

flowable变量获取失败

flowable变量获取失败?
你好!建议devops自动化项目中使用flowable(类似于activiti的流程引擎)来进行自动化流程编排,需要将每个步骤执行的结果使用流程变量来保存,由于数据类型未知,采用fastjson来保存对象变量,使用flowable的api进行变量存储
flowable变量获取失败?
你好!建议devops自动化项目中使用flowable(类似于activiti的流程引擎)来进行自动化流程编排,需要将每个步骤执行的结果使用流程变量来保存,由于数据类型未知,采用fastjson来保存对象变量,使用flowable的api进行变量存储
spring boot
flowable中反序列化流程变量失败Couldn‘t deserialize object in variable ‘xxxx‘
forgetmetoo
原创
关注
0点赞·1400人阅读
flowable中反序列化流程变量失败Couldn't deserialize object in variable 'xxxx'
devops自动化项目中使用flowable(类似于activiti的流程引擎)来进行自动化流程编排,需要将每个步骤执行的结果使用流程变量来保存,由于数据类型未知,采用fastjson来保存对象变量,使用flowable的api进行变量存储:
Map

阅读更多 >>>  为什么软件会被锁住

rootNodeMap = new HashMap<>();

String responseNode = "response";

String requestNode = "request";

// 省略resultMap处理

// 省略resultMap处理

rootNodeMap.put(responseNode, resultMap);

rootNodeMap.put(requestNode, requestMap);

runtimeService.setVariable(processInstanceId, "rootNode", rootNodeMap);

登录后复制

由于流程变量中包含有对象嵌套数组的情况,在使用fastjson的JSONObject保存了主节点以后,在后续使用rootNode变量时,会出现反序列化失败的情况。具体错误堆栈如下:

org.flowable.common.engine.api.FlowableException: Couldn't deserialize object in variable 'rootNode'

at org.flowable.variable.service.impl.types.SerializableType.deserialize(SerializableType.java:117)

at org.flowable.variable.service.impl.types.SerializableType.getValue(SerializableType.java:65)

at org.flowable.variable.service.impl.persistence.entity.VariableInstanceEntityImpl.getValue(VariableInstanceEntityImpl.java:132)

at org.flowable.variable.service.impl.persistence.entity.VariableScopeImpl.getVariable(VariableScopeImpl.java:271)

at org.flowable.variable.service.impl.persistence.entity.VariableScopeImpl.getVariable(VariableScopeImpl.java:250)

at org.flowable.common.engine.impl.el.VariableContainerELResolver.getValue(VariableContainerELResolver.java:39)

at org.flowable.engine.impl.el.ProcessVariableScopeELResolver.getValue(ProcessVariableScopeELResolver.java:57)

at org.flowable.common.engine.impl.javax.el.CompositeELResolver.getValue(CompositeELResolver.java:234)

at org.flowable.common.engine.impl.de.odysseus.el.tree.impl.ast.AstIdentifier.eval(AstIdentifier.java:95)

at org.flowable.common.engine.impl.de.odysseus.el.tree.impl.ast.AstProperty.eval(AstProperty.java:68)

at org.flowable.common.engine.impl.de.odysseus.el.tree.impl.ast.AstProperty.eval(AstProperty.java:68)

at org.flowable.common.engine.impl.de.odysseus.el.tree.impl.ast.AstBinary$SimpleOperator.eval(AstBinary.java:31)

at org.flowable.common.engine.impl.de.odysseus.el.tree.impl.ast.AstBinary.eval(AstBinary.java:112)

at org.flowable.common.engine.impl.de.odysseus.el.tree.impl.ast.AstEval.eval(AstEval.java:53)

at org.flowable.common.engine.impl.de.odysseus.el.tree.impl.ast.AstNode.getValue(AstNode.java:31)

at org.flowable.common.engine.impl.de.odysseus.el.TreeValueExpression.getValue(TreeValueExpression.java:122)

at org.flowable.engine.impl.delegate.invocation.ExpressionGetInvocation.invoke(ExpressionGetInvocation.java:34)

at org.flowable.engine.impl.delegate.invocation.DelegateInvocation.proceed(DelegateInvocation.java:35)

at org.flowable.engine.impl.delegate.invocation.DefaultDelegateInterceptor.handleInvocation(DefaultDelegateInterceptor.java:26)

at org.flowable.engine.impl.el.JuelExpression.resolveGetValueExpression(JuelExpression.java:44)

at org.flowable.common.engine.impl.el.JuelExpression.getValue(JuelExpression.java:48)

at org.flowable.engine.impl.el.UelExpressionCondition.evaluate(UelExpressionCondition.java:37)

at org.flowable.engine.impl.util.condition.ConditionUtil.hasTrueCondition(ConditionUtil.java:47)

at org.flowable.engine.impl.bpmn.behavior.ExclusiveGatewayActivityBehavior.leave(ExclusiveGatewayActivityBehavior.java:84)

at org.flowable.engine.impl.bpmn.behavior.FlowNodeActivityBehavior.execute(FlowNodeActivityBehavior.java:39)

at org.flowable.engine.impl.agenda.ContinueProcessOperation.executeActivityBehavior(ContinueProcessOperation.java:275)

at org.flowable.engine.impl.agenda.ContinueProcessOperation.executeSynchronous(ContinueProcessOperation.java:159)

at org.flowable.engine.impl.agenda.ContinueProcessOperation.continueThroughFlowNode(ContinueProcessOperation.java:114)

at org.flowable.engine.impl.agenda.ContinueProcessOperation.continueThroughSequenceFlow(ContinueProcessOperation.java:327)

at org.flowable.engine.impl.agenda.ContinueProcessOperation.run(ContinueProcessOperation.java:80)

at org.flowable.engine.impl.interceptor.CommandInvoker.executeOperation(CommandInvoker.java:88)

at org.flowable.engine.impl.interceptor.CommandInvoker.executeOperations(CommandInvoker.java:72)

at org.flowable.engine.impl.interceptor.CommandInvoker.execute(CommandInvoker.java:56)

at org.flowable.engine.impl.interceptor.BpmnOverrideContextInterceptor.execute(BpmnOverrideContextInterceptor.java:25)

at org.flowable.common.engine.impl.interceptor.TransactionContextInterceptor.execute(TransactionContextInterceptor.java:53)

at org.flowable.common.engine.impl.interceptor.CommandContextInterceptor.execute(CommandContextInterceptor.java:72)

at org.flowable.common.spring.SpringTransactionInterceptor.lambda$execute$0(SpringTransactionInterceptor.java:56)

at org.flowable.common.spring.SpringTransactionInterceptor$$Lambda$532/1508152985.doInTransaction(Unknown Source)

at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:140)

at org.flowable.common.spring.SpringTransactionInterceptor.execute(SpringTransactionInterceptor.java:56)

at org.flowable.common.engine.impl.interceptor.LogInterceptor.execute(LogInterceptor.java:30)

at org.flowable.common.engine.impl.cfg.CommandExecutorImpl.execute(CommandExecutorImpl.java:56)

at org.flowable.common.engine.impl.cfg.CommandExecutorImpl.execute(CommandExecutorImpl.java:51)

at org.flowable.engine.impl.TaskServiceImpl.complete(TaskServiceImpl.java:208)

at com.dashuf.srgp.workflow.devops.DevopsTaskAutoCompletedHandler.autoComplete(DevopsTaskAutoCompletedHandler.java:41)

at com.dashuf.srgp.workflow.devops.DevopsTaskAutoCompletedHandler$$FastClassBySpringCGLIB$$f48068ba.invoke(

)

at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)

at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:749)

at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)

at org.springframework.aop.interceptor.AsyncExecutionInterceptor.lambda$invoke$0(AsyncExecutionInterceptor.java:115)

at org.springframework.aop.interceptor.AsyncExecutionInterceptor$$Lambda$663/1969812924.call(Unknown Source)

at com.dashuf.srgp.config.CustomThreadPoolTaskExecutor.lambda$submit$8(CustomThreadPoolTaskExecutor.java:46)

at com.dashuf.srgp.config.CustomThreadPoolTaskExecutor$$Lambda$664/488650178.call(Unknown Source)

at java.util.concurrent.FutureTask.run$$$capture(FutureTask.java:266)

at java.util.concurrent.FutureTask.run(FutureTask.java)

at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)

at java.lang.Thread.run(Thread.java:745)

Caused by: com.alibaba.fastjson.JSONException: autoType is not support. [B

at com.alibaba.fastjson.parser.ParserConfig.checkAutoType(ParserConfig.java:920)

at com.alibaba.fastjson.parser.ParserConfig.checkAutoType(ParserConfig.java:911)

at com.alibaba.fastjson.JSONObject$SecureObjectInputStream.resolveClass(JSONObject.java:548)

at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1613)

at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1518)

at java.io.ObjectInputStream.readArray(ObjectInputStream.java:1664)

at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1345)

at java.io.ObjectInputStream.access$300(ObjectInputStream.java:206)

at java.io.ObjectInputStream$GetFieldImpl.readFields(ObjectInputStream.java:2157)

at java.io.ObjectInputStream.readFields(ObjectInputStream.java:541)

at java.math.BigInteger.readObject(BigInteger.java:4258)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.lang.reflect.Method.invoke(Method.java:483)

at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1017)

at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1896)

at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1801)

at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1351)

at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1993)

at java.io.ObjectInputStream.defaultReadObject(ObjectInputStream.java:501)

at java.math.BigDecimal.readObject(BigDecimal.java:3748)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.lang.reflect.Method.invoke(Method.java:483)

at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1017)

at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1896)

at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1801)

at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1351)

at java.io.ObjectInputStream.readObject(ObjectInputStream.java:371)

at java.util.HashMap.readObject(HashMap.java:1396)

at sun.reflect.GeneratedMethodAccessor1139.invoke(Unknown Source)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.lang.reflect.Method.invoke(Method.java:483)

at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1017)

at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1896)

at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1801)

at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1351)

at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1993)

at java.io.ObjectInputStream.defaultReadObject(ObjectInputStream.java:501)

at com.alibaba.fastjson.JSONObject.readObject(JSONObject.java:488)

at sun.reflect.GeneratedMethodAccessor1138.invoke(Unknown Source)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.lang.reflect.Method.invoke(Method.java:483)

at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1017)

at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1896)

at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1801)

at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1351)

at java.io.ObjectInputStream.readObject(ObjectInputStream.java:371)

at java.util.HashMap.readObject(HashMap.java:1396)

at sun.reflect.GeneratedMethodAccessor1139.invoke(Unknown Source)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.lang.reflect.Method.invoke(Method.java:483)

at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1017)

at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1896)

at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1801)

at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1351)

at java.io.ObjectInputStream.readObject(ObjectInputStream.java:371)

at java.util.HashMap.readObject(HashMap.java:1396)

at sun.reflect.GeneratedMethodAccessor1139.invoke(Unknown Source)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.lang.reflect.Method.invoke(Method.java:483)

at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1017)

at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1896)

at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1801)

at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1351)

at java.io.ObjectInputStream.readObject(ObjectInputStream.java:371)

at org.flowable.variable.service.impl.types.SerializableType.deserialize(SerializableType.java:113)

... 57 common frames omitted

登录后复制

看字面意思理解,应该是无法识别关键字[B,猜测应该是fastjson在序列化的时候写入class的数据类型,看起来像是Byte数组之类,目前使用的fastjson版本是1.2.49版本,在github搜索了一下,目前最新版本已经到1.2.76,并且中间有一些issue提到Array、Map等,和我的应用场景比较相似,这些issue已经进行了升级解决。

于是尝试着将fastjson版本升级到1.2.76,再次执行,成功通过,问题解决。

这个问题排查定位从上周五的晚上一直到本周一的早上,持续时间很长,但是修改方式却非常简单,只是升级了fastjson的版本而已,之前一直没有怀疑是fastjson的问题,而是将重点放在自己的中间数据处理上面。所以后续遇到类似问题,可以先尝试这种快捷的方案,节约时间。

devops

activiti

java

spring boot

个人写真照片

精选推荐

广告

Couldn't deserialize object in variable 'user1' 反序列化失败

4620阅读·0评论·0点赞

2017年2月17日

org.activiti.engine.ActivitiException: coudn‘t deserialize object in variable ‘a‘.获取流程变量无法反序列化问题。

1025阅读·0评论·2点赞

2019年10月20日

解决:Caused by: org.flowable.common.engine.api.FlowableWrongDbException: version,问题

5893阅读·0评论·1点赞

2021年5月21日

org.activiti.engine.ActivitiException: Couldn't deserialize object in variable 'application'

619阅读·0评论·0点赞

2016年12月23日

Cannot construct instance of `com.*` (although at least one Creator exists): cannot deserializ

3.0W阅读·7评论·6点赞

2020年3月3日

个人委托律师授权委托书,专业经验丰富

精选推荐

广告

[Flowable6.4.1]DMN报错Error parsing '#{input1 == >19 }': syntax error at position 13, encountered '>'...

2336阅读·0评论·0点赞

2019年4月15日

Flowable 一些异常报错、注意事项(4)

1532阅读·0评论·1点赞

2022年4月21日

Flowable实战(一)启动第一个完整流程

2661阅读·5评论·13点赞

2022年1月7日

Activity FlowableException: Couldn't serialize value

874阅读·0评论·0点赞

2019年12月29日

Flowable工作流兼容达梦数据库

1332阅读·0评论·0点赞

2021年10月8日

使用Mycat时,activiti出现异常 Couldn‘t deserialize object in variable ‘assignee‘

610阅读·0评论·0点赞

2020年9月23日

使用Mycat时,activiti出现异常 Couldn't deserialize object in variable 'assignee'

4448阅读·2评论·0点赞

2018年8月17日

flowable 流程表单_Flowable 实现【选择下一步流程审核人】

1258阅读·0评论·0点赞

2020年12月19日

java 类不能序列化_Java : 实体类不能序列化异常

363阅读·0评论·0点赞

2021年2月13日

activiti在运行时报错:couldn‘t find a variable type that is able to serialize XXX

1224阅读·0评论·0点赞

2021年3月30日

Flowable FlowableException:flowable-exclusive-gateway-condition-not-allowed-on-single-seq-flow

570阅读·1评论·1点赞

2022年3月21日

Activiti基础 condition expression returns non-Boolean 解决方案

1.3W阅读·7评论·5点赞

2018年8月19日

nested exception is org.flowable.common.engine.api.FlowableException: Error initialising dmn data mo

阅读更多 >>>  为什么有的软件图标

国内外低代码开发平台发展情况?

低代码开发平台在国内经过近二十年发展已经非常成熟,通过对国内近90多家低代码开发平台厂商进行调研或观测,我发现目前主要这么几大势力在布局:
低代码开发平台
1、传统的管理软件开发平台厂商:天翎、天纵、起步等都是,他们深耕开发平台领域时间最久,对于开发平台的理解有自己独特的见解,通过不断迭代自身产品引领开发平台的持续进化;
2、垂直业务领域信息化厂商转型:例如明道云(以前叫“明道”),由项目协同办公等垂直领域信息化建设转型为低代码开发平台厂商,由于之前在垂直业务领域积淀了大量客户群,他们也是来势汹汹;
3、OA协同办公系统厂商:泛微、蓝凌、致远等OA巨头纷纷意识到成品型系统对于客户的个性化需求越来越难适应,纷纷推出低代码中间件甚至开发工具,但是碍于业务线冲突和品牌定位等因素,目前仍以自用为主,和传统专业的开发工具相比也还有差距;
4、新兴互联网厂商:例如宜搭、搭搭云、微事云等厂商,他们敏锐的捕捉到低代码的热度,将低代码开发技术和云服务实现高度融合,这类平台虽然在功能层面不能和专业开发平台相抗衡,但是凭借视觉呈现的新颖性和互联网推广应用模式,也是颇具吸引力。
四大势力纷纷布局纷纷发力,这种百家齐放百家争鸣的发展状态是个好事,但我们需要注意到,虽然大家都叫低代码开发平台,但是各家的平台从设计理念到业务擅长其实差异非常大,如果盲目的选型则可能成为小白鼠试验品:
1、擅长数据填报分析:这类开发平台多在表单和报表呈现上下功夫,例如勤哲、云表、活字格、魔方网表、东软saca、狐表、E立方等等,都是基于类Excel理念,对于数据的录入、处理和分析较为擅长;
2、擅长复杂业务流程处理:这类开发平台核心优势在于流程引擎的打造,以天翎myapps平台为例,其独立自主研发的流程引擎和开源jbpm、activiti相比更加适应中国式复杂业务流程管控模式和操作习惯,在流程类业务管理系统构建上比较有口碑;
3、擅长网站/小程序/APP快速开发:这类开发平台主要包括深圳世云IVX、牛刀云、迪西克等,像IVX就宣称可以实现真正意义的0代码,对非技术人员同样友好!
我看其他网友们还对国外的Mendix、Outsystems、Salesforce、Appian和Joget等低代码开发平台进行了简单介绍,但是我个人觉得没有必要去对比和深究,一方面国内外在管理模式和管理系统应用上存在很大的差异,在不同条件下去评判对方对彼此都不公平;二方面国内低代码开发平台已经非常棒棒哒,不论是技术、业务还是服务否已经很完善和成熟,真心没必要涨别人气焰灭自己威风!
为什么低代码开发平台越来越受软件公司和终端企业欢迎?那是因为低代码开发平台改变了传统僵硬呆板的软件开发模式,能够让软件开发团队和管理软件系统注入快速灵活的生命力,而面对快速变革的业务场景和日益提高的客户要求,这种对“效率+个性化”的追求正是大家共同的向往!

网站数据信息

"流程引擎activiti,activiti在线设计-Activiti6.0中如何设计和关联表单?"浏览人数已经达到17次,如你需要查询该站的相关权重信息,可以点击进入"Chinaz数据" 查询。更多网站价值评估因素如:流程引擎activiti,activiti在线设计-Activiti6.0中如何设计和关联表单?的访问速度、搜索引擎收录以及索引量、用户体验等。 要评估一个站的价值,最主要还是需要根据您自身的需求,如网站IP、PV、跳出率等!