首页 > 解决方案 > Apache Ignite 在启动时抛出 Failed to deserialize object with given class loader (Client - Server)

问题描述

我正在尝试使用带有 ignite 的自定义事务管理器,但是它导致无法在启动时使用给定的类加载器反序列化对象。事务管理器工厂实现为

public class TransactionManagerFactory implements Factory<TransactionManager> {
private static final long serialVersionUID = 1L;

private TransactionManager txMgr;

public TransactionManagerFactory(TransactionManager txMgr) {
    this.txMgr=txMgr;
}

@Override
public TransactionManager create() {
    return this.txMgr;
}
}

工厂附加到客户端配置如下:

TransactionConfiguration txConfiguration=new TransactionConfiguration();
txConfiguration.setDeadlockTimeout(acquireTimeout);
txConfiguration.setDefaultTxIsolation(TransactionIsolation.READ_COMMITTED);
txConfiguration.setDefaultTxConcurrency(TransactionConcurrency.PESSIMISTIC);
txConfiguration.setTxManagerFactory(new TransactionManagerFactory(txMgr));           
this.clientConfig.setTransactionConfiguration(txConfiguration);

错误表示传递给工厂的事务管理器本身不可序列化:原因:java.io.NotSerializableException:org.infinispan.transaction.tm.EmbeddedBaseTransactionManager

然而,事务管理器本身不应该是可序列化的。我们如何通过现有的事务管理器来点燃客户端?

BR Yulian Oifa

标签: javatransactionsignite

解决方案


您的事务管理器工厂保留事务管理器实例,而不是在create()远程节点上的方法中创建它。这就是它应该如何工作的方式。

可序列化对象的所有非瞬态字段也必须是可序列化的。


推荐阅读