Mapstore not loading data from data base Hazelcast

旧时模样 提交于 2020-01-06 07:44:59

问题


I am using Hazelcast and mysql.
I created a mapstore for my table in mysql. What i am trying to do is to populate data using map.loadAll from data base. My Map store implementation is this

public class CityMapStore
    implements MapStore<Long, City>
{
    private final Connection con;

    public CityMapStore() {
    try {
        con = DriverManager.getConnection("jdbc:mysql://localhost:3306/hazel", "root",         "root123");
        con.createStatement().executeUpdate(
                "create table if not exists City (id bigint, name varchar(45), primary key (id))");
    } catch (SQLExpublic synchronized void delete(Long key) {
    System.out.println("Delete:" + key);
    try {
        con.createStatement().executeUpdate(
                String.format("delete from City where id = %s", key));
    } catch (SQLException e) {
        throw new RuntimeException(e);
    }
}ception e) {
        throw new RuntimeException(e);
    }
}

    public synchronized void delete( Long key )
    {
        System.out.println( "Delete:" + key );
        try
        {
            con.createStatement().executeUpdate( String.format( "delete from City where id = %s", key ) );
        }
        catch ( SQLException e )
        {
            throw new RuntimeException( e );
        }
    }

    public synchronized void deleteAll( Collection<Long> keys )
    {
        for ( Long key : keys )
            delete( key );
    }

    public synchronized void storeAll( Map<Long, City> map )
    {
        for ( Map.Entry<Long, City> entry : map.entrySet() )
            store( entry.getKey(), entry.getValue() );
    }

    public synchronized Map<Long, City> loadAll( Collection<Long> keys )
    {
        Map<Long, City> result = new HashMap<Long, City>();
        for ( Long key : keys )
            result.put( key, load( key ) );
        return result;
    }

    public Set<Long> loadAllKeys()
    {
        return null;
    }
}

My Load Class is this

public class LoadAllCity
{
    public static void main( String[] args )
    {
        final Long numberOfEntriesToAdd = 1000l;
        final String mapName = LoadAllCity.class.getCanonicalName();
        final Config config = createNewConfig( mapName );
        final HazelcastInstance node = Hazelcast.newHazelcastInstance( config );
        final IMap<Long, City> map = node.getMap( mapName );
        populateMap( map, numberOfEntriesToAdd );
        System.out.printf( "# After populating map size\t: %d\n", map.size() );
        System.out.printf( "# Map store has %d elements\n", numberOfEntriesToAdd );
        map.evictAll();
        System.out.printf( "# After evictAll map size\t: %d\n", map.size() );
        map.loadAll( true );
        System.out.printf( "# After loadAll map size\t: %d\n", map.size() );
    }

    private static void populateMap( IMap<Long, City> map, Long itemCount )
    {
        for ( long i = 0; i < itemCount; i++ )
        {
            City city = new City( "Viren" + i );
            //  map.put(i, city);
        }
    }

    private static Config createNewConfig( String mapName )
    {
        final CityMapStore cityStore = new CityMapStore();
        XmlConfigBuilder configBuilder = new XmlConfigBuilder();
        Config config = configBuilder.build();
        MapConfig mapConfig = config.getMapConfig( mapName );
        MapStoreConfig mapStoreConfig = new MapStoreConfig();
        mapStoreConfig.setClassName( CityMapStore.class.getCanonicalName() );
        mapStoreConfig.setImplementation( cityStore );
        mapStoreConfig.setWriteDelaySeconds( 0 );
        mapConfig.setMapStoreConfig( mapStoreConfig );
        return config;
    }
}

回答1:


To load data at start up override loadAllKeys method first or if you do not want it than use selected keys to load with oveloaded loadAll method



来源:https://stackoverflow.com/questions/26396677/mapstore-not-loading-data-from-data-base-hazelcast

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!