public void setValue(Object value, ValueFields valueFields) { byte[] byteArray = serialize(value, valueFields); valueFields.setCachedValue(value); if(valueFields.getByteArrayValue() == null) { if(valueFields instanceof VariableInstanceEntity) { Context .getCommandContext() .getDbSqlSession() .addDeserializedObject(valueFields.getCachedValue(), byteArray, (VariableInstanceEntity)valueFields); } } super.setValue(byteArray, valueFields); }
public Object getValue(ValueFields valueFields) { Object cachedObject = valueFields.getCachedValue(); if (cachedObject!=null) { return cachedObject; } byte[] bytes = (byte[]) super.getValue(valueFields); ByteArrayInputStream bais = new ByteArrayInputStream(bytes); Object deserializedObject; try { ObjectInputStream ois = createObjectInputStream(bais); deserializedObject = ois.readObject(); valueFields.setCachedValue(deserializedObject); if (valueFields instanceof VariableInstanceEntity) { Context .getCommandContext() .getDbSqlSession() .addDeserializedObject(deserializedObject, bytes, (VariableInstanceEntity) valueFields); } } catch (Exception e) { throw new ActivitiException("Couldn't deserialize object in variable '"+valueFields.getName()+"'", e); } finally { IoUtil.closeSilently(bais); } return deserializedObject; }
.getCommandContext() .getDbSqlSession() .addDeserializedObject(deserializedObject, bytes, (VariableInstanceEntity) valueFields);
@Override public void setValue(Object value, ValueFields valueFields) { byte[] byteArray = serialize(value, valueFields); valueFields.setCachedValue(value); if (valueFields.getBytes() == null) { // TODO why the null check? won't this cause issues when setValue is called the second this with a different object? if (valueFields instanceof VariableInstanceEntity) { // register the deserialized object for dirty checking. Context.getCommandContext() .getDbSqlSession() .addDeserializedObject(new DeserializedObject(this, valueFields.getCachedValue(), byteArray, (VariableInstanceEntity) valueFields)); } } super.setValue(byteArray, valueFields); }
@Override public Object getValue(ValueFields valueFields) { Object cachedObject = valueFields.getCachedValue(); if (cachedObject != null) { return cachedObject; } byte[] bytes = (byte[]) super.getValue(valueFields); if (bytes != null) { Object deserializedObject = deserialize(bytes, valueFields); valueFields.setCachedValue(deserializedObject); if (valueFields instanceof VariableInstanceEntity) { // we need to register the deserialized object for dirty checking, // so that it can be serialized again if it was changed. Context.getCommandContext() .getDbSqlSession() .addDeserializedObject(new DeserializedObject(this, deserializedObject, bytes, (VariableInstanceEntity) valueFields)); } return deserializedObject; } return null; // byte array is null }