use of org.jbpm.marshalling.impl.ProcessInstanceMarshaller in project jbpm by kiegroup.
the class ProcessInstanceInfo method transform.
public void transform() {
// if (processInstance == null) {
// return;
// }
ByteArrayOutputStream baos = new ByteArrayOutputStream();
boolean variablesChanged = false;
try {
ProcessMarshallerWriteContext context = new ProcessMarshallerWriteContext(baos, null, null, null, null, this.env);
context.setProcessInstanceId(processInstance.getId());
context.setState(processInstance.getState() == ProcessInstance.STATE_ACTIVE ? ProcessMarshallerWriteContext.STATE_ACTIVE : ProcessMarshallerWriteContext.STATE_COMPLETED);
String processType = ((ProcessInstanceImpl) processInstance).getProcess().getType();
saveProcessInstanceType(context, processInstance, processType);
ProcessInstanceMarshaller marshaller = ProcessMarshallerRegistry.INSTANCE.getMarshaller(processType);
Object result = marshaller.writeProcessInstance(context, processInstance);
if (marshaller instanceof ProtobufRuleFlowProcessInstanceMarshaller && result != null) {
JBPMMessages.ProcessInstance _instance = (JBPMMessages.ProcessInstance) result;
PersisterHelper.writeToStreamWithHeader(context, _instance);
}
context.close();
} catch (IOException e) {
throw new IllegalArgumentException("IOException while storing process instance " + processInstance.getId() + ": " + e.getMessage(), e);
}
byte[] newByteArray = baos.toByteArray();
if (variablesChanged || !Arrays.equals(newByteArray, processInstanceByteArray)) {
this.state = processInstance.getState();
this.lastModificationDate = new Date();
this.processInstanceByteArray = newByteArray;
this.eventTypes.clear();
for (String type : processInstance.getEventTypes()) {
eventTypes.add(type);
}
}
if (!processInstance.getProcessId().equals(this.processId)) {
this.processId = processInstance.getProcessId();
}
((WorkflowProcessInstanceImpl) processInstance).setPersisted(true);
}
use of org.jbpm.marshalling.impl.ProcessInstanceMarshaller in project jbpm by kiegroup.
the class ProcessInstanceInfo method getProcessInstance.
public ProcessInstance getProcessInstance(InternalKnowledgeRuntime kruntime, Environment env, boolean readOnly) {
this.env = env;
if (processInstance == null) {
try {
ByteArrayInputStream bais = new ByteArrayInputStream(processInstanceByteArray);
MarshallerReaderContext context = new MarshallerReaderContext(bais, (InternalKnowledgeBase) kruntime.getKieBase(), null, null, ProtobufMarshaller.TIMER_READERS, this.env);
ProcessInstanceMarshaller marshaller = getMarshallerFromContext(context);
context.wm = ((StatefulKnowledgeSessionImpl) kruntime).getInternalWorkingMemory();
processInstance = marshaller.readProcessInstance(context);
((WorkflowProcessInstanceImpl) processInstance).setPersisted(false);
if (readOnly) {
((WorkflowProcessInstanceImpl) processInstance).disconnect();
}
context.close();
} catch (IOException e) {
e.printStackTrace();
throw new IllegalArgumentException("IOException while loading process instance: " + e.getMessage(), e);
}
}
((WorkflowProcessInstanceImpl) processInstance).internalSetStartDate(this.startDate);
return processInstance;
}
Aggregations