我想知道如何通过REST传递自定义对象来在JBPM 6.1.0.CR1中启动一个进程。
当我通过jbpm-console启动进程时,将显示表单以输入数据。有没有办法通过REST调用传递相同的数据?
我的最终目标是让JMeter脚本启动多个进程,以测试系统的性能。
即使传递自定义对象是不可行的,我想知道是否可以传递原始类型(String,Integer等) - 即使这样我也可以在触发进程后构造我的自定义对象。
我尝试过JBPM文档,但我无法理解如何使用查询参数以及它是否适用于我的场景。
答案 0 :(得分:1)
我最好的解决方案是将我的自定义对象分析为基元并通过REST传递这些(作为map_ *查询参数)。然后在脚本任务中的流程中创建自定义对象(调用kcontext.put(" obj",obj))。
这样我维护简单性并避免使用占用更多资源的XML / JSON编组。
当然,如果需要传递非常复杂的自定义对象,Kris提出的解决方案可能更好 - 但是如果你的自定义对象很复杂,你可能需要更多地重构/分析你的模型。
答案 1 :(得分:0)
尝试使用REST执行操作,您可以在那里发送XML命令,例如StartProcessCommand,这可以包含自定义类型。这些自定义对象将使用JAXB序列化为XML。如果使用远程Java REST客户端,则使用相同的方法。
答案 2 :(得分:0)
您需要在项目中添加kjar作为maven依赖项,以便创建通过jbpm-console创建的自定义对象。那么你可以传递地图。
为了检索具有对象值的地图,您需要使用
RemoteRestRuntimeEngineFactory restSessionFactory = new RemoteRestRuntimeEngineFactory(process,
new URL("http://127.0.0.1:8080/business-central"),
"username, "pass");
RuntimeEngine engine = restSessionFactory.newRuntimeEngine();
TaskService taskService = engine.getTaskService();
Task task = taskService.getTaskById(taskId);
long contentId = task.getTaskData().getDocumentContentId();
Content content = taskService.getContentById(contentId);
**((Map< String,Object >) ContentMarshallerHelper.unmarshall(content.getContent(), null));**