class TerracottaBootstrapCacheLoader extends MemoryLimitedCacheLoader implements Disposable {

    public void load(final Ehcache cache) throws CacheException {
        if (!cache.getCacheConfiguration().isTerracottaClustered()) {
            LOG.error("You're trying to bootstrap a non Terracotta clustered cache with a TerracottaBootstrapCacheLoader! Cache " +
                      "'{}' will not be bootstrapped and no keySet snapshot will be recorded...", cache.getName());
            return;
        }

        if (cache.getStatus() != Status.STATUS_ALIVE) {
            throw new CacheException("Cache '" + cache.getName() + "' isn't alive yet: " + cache.getStatus());
        }

        if (isAsynchronous()) {
            BootstrapThread thread = new BootstrapThread(cache);
            thread.start();
        } else {
            doLoad(cache);
        }
    }

    private  TerracottaBootstrapCacheLoader(final boolean doKeySnapshot, final boolean aSynchronous,
                                           final String directory, final long interval, final boolean doKeySnapshotOnDedicatedThread);
    public  TerracottaBootstrapCacheLoader(final boolean asynchronous, String directory, boolean doKeySnapshots);
    public  TerracottaBootstrapCacheLoader(final boolean asynchronous, String directory, long interval);
    public  TerracottaBootstrapCacheLoader(final boolean asynchronous, String directory, long interval, boolean onDedicatedThread);

}