使用Mycat时,activiti出现异常 Couldn't deserialize object in variable 'assignee'

问题描述

遇到这样一个问题,连接mysql流程正常,连接mycat流程异常,错误信息如下:

org.activiti.engine.ActivitiException: Couldn't deserialize object in variable 'assignee'

at org.activiti.engine.impl.variable.SerializableType.getValue(SerializableType.java:69)

at org.activiti.engine.impl.persistence.entity.VariableInstanceEntity.getValue(VariableInstanceEntity.java:177)

at org.activiti.engine.impl.persistence.entity.VariableScopeImpl.collectVariables(VariableScopeImpl.java:82)

at org.activiti.engine.impl.persistence.entity.VariableScopeImpl.collectVariables(VariableScopeImpl.java:79)

at org.activiti.engine.impl.persistence.entity.VariableScopeImpl.getVariables(VariableScopeImpl.java:72)

Caused by: java.io.StreamCorruptedException: invalid stream header: EFBFBDEF

at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:806)

产生原因

mycat是在阿里开源的cobar上进行扩展,而cobar一直有下面的问题:

使用Mycat时,activiti出现异常 Couldn't deserialize object in variable 'assignee'_第1张图片

上面红色框中就是原因根本,测试验证下:

PreparedStatement ps = ...

//1. ps.setBinaryStream(1,new ByteArrayInputStream(bytes));

连接mycat时,有问题;连接mysql时,没问题。

//2. ps.setBytes(1, bytes);

连接mycat,mysql时,都没问题 

解决方案

使用setBytes来代替setBinaryStrem

1、创建一个类

public class ConvertBlobTypeHandler extends BaseTypeHandler {
    @Override
    public void setNonNullParameter(PreparedStatement ps, int i, byte[] parameter, JdbcType jdbcType)
            throws SQLException {
        //luoq 2018年5月10日17:17:38 云上 流程 有会签节点是操作异常。原因:注释的连接mycat有问题。
//        ByteArrayInputStream bis = new ByteArrayInputStream(parameter);
//        ps.setBinaryStream(i, bis, parameter.length);
        ps.setBytes(i, parameter);
    }
    ......
}

2、修改activiti-engine-5.15.1.jar下的org\activiti\db\mapping\entity\ByteArray.xml 文件

使用Mycat时,activiti出现异常 Couldn't deserialize object in variable 'assignee'_第2张图片

 

 

 

 

你可能感兴趣的:(问题处理)