Estamos utilizando Hazelcast 2.3.1, en nuestro fichero de configuración hazelcast.xml que utilizamos escribir detrás de una Hazelcast IMap:Hazelcast Mapa bloqueado
<map name="HazelcastObjectOperations.objectMap">
<backup-count>1</backup-count>
<map-store enabled="true">
<class-name>persister.HazelcastObjectPersister</class-name>
<write-delay-seconds>10</write-delay-seconds>
</map-store>
</map>
<properties>
<property name="hazelcast.map.cleanup.delay.seconds">5</property>
</properties>
Tenemos dos clases
HazelcastObjectOperation
que contiene el mapa y es utilizado para poner objetos en él.HazelcastObjectPersister
que se extiende MapStore se usa para persistir Objetos cuando Hazelcast llama alstoreAll()
.
public class HazelcastObjectOperation
{
protected final IMap<Long, MyHzcObj> objectMap;
private final HazelcastInstance instance;
public HazelcastObjectOperation()
{
this.instance = Hazelcast.getDefaultInstance();
this.objectMap = this.instance.getMap(
"HazelcastObjectOperations.objectMap");
}
public void save(final MyHzcObj object)
{
long start = System.currentTimeMillis();
IdGenerator generator = Hazelcast.getIdGenerator("generator");
this.objectMap.put(generator.newId(), object);
long end = System.currentTimeMillis();
}
}
El problema es cuando Hazelcast corre a través de este mapa y obtiene los objetos que deben ser almacenados en el método storeAll de la clase persister , el mapa está bloqueado para segundos y por lo que un puesto en este mapa dura esta vez. ¿Hay alguna solución para este problema?