1
votes

I am using Hazelcast as caching Solution for my application. My application has few inserts and updates to the database and these needs to be synced to Cache also.

I want to use MapStore functionality so that when I do IMap.put(), Hazelcast takes care of persisting the Object in underlying Db and also update its cache.

In the overridden store implementation, I want to call my DAO in following way to persist the Data.

public void store(Long key, Product value)
    {
        log.info("Storing Data for Employee {} in Database using DataStore ",     value);
    Long employeeId = employeeDao.create(value);
    value.setId(employeeId );

}

There are few issues listed below:- 1) In put call, I want to use "key" as the "employeeId", but this is generated only after insertion happens for this record in the Db. So how do I put into the Cache when I don't have the Id.? I want Hazelcast to use the "id" generated as part of store method call (or any other way) as the key to my Object.

Imap.put(key,new Employee("name_of_Employee","age_of_employee"))

2) The MapStore implementation's store method returns a void so I cannot return the Id generated for this Object to the Client. How can I achieve this? I tried using MapEntryListeners on the Map but the entry added callback does not return new Object. I also added PostProcessingMapStore interface to my MapStore but could not get the new Value back to client.

Please advice

1

1 Answers

2
votes

You have 2 options:

1) Generate the employeeId outside of the database. You can use the IdGenerator from Hazelcast to do this.

2) If you must let the database generate the id, then you need to put the Employee in the cache manually AFTER it has been stored in the database.