Hello,
I have a spring-boot camunda application where i send messages to other running processes and inbetween i store Process Variables.
Now when trying to store a message with length over 4k it gives me the error:
Value too long for column "TEXT_ CHARACTER VARYING(4000).
Value too long for column “TEXT_ CHARACTER VARYING(4000)”: “'{”“D2"”:"“SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS… (4105)”; SQL statement:
insert into ACT_HI_VARINST (
ID_,
PROC_DEF_KEY_,
PROC_DEF_ID_,
ROOT_PROC_INST_ID_,
PROC_INST_ID_,
EXECUTION_ID_,
ACT_INST_ID_,
TENANT_ID_,
CASE_DEF_KEY_,
CASE_DEF_ID_,
CASE_INST_ID_,
CASE_EXECUTION_ID_,
TASK_ID_,
NAME_,
REV_,
VAR_TYPE_,
CREATE_TIME_,
REMOVAL_TIME_,
BYTEARRAY_ID_,
DOUBLE_,
LONG_,
TEXT_,
TEXT2_,
STATE_
)
After searching i tried to alter this column with this command:
ALTER TABLE ACT_HI_VARINST MODIFY TEXT_ VARCHAR(5000);
but also
ALTER TABLE ACT_RU_VARIABLE MODIFY TEXT_ VARCHAR(5000);
has had no effect. (File is in resource folder - its a sql file)
To generate a message i have this methods:
private String serializeToJson(Map<String, Object> processVariables) { // TODO Auto-generated method stub StringBuilder jsonBuilder = new StringBuilder(); jsonBuilder.append("{"); for(Map.Entry<String, Object> entry : processVariables.entrySet()) { String key = entry.getKey(); Object value = entry.getValue(); jsonBuilder.append("\"") .append(key) .append("\":\"") .append(value) .append("\","); } jsonBuilder.deleteCharAt(jsonBuilder.length()-1); jsonBuilder.append("}"); return jsonBuilder.toString();
}
private static String generateMessage(int size, boolean isKB) { StringBuilder message = new StringBuilder(); int messageSize = 0; if(isKB) { messageSize = size * 1024; } else { messageSize = size * 1024 * 1024; } for(int i = 0; i < messageSize; i++) { message.append("S"); } return message.toString();
}
In a delegate execution class i call this methods and then i set result as process variable like this:
Map<String, Object> processVariables = new HashMap<>();
processVariables.put(doID, generateMessage(4, true));
String serialzeMessage = serializeToJson(processVariables);
execution.setVariable(doID, serialzeMessage);
In this case the code produces a 4kB message as String so over 4k chars.
What can i do? Change the size of the column field TEXT_ , make it a CLOB? How to?
Best regards
Sebastian