Установите переменную переходного объекта без сериализации в Camunda

#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/