我实施了MapStore
并配置了hazelcast(v 2.2),以便在调用map.put()
时知道它必须从我的实施中调用后台.store
,至少那个我读到了什么。
如果我直接使用我的实现,它会存储我想要的内容,但如果我调用map.put()
则不会。
有人可以告诉我它为什么没有或者我做错了什么?
这是我的MapStore
实施:
public class MyMapStore implements MapStore<String, Object> {
private Session session = HibernateUtil.openSession();
@Override
public Object load(String key) {
// TODO Auto-generated method stub
return null;
}
@Override
public Map<String, Object> loadAll(Collection<String> keys) {
// TODO Auto-generated method stub
return null;
}
@Override
public Set<String> loadAllKeys() {
// TODO Auto-generated method stub
return null;
}
@Override
public void store(String key, Object value) {
Transaction tx = session.beginTransaction();
session.save((MyObject)value);
tx.commit();
}
@Override
public void storeAll(Map<String, Object> map) {
// TODO Auto-generated method stub
}
@Override
public void delete(String key) {
// TODO Auto-generated method stub
}
@Override
public void deleteAll(Collection<String> keys) {
// TODO Auto-generated method stub
}
}
Hazelcast配置:
h.getConfig().getMapConfig("default").setMapStoreConfig(
new MapStoreConfig().setEnabled(true).setClassName(
MyMapStore.class.getName()).setWriteDelaySeconds(0));
打印淡褐色配置告诉我所有设置都在那里,所以我不知道出了什么问题。
答案 0 :(得分:2)
我认为你的hazelcast配置中缺少一些东西。您需要创建“默认”MapConfig。这是一个有效的例子。
Config config = new Config();
....
MapConfig mapCfg = new MapConfig();
mapCfg.setName("default");
mapCfg.setBackupCount(2);
mapCfg.getMaxSizeConfig().setSize(10000);
mapCfg.setTimeToLiveSeconds(300);
MapStoreConfig mapStoreCfg = new MapStoreConfig();
mapStoreCfg.setClassName(MyMapStore.class.getName()).setEnabled(true);
mapCfg.setMapStoreConfig(mapStoreCfg);
// use near cache if needed
NearCacheConfig nearCacheConfig = new NearCacheConfig();
nearCacheConfig.setMaxSize(1000).setMaxIdleSeconds(120).setTimeToLiveSeconds(300);
mapCfg.setNearCacheConfig(nearCacheConfig);
config.addMapConfig(mapCfg);
Hazelcast.newHazelcastInstance(config);