Camunda BPM和Flowable中的JSON处理(下)

Camunda BPM和Flowable中的JSON处理(下)

 

在Flowable中使用JSON

现在,让我们看一下Flowable及其方法。与Camunda不同,Flowable选择本机支持流行的Jackson库来解析,创建和存储JSON对象。Jackson的本机*支持意味着Java开发人员可以使用他们熟悉的库,并且该库在市场上具有更广泛的支持。也就是说,如果将JsonNode对象(具有丰富的子类集)存储为Flowable中的变量,则会自动将其识别为JSON对象,并存储为常规字符串或ACT_GE_BYTEARRAY表。仅当数据的长度小于其存储字段中允许的最大字符数时,该数据才作为常规字符串存储(TEXT_)(您可能已经注意到,两个引擎使用相同的表来存储较大的对象;这是它们共同祖先的结果。)

 

这是创建sierra对象并将其作为流程实例变量存储在Flowable中的方法:

 

var JsonNodeFactory = Java.type('com.fasterxml.jackson.databind.node.JsonNodeFactory');

 

var sierra = {};

sierra.displacement = 6.2;

sierra.engineType = 'V8';

sierra.forcedInduction = false;

sierra.horsepower = 420;

sierra.year = 2018;

sierra.make = 'GMC';

sierra.model = 'Sierra';

 

execution.setVariable('sierra', JsonNodeFactory.instance.textNode(JSON.stringify(sierra)));

 

正如我们对Camunda BPM所做的那样,在第一个示例中,我们使用原生JavaScript功能创建了JSON对象。为了遵循相同的模式,下面是一个示例(使用Java):如何使用Jackson来创建对象,然后将其存储在Flowable中:

 

ObjectNode sierra = JsonNodeFactory.instance.objectNode();

 

sierra.put("displacement", 6.2);

sierra.put("engineType", "V8");

sierra.put("forcedInduction", false);

sierra.put("horsepower", 420);

sierra.put("year", 2018);

sierra.put("make", "GMC");

sierra.put("model", "Sierra");

 

execution.setVariable("sierra", sierra);

 

要检索变量并进行内部检查,我们将使用execution.getVariable('sierra')代码,然后可以使用Jackson中可用的本机方法对JSON对象进行内部检查:

 

var sierra = execution.getVariable('sierra');

var make = JSON.parse(sierra.textValue()).make;

 

在这两种情况下,都可以根据需要或根据业务需求在表达式,脚本或Java类中访问sierra变量。

 

总结思想

 

Spin / Camunda和Jackson / Flowable都提供了在流程模型中读取,写入和访问JSON对象的简便方法,即使对于中级开发人员而言,使用它们也不麻烦。但是哪个更好?

我们喜欢Flowable的方法,因为它利用了更直观,更灵活和更普及的Jackson实用程序,使Java开发人员可以使用他们已经熟悉的东西。此外,作为开发人员,我们喜欢Flowable在数据库中以纯文本而不是二进制形式存储JSON(如果可能),从而使读取该值更加容易。在这种情况下,优势可流动。

 

相关教程