Class GenericMapLoader<K,V>

java.lang.Object
com.hazelcast.mapstore.GenericMapLoader<K,V>
Type Parameters:
K - type of the key
V - type of the value
All Implemented Interfaces:
MapLoader<K,V>, MapLoaderLifecycleSupport
Direct Known Subclasses:
GenericMapStore

public class GenericMapLoader<K,V> extends Object implements MapLoader<K,V>, MapLoaderLifecycleSupport
GenericMapLoader is an implementation of MapLoader built on top of Hazelcast SQL engine.

It works with any SQL connector supporting SELECT statements.

Usage:

First define data connection, e.g. for JDBC use JdbcDataConnection:

Config config = new Config();
 config.addDataConnectionConfig(
   new DataConnectionConfig("mysql-ref")
     .setType("Jdbc")
     .setProperty("jdbcUrl", dbConnectionUrl)
 );

Then create a Map with MapLoader using the GenericMapLoader implementation:

MapConfig mapConfig = new MapConfig(mapName);
 MapStoreConfig mapStoreConfig = new MapStoreConfig();
 mapStoreConfig.setClassName(GenericMapLoader.class.getName());
 mapStoreConfig.setProperty(GenericMapLoader.DATA_CONNECTION_REF_PROPERTY, "mysql-ref");
 mapConfig.setMapStoreConfig(mapStoreConfig);
 instance().getConfig().addMapConfig(mapConfig);

The GenericMapLoader creates a SQL mapping with name "__map-store." + mapName. This mapping is removed when the map is destroyed.

  • Field Details

    • DATA_CONNECTION_REF_PROPERTY

      public static final String DATA_CONNECTION_REF_PROPERTY
      Property key to define data connection
      See Also:
    • EXTERNAL_NAME_PROPERTY

      public static final String EXTERNAL_NAME_PROPERTY
      Property key to define external name of the table
      See Also:
    • ID_COLUMN_PROPERTY

      public static final String ID_COLUMN_PROPERTY
      Property key to define id column name in database
      See Also:
    • COLUMNS_PROPERTY

      public static final String COLUMNS_PROPERTY
      Property key to define column names in database
      See Also:
    • TYPE_NAME_PROPERTY

      public static final String TYPE_NAME_PROPERTY
      Property key to data connection type name
      See Also:
    • LOAD_ALL_KEYS_PROPERTY

      public static final String LOAD_ALL_KEYS_PROPERTY
      Property key to control loading of all keys when IMap is first created
      See Also:
    • SINGLE_COLUMN_AS_VALUE

      public static final String SINGLE_COLUMN_AS_VALUE
      Property key to decide on getting a single column as the value
      See Also:
    • MAPSTORE_INIT_TIMEOUT

      public static final HazelcastProperty MAPSTORE_INIT_TIMEOUT
      Timeout for initialization of GenericMapLoader
    • sqlService

      protected SqlService sqlService
    • columnMetadataList

      protected List<SqlColumnMetadata> columnMetadataList
  • Constructor Details

    • GenericMapLoader

      public GenericMapLoader()
  • Method Details

    • init

      public void init(HazelcastInstance instance, Properties properties, String mapName)
      Description copied from interface: MapLoaderLifecycleSupport
      Initializes this MapLoader implementation. Hazelcast will call this method when the map is first used on the HazelcastInstance. Implementation can initialize required resources for the implementing mapLoader, such as reading a config file and/or creating a database connection. References to maps, other than the one on which this MapLoader is configured, can be obtained from the hazelcastInstance in this method's implementation.

      On members joining a cluster, this method is executed during finalization of the join operation, therefore care should be taken to adhere to the rules for PostJoinAwareService.getPostJoinOperation(). If the implementation executes operations which may wait on locks or otherwise block (e.g. waiting for network operations), this may result in a time-out and obstruct the new member from joining the cluster. If blocking operations are required for initialization of the MapLoader, consider deferring them with a lazy initialization scheme.

      Specified by:
      init in interface MapLoaderLifecycleSupport
      Parameters:
      instance - HazelcastInstance of this mapLoader.
      properties - Properties set for this mapStore. see MapStoreConfig
      mapName - name of the map.
    • destroy

      public void destroy()
      Description copied from interface: MapLoaderLifecycleSupport
      Hazelcast will call this method before shutting down. This method can be overridden to clean up the resources held by this map loader implementation, such as closing the database connections, etc.
      Specified by:
      destroy in interface MapLoaderLifecycleSupport
    • load

      public V load(K key)
      Description copied from interface: MapLoader
      Loads the value of a given key. If distributed map doesn't contain the value for the given key then Hazelcast will call implementation's load (key) method to obtain the value. Implementation can use any means of loading the given key; such as an O/R mapping tool, simple SQL or reading a file etc.
      Specified by:
      load in interface MapLoader<K,V>
      Parameters:
      key - , cannot be null
      Returns:
      value of the key; returning null value signals value missing in the underlying store
    • loadAll

      public Map<K,V> loadAll(Collection<K> keys)
      Size of the keys collection is limited by ClusterProperty.MAP_LOAD_CHUNK_SIZE
      Specified by:
      loadAll in interface MapLoader<K,V>
      Parameters:
      keys - keys of the values entries to load
      Returns:
      map of loaded key-value pairs.
    • loadAllKeys

      public Iterable<K> loadAllKeys()
      Description copied from interface: MapLoader
      Loads all of the keys from the store. The returned Iterable may return the keys lazily by loading them in batches. The Iterator of this Iterable may implement the Closeable interface in which case it will be closed once iteration is over. This is intended for releasing resources such as closing a JDBC result set.

      The returned Iterable should not contain any null keys.

      Specified by:
      loadAllKeys in interface MapLoader<K,V>
      Returns:
      all the keys. Keys inside the Iterable cannot be null.
    • awaitSuccessfulInit

      protected void awaitSuccessfulInit()
      Awaits successful initialization; if the initialization fails, throws an exception.