#java #serialization #camunda #transient
Вопрос:
У меня есть процесс в Камунде, в котором нет никаких пользовательских задач. У Iy есть только некоторые служебные задачи. Я хочу установить переменную переходного объекта, а затем выполнить несколько задач и управлять ею, но Камунда заставляет меня заставить ее реализовать Serializable
интерфейс.
Мой код таков:
TypedValue transient_ctx = Variables.objectValue( new BpmContext(), true).create();
ProcessInstanceWithVariables process_res =
runtimeService.createProcessInstanceByKey(param.getProcessKey())
.setVariable("Param", transient_ctx)
.executeWithVariablesInReturn();
но получите следующее исключение:
org.camunda.bpm.engine.ProcessEngineException: Cannot find serializer for value 'ObjectValue [value=org.BpmContext@433a4e29, isDeserialized=true, serializationDataFormat=null, objectTypeName=null, serializedValue=null, isTransient=true]'.
Есть ли какой-либо способ установить временный объект обычно без его сериализации?
Комментарии:
1. Конечно, дорогая, готово.
Ответ №1:
Если вы собираетесь передавать данные как данные процесса, то Camunda требует их сериализации, будь то в Java или других форматах данных сериализации.
Поскольку вы в порядке с данными переходного процесса, это означает, что вы не ожидаете, что данные будут доступны дольше, чем срок службы текущего потока. Я думаю, что переменная ThreadLocal также сделала бы это для вас. В Интернете есть много примеров. Это один из них: https://codedelay.com/threadlocal-variable-in-java-with-example/