使用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一直有下面的问题:

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

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<byte[]> {
    @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 文件

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值