1

I'm running three Hazelcast nodes on the same machine, each node tries to change an AtomicReference. The first and second node are running without problems, the third node is throwning HazelcastSerializationException.

Hazelcast version: Hazelcast 3.4.2 (20150326 - f6349a4)

Anyone know what's going on?

    Exception in thread "main" com.hazelcast.nio.serialization.HazelcastSerializationException: Cannot write a Data instance! Use #writeData(ObjectDataOutput out, Data data) instead.
    at com.hazelcast.nio.serialization.SerializationServiceImpl.writeObject(SerializationServiceImpl.java:272)
    at com.hazelcast.nio.serialization.ByteArrayObjectDataOutput.writeObject(ByteArrayObjectDataOutput.java:262)
    at com.hazelcast.concurrent.atomicreference.operations.AbstractAlterOperation.writeInternal(AbstractAlterOperation.java:61)
    at com.hazelcast.spi.Operation.writeData(Operation.java:281)
    at com.hazelcast.nio.serialization.DataSerializer.write(DataSerializer.java:140)
    at com.hazelcast.nio.serialization.DataSerializer.write(DataSerializer.java:39)
    at com.hazelcast.nio.serialization.StreamSerializerAdapter.toData(StreamSerializerAdapter.java:51)
    at com.hazelcast.nio.serialization.SerializationServiceImpl.toData(SerializationServiceImpl.java:222)
    at com.hazelcast.nio.serialization.SerializationServiceImpl.toData(SerializationServiceImpl.java:203)
    at com.hazelcast.spi.impl.NodeEngineImpl.toData(NodeEngineImpl.java:180)
    at com.hazelcast.spi.impl.BasicOperationService.send(BasicOperationService.java:348)
    at com.hazelcast.spi.impl.BasicInvocation.doInvokeRemote(BasicInvocation.java:288)
    at com.hazelcast.spi.impl.BasicInvocation.doInvoke(BasicInvocation.java:260)
    at com.hazelcast.spi.impl.BasicInvocation.invoke(BasicInvocation.java:229)
    at com.hazelcast.spi.impl.BasicOperationService.invokeOnPartition(BasicOperationService.java:272)
    at com.hazelcast.concurrent.atomicreference.AtomicReferenceProxy.asyncInvoke(AtomicReferenceProxy.java:56)
    at com.hazelcast.concurrent.atomicreference.AtomicReferenceProxy.asyncAlterAndGet(AtomicReferenceProxy.java:87)
    at com.hazelcast.concurrent.atomicreference.AtomicReferenceProxy.alterAndGet(AtomicReferenceProxy.java:78)
    at com.senior.seguranca.csm.datamart.hazelcast.HazelcastTest.(HazelcastTest.java:18)
    at com.senior.seguranca.csm.datamart.hazelcast.HazelcastTest.main(HazelcastTest.java:22)

My code:

package com.senior.seguranca.csm.datamart.hazelcast;

import com.hazelcast.config.Config;
import com.hazelcast.core.Hazelcast;
import com.hazelcast.core.HazelcastInstance;
import com.hazelcast.core.IAtomicReference;
import com.hazelcast.core.IFunction;

public class HazelcastTest {

    public HazelcastTest() {
        Config config = new Config();
        config.setInstanceName("HAZELCAST_INSTANCE");
        HazelcastInstance hazelcastInstance = Hazelcast.getOrCreateHazelcastInstance(config);

        IAtomicReference<String> atomicReference = hazelcastInstance.getAtomicReference("TEST");
        String item = "A";
        System.out.println("Item: " + atomicReference.alterAndGet(new MyFunction(item)));
    }

    public static void main(String[] args) {
        new HazelcastTest();
    }
}

class MyFunction implements IFunction<String, String> {

    private String newItem;

    public MyFunction(String newItem) {
        this.newItem = newItem;
    }

    @Override
    public String apply(String item) {
        return newItem;
    }
}
Silvano Lohn
  • 41
  • 1
  • 2

0 Answers0