2

我实现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));

打印 hazelcast 配置表明我设置的所有内容都在那里,所以我不知道出了什么问题。

4

1 回答 1

4

我认为您的 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);
于 2013-06-07T06:57:29.963 回答