1、禁用批量插入

默认情况下,引擎将在批量插入中将同一数据库表的多个插入语句组合在一起,从而提高性能。已经针对所有支持的数据库进行了测试和实施。

但是,它可能是受支持和测试过的数据库的特定版本,不允许批量插入(例如,我们在z / OS上有一个关于DB2的报告,虽然DB2一般工作),但可以在流程引擎上禁用批量插入组态:

<property name="bulkInsertEnabled" value="false" />

2、安全脚本

默认情况下,使用脚本任务时,被执行的脚本与Java委托具有相似的功能。它具有对JVM的完全访问权限,可以永久运行(由于无限循环)或耗尽大量内存。但是,Java委托需要被写入并放在jar中的classpath中,并且与流程定义有不同的生命周期。最终用户通常不会编写Java委托,因为这是开发人员的典型工作。

另一方面,脚本是流程定义的一部分,其生命周期也是一样的。脚本任务不需要jar部署的额外步骤,但是可以在部署流程定义的那一刻执行。有时脚本任务的脚本不是由开发人员编写的。但是,如上所述,这带来了问题:脚本可以完全访问JVM,并且在执行脚本时可以阻止很多系统资源。从几乎任何人都允许脚本是不是一个好主意。

为了解决这个问题,可以启用安全的脚本功能。目前,该功能仅针对JavaScript脚本执行。要启用它,请将flowable-secure-javascript依赖项
添加到您的项目中。当使用maven时:

<dependency>
<groupId>org.flowable</groupId>
<artifactId>flowable-secure-javascript</artifactId>
<version>${flowable.version}</version>
</dependency>

添加这个依赖关系将会传递Rhino的依赖 https://developer.mozilla.org/en-US/docs/Mozilla/Projects/Rhino)。犀牛是一个JDK的JavaScript引擎。它曾经被包含在JDK版本6和7中,并被Nashorn引擎所取代。然而,犀牛项目被纳入JDK后继续发展。随后添加了许多功能(包括Flowable用于实现安全脚本的功能)。在撰写本文时,Nashorn引擎没有实现安全脚本功能所需的功能。

这意味着脚本之间可能会有(通常很小的)差异(例如importPackage在Rhino上运行,但在Nashorn上必须使用load())。这些更改将类似于从JDK 7切换到8个脚本。

配置安全脚本是通过在实例化流程引擎之前传递给流程引擎配置的专用Configurator对象完成的:

SecureJavascriptConfigurator configurator = new SecureJavascriptConfigurator()
.setWhiteListedClasses(new HashSet<String>(Arrays.asList("java.util.ArrayList")))
.setMaxStackDepth(10)
.setMaxScriptExecutionTime(3000L)
.setMaxMemoryUsed(3145728L)
.setNrOfInstructionsBeforeStateCheckCallback(10);
processEngineConfig.addConfigurator(configurator);

以下设置是可能的:

  • enableClassWhiteListing:如果为true,所有类将被列入黑名单,所有想要使用的类将需要单独列入白名单。这可以严格控制暴露给脚本的内容。默认为false。
  • whiteListedClasses:一组字符串,与允许在脚本中使用的类的完全限定类名相对应。例如,要在脚本中公开执行对象,需要将org.flowable.engine.impl.persistence.entity.ExecutionEntityImpl字符串添加到此Set中。默认为空。
  • maxStackDepth:在脚本中调用函数时限制堆栈深度。这可以用来避免在递归调用脚本中定义的方法时发生堆栈溢出异常。默认情况下是-1(禁用)。
  • maxScriptExecutionTime:脚本允许运行的最长时间。默认情况下是-1(禁用)。
  • maxMemoryUsed:允许脚本允许使用的最大内存(以字节为单位)。请注意,脚本引擎本身也会占用一定数量的内存。默认情况下是-1(禁用)。
  • nrOfInstructionsBeforeStateCheckCallback:脚本的最大执行时间和内存使用量是使用脚本的每x个指令调用的回调来实现的。请注意,这些不是脚本指令,而是java字节码指令(这意味着一个脚本行可能是数百个字节的代码指令)。默认为100。

注意:该maxMemoryUsed设置只能由支持com.sun.management.ThreadMXBean#getThreadAllocatedBytes()方法的JVM使用。Oracle
JDK有这个。
ScriptExecutionListener和ScriptTaskListener还有一个安全的变体:
org.flowable.scripting.secure.listener.SecureJavascriptExecutionListener和
org.flowable.scripting.secure.listener.SecureJavascriptTaskListener。
它的用法如下:

<flowable:executionListener event="start"
class="org.flowable.scripting.secure.listener.SecureJavascriptExecutionListener">
<flowable:field name="script">
<flowable:string>
<![CDATA[
execution.setVariable('test');
]]>
</flowable:string>
</flowable:field>
<flowable:field name="language" stringValue="javascript" />
</flowable:executionListener>

上面文章来自盘古BPM研究院:http://vue.pangubpm.com/
文章翻译提交:https://github.com/qiudaoke/flowable-userguide
了解更多文章可以关注微信公众号:

Flowable入门系列文章193 - 禁用批量插入和安全脚本相关推荐

  1. Flowable入门系列文章194 - JMX的基本介绍和属性说明

    1.介绍 可以使用标准的Java管理扩展(JMX)技术连接到Flowable引擎,以获取信息或更改其行为.任何标准的JMX客户端都可以用于这个目的.启用和禁用Job Executor,部署新的流程定义 ...

  2. Flowable入门系列文章183 - LDAP的属性介绍

    以下属性可以设置org.flowable.ldap.LDAPConfiguration: .LDAP配置属性 属性名称 描述 类型 默认值 服务器 可以到达LDAP系统的服务器.例如ldap:// l ...

  3. Flowable入门系列文章25 - Activity解读 01

    事件被用来模拟流程生命周期中发生的事情.事件总是被视为一个圆圈.在BPMN 2.0中,存在两个主要事件类别:捕捉事件和抛出事件. 捕捉:当进程执行到达事件时,它将等待触发器发生.触发器的类型由XML中 ...

  4. Flowable入门系列文章47 - 电子邮件任务

    Flowable允许您通过向一个或多个收件人发送电子邮件的自动邮件服务任务来增强业务流程,包括支持cc,bcc,HTML内容等.请注意,邮件任务不是 BPMN 2.0规范的正式任务(因此没有专门的图标 ...

  5. Flowable入门系列文章195 - JMX的组态和服务URL

    1.组态 JMX使用默认配置,以便于使用最常用的配置进行部署.但是,更改默认配置很容易.您可以通过编程或通过配置文件来完成.下面的代码片段显示了如何在配置文件中完成这个工作: <bean id= ...

  6. Flowable入门系列文章11 - Flowable API 01

    1.Process Engine API和服务 引擎API是与Flowable进行交互的最常见的方式.主要的出发点是ProcessEngine,可以按照配置部分所述的几种方式创建 .从 Process ...

  7. Flowable入门系列文章35 - Activity解读 11

    1.消息中间捕捉事件 描述 中间捕获 消息事件捕获具有指定名称的消息. 图形表示法 中间捕捉消息事件可视化为一个典型的中间事件(圆圈内有较小的圆圈),里面有消息图标.消息图标是白色(未填充),以指示其 ...

  8. Flowable入门系列文章49 - 骡子任务

    mule任务允许你发送消息给mule,增强了Flowable的集成功能.请注意,Mule任务不是 BPMN 2.0规范的正式任务(因此没有专门的图标).因此,在Flowable中,mule任务被实现为 ...

  9. Flowable入门系列文章90 - 一般可流动的REST原则 01

    1.安装和认证 Flowable包含一个REST API给Flowable引擎,可以通过将flowable-rest.war文件部署到像Apache Tomcat这样的servlet容器来安装.但是, ...

最新文章

  1. 深入理解GBDT多分类算法
  2. NetLogo入门(一)——熟悉操作界面
  3. php 实验室管理系统,生物信息实验室管理系统-Metalims安装
  4. 【LUOGU???】WD与积木 NTT
  5. 《活出生命的意义》:人生有何意义?
  6. 函数返回值是否使用引用类型的问题:理解引用、返回值
  7. ValueError: setting an array element with a sequence.
  8. PHP工具篇:PHPStorm IDE使用CodeSniffer代码规范化管理
  9. 【解决方案】HIKSDK/大华SDK/Ehome协议视频融合平台EasyCVR在危化行业的监控系统搭建应用
  10. c语言窗口炸弹代码,C语言实现宾果消消乐
  11. Qt使用教程(C++版)
  12. 项目管理(PM)简介
  13. Java实现 LeetCode第197场周赛 (题号5460,5461,5211,5463)
  14. bc汇编指令用法_BC操作流程
  15. android星星闪效果,css3夜空中闪烁的星星效果
  16. 判断日期是否是明天,今天,昨天
  17. 2020-2021下学期 奖状的清单
  18. [史上最全]笔记本更换内存条和固态硬盘重装系统教程
  19. java 序列化理解_对Java Serializable(序列化)的理解和总结(二)
  20. 关于动漫的HTML网页设计:期末前端web大作业——海贼王基地(6个页面)

热门文章

  1. 【电脑运用及修理】Netscape 浏览器
  2. FxFactory Pro 7.1.1 完整版:超强视觉特效插件 FCPX\AE\PR MAC
  3. python 之 print用法
  4. 第二章 模态命题:必然、可能
  5. arduino i2c 如何写16位寄存器_Arduino只是拿来玩的?你错了!教你用它自制一个非常实用的小产品|智能灌溉控制器...
  6. 【备战美赛】重要!2023年美赛官方发布最新通知
  7. 无法更新运行时文件夹共享状态_Windows 10 2019 年 5 月更新 (1903_18362) 已知问题与处理进度汇总。...
  8. 关于微信自动回复机器人
  9. 该虚拟机似乎正在使用中。 如果该虚拟机未在使用,请按“获取所有权(T)”按钮获取它的所有权。否则,请按“取消(C)”按钮以防损坏
  10. css 去掉i标签默认斜体样式