javahazelcastjava-client

how to implement public AbstractEntryProcessor(boolean applyOnBackup){} in 5.x.x for the backup in Hazelcast


Help me in the following code and how to used the backup on the Hazelcast migration of the hazelcast 3.x.x to 5.x.x

package com.hazelcast.map;

import com.hazelcast.core.HazelcastInstance;
import com.hazelcast.core.HazelcastInstanceAware;
import com.hazelcast.nio.serialization.impl.BinaryInterface;

import java.util.Map;
// Interface AbstractEntryProcessor
@BinaryInterface
public abstract class AbstractEntryProcessor<K,V> implements EntryProcessor<K,V> {

    private final EntryBackupProcessor<K,V> entryBackupProcessor;
// Non Parameterize Constructor
    public AbstractEntryProcessor() {
        this(true);
    }
// Parameterize Constructor AbstractEntryProcessor
    public AbstractEntryProcessor(boolean applyOnBackup) {
        if (applyOnBackup) {
            entryBackupProcessor = new EntryBackupProcessorImpl();
        } else {
            entryBackupProcessor = null;
        }
    }
//EntryBackupProcessor
    @Override
    public final EntryBackupProcessor getBackupProcessor() {
        return entryBackupProcessor;
    }
// class EntryBackupProcessorImpl
    private class EntryBackupProcessorImpl implements EntryBackupProcessor<k,V>, HazelcastInstanceAware {
        // generated for EntryBackupProcessorImpl which doesn't implement HazelcastInstanceAware
        static final long serialVersionUID = -5081502753526394129L;

        @Override
        public void processBackup(Map.Entry<K,V> entry) {
            process(entry);
        }

        @Override
        public void setHazelcastInstance(HazelcastInstance hazelcastInstance) {
            final AbstractEntryProcessor<k,V> outer = AbstractEntryProcessor.this;
            if (outer instanceof HazelcastInstanceAware) {
                ((HazelcastInstanceAware) outer).setHazelcastInstance(hazelcastInstance);
            }
        }
    }
}

How to used the backup methods in 5.x.x versons of series

how to used the backup in the above question ?


Solution

  • This should work:

    public abstract class AbstractEntryProcessor implements EntryProcessor, HazelcastInstanceAware {
    
        protected transient HazelcastInstance hazelcastInstance;
    
        private final boolean applyOnBackup;
    
        // Non Parameterize Constructor
        public AbstractEntryProcessor() {
            this(true);
        }
    
        // Parameterize Constructor AbstractEntryProcessor
        public AbstractEntryProcessor(boolean applyOnBackup) {
            this.applyOnBackup = applyOnBackup;
        }
    
        //EntryBackupProcessor
        @Override
        public final EntryProcessor getBackupProcessor() {
            if (!applyOnBackup || this instanceof ReadOnly) {
                return null;
            }
    
            return this;
        }
    
        @Override
        public void setHazelcastInstance(HazelcastInstance hazelcastInstance) {
           this.hazelcastInstance = hazelcastInstance;
        }
    }