因为规则引擎用的drools,所以自然而然先考察了jbpm7
不得不说drools对dmn的支持非常的好,不管是决策表,执行自定义java代码 ,比较惊艳,该有的都有 完全可以生产使用
但. jbpm7可以用半成品来形容,
首先给的文档内容很大但有价值的找不到,比如他的bussniess central里从definitions 生成instances时,有些额外的变量如果不在每个task里显式声明,就看到到tasks, 按给的例子找到方法后, 这个方法涉及的东西在文档里没有, 也就是这个很大的文档解决不了这个非常基础甚至是阻断性问题. 其次他的form做的极其垃圾已经不能用半成品形容了,
用他的form直接值是错的,在引用dmn的基础上, 甚至值都是错的, managerDecision值是Y
左边是他的form,右边是按接口调用. 很低级且不可原谅
尽管如此还是原谅了,考察了如何引入外部java代码, 可以看到bussiness central的设计一团糟糕.文档的编写一团糟糕, 文档几近不可用
放弃
暂时看下来.可供选择的 flowable, camunda
参考了:
https://fiend.blog.csdn.net/article/details/126406168
2022-12-15更新
jbpm中执行自定义java代码貌似是两个方法,
1是service task ,其中Implementation选java. 从后台看是在发布的时候会去初始化一个instance, 报错无法初始化,没有提示信息. 因为没有其他可操作的地方了, 放弃
2是在setting里有custom tasks里,安装 ServiceTask, 这时候会在项目里生成一个文件ServiceTask.wid ,内容如下:
[
[
"name" : "ServiceTask",
"displayName" : "ServiceTask",
"category" : "jbpm-workitems-bpmn2",
"description" : "",
"defaultHandler" : "mvel: new org.jbpm.process.workitem.bpmn2.ServiceTaskHandler()",
"documentation" : "jbpm-workitems-bpmn2/index.html",
"parameters" : [
"mode" : new StringDataType()
,"interfaceImplementationRef" : new StringDataType()
,"operationImplementationRef" : new StringDataType()
,"implementation" : new StringDataType()
,"Parameter" : new StringDataType()
],
"results" : [
"Result" : new StringDataType()
],
"mavenDependencies" : [
"org.jbpm:jbpm-workitems-bpmn2:7.73.0.Final"
],
"icon" : "ServiceTask.png"
]
]
这时候在bpmn编辑器里
类似于拓展的地方, 有了这样的控件.
可编辑的地方是data assign
其中interface是没有的, 只有wid文件里的5个参数.按着猜测填了之后发布,生成instance,这时候会报错 nullpointexception.报错函数是ServiceTaskHandler.java 290行, class.forName报空指针异常,原因是把null作为className传进去了
https://github.com/kiegroup/jbpm/blob/main/jbpm-workitems/jbpm-workitems-bpmn2/src/main/java/org/jbpm/process/workitem/bpmn2/ServiceTaskHandler.java
参考源码猜测是interface这个参数没配导致的. 加上之后.再跑,不在这个位置报错了, 提示无法找到自定义的java类, 已经确认jar是正确被依赖的.
故可以得出结论, 这玩意就是个半成品,太低级了, 要是拿出来卖要被骂死,因为是免费的为爱发电的所以不好骂人, 就是个半成品还发布版本, 脸都不要了