Index: trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureStore.java
===================================================================
--- trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureStore.java	(revision 43055)
+++ trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureStore.java	(revision 43056)
@@ -32,6 +32,7 @@
 import org.gvsig.fmap.dal.DataStore;
 import org.gvsig.fmap.dal.DataStoreParameters;
 import org.gvsig.fmap.dal.ExpressionBuilder;
+import org.gvsig.fmap.dal.exception.CreateException;
 import org.gvsig.fmap.dal.exception.DataException;
 import org.gvsig.fmap.dal.exception.ReadException;
 import org.gvsig.fmap.dal.feature.exception.FeatureIndexException;
@@ -845,4 +846,9 @@
     public Iterator iterator();
     
     public ExpressionBuilder createExpressionBuilder();
+    
+    public void createCache(String name, DynObject parameters)
+        throws DataException;
+
+    public FeatureCache getCache();     
 }
Index: trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataManager.java
===================================================================
--- trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataManager.java	(revision 43055)
+++ trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/DataManager.java	(revision 43056)
@@ -409,4 +409,31 @@
      * @return the ExpressionBuilder
      */
     public ExpressionBuilder createExpressionBuilder();
+    
+    /**
+	 * Returns a list of String containing the names of the available cache providers.
+	 *
+	 * @return
+	 * 		list of strings with the names of the available cache providers
+	 */    
+    public List getFeatureCacheProviders();
+
+	/**
+	 * Returns an instance of {@link DataServerExplorerParameters} corresponding
+	 * to the given name used by the cache to create a store to save the
+	 * retrieved data.
+	 * 
+	 * @param name
+	 *            name of a registered feature cache provider
+	 * 
+	 * @throws InitializeException
+	 *             if parameter initialization causes an error.
+	 * 
+	 * @throws ProviderNotRegisteredException
+	 *             if could not find a cache provider by the given name.
+	 * 
+	 */
+	public DynObject createCacheParameters(String name)
+			throws InitializeException, ProviderNotRegisteredException;
+    
 }
Index: trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/DefaultFeatureStore.java
===================================================================
--- trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/DefaultFeatureStore.java	(revision 43055)
+++ trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/DefaultFeatureStore.java	(revision 43056)
@@ -2153,22 +2153,22 @@
         return this;
     }
 
-//    public void createCache(String name, DynObject parameters)
-//        throws DataException {
-//        cache = dataManager.createFeatureCacheProvider(name, parameters);
-//        if (cache == null) {
-//            throw new CreateException("FeaureCacheProvider", null);
-//        }
-//        cache.apply(this, provider);
-//        provider = cache;
-//
-//        featureCount = null;
-//    }
-//
-//    public FeatureCache getCache() {
-//        return cache;
-//    }
+    public void createCache(String name, DynObject parameters)
+        throws DataException {
+        cache = dataManager.createFeatureCacheProvider(name, parameters);
+        if (cache == null) {
+            throw new CreateException("FeaureCacheProvider", null);
+        }
+        cache.apply(this, provider);
+        provider = cache;
 
+        featureCount = null;
+    }
+
+    public FeatureCache getCache() {
+        return cache;
+    }
+
     public void clear() {
         if (metadata != null) {
             metadata.clear();
Index: trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/impl/DefaultDataManager.java
===================================================================
--- trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/impl/DefaultDataManager.java	(revision 43055)
+++ trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/impl/DefaultDataManager.java	(revision 43056)
@@ -24,6 +24,7 @@
 import org.gvsig.fmap.dal.NewDataStoreParameters;
 import org.gvsig.fmap.dal.OpenErrorHandler;
 import org.gvsig.fmap.dal.Register;
+import org.gvsig.fmap.dal.exception.DataException;
 import org.gvsig.fmap.dal.exception.InitializeException;
 import org.gvsig.fmap.dal.exception.ProviderNotRegisteredException;
 import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
@@ -40,6 +41,8 @@
 import org.gvsig.fmap.dal.feature.spi.ExpressionBuilderBase;
 import org.gvsig.fmap.dal.feature.spi.FeatureStoreProvider;
 import org.gvsig.fmap.dal.feature.spi.FeatureStoreProviderServices;
+import org.gvsig.fmap.dal.feature.spi.cache.FeatureCacheProvider;
+import org.gvsig.fmap.dal.feature.spi.cache.FeatureCacheProviderFactory;
 import org.gvsig.fmap.dal.feature.spi.index.FeatureIndexProvider;
 import org.gvsig.fmap.dal.feature.spi.index.FeatureIndexProviderServices;
 import org.gvsig.fmap.dal.raster.impl.RasterStoreOldFactory;
@@ -59,13 +62,18 @@
 import org.gvsig.tools.dynobject.Tags;
 import org.gvsig.tools.evaluator.Evaluator;
 import org.gvsig.tools.exception.BaseException;
+import org.gvsig.tools.extensionpoint.ExtensionPoint;
 import org.gvsig.tools.identitymanagement.SimpleIdentityManager;
 import org.gvsig.tools.identitymanagement.UnauthorizedException;
 import org.gvsig.tools.service.spi.Services;
 
 public class DefaultDataManager
         implements DataManager, DataManagerProviderServices, Services {
-
+    
+    final static private String DATA_MANAGER_CACHE = "Data.manager.caches";
+    final static private String DATA_MANAGER_CACHE_DESCRIPTION =
+        "DAL cache providers";
+    
     private class Registers {
 
         private final Register store;
@@ -681,4 +689,76 @@
     public ExpressionBuilder createExpressionBuilder() {
         return new ExpressionBuilderBase();
     }
+
+    public void registerFeatureCacheProvider(
+        FeatureCacheProviderFactory providerFactory) {
+        ToolsLocator.getExtensionPointManager()
+            .add(DATA_MANAGER_CACHE, DATA_MANAGER_CACHE_DESCRIPTION)
+            .append(providerFactory.getName(), "", providerFactory);
+    }
+
+    public FeatureCacheProvider createFeatureCacheProvider(String name,
+        DynObject parameters) throws DataException {
+        if (name == null) {
+            throw new InitializeException(
+                "It is necessary to provide a cache name", null);
+        }
+        if (parameters == null) {
+            throw new InitializeException(
+                "It is necessary to provide parameters to create the explorer",
+                null);
+        }
+        FeatureCacheProviderFactory featureCacheProviderFactory;
+        try {
+            featureCacheProviderFactory =
+                (FeatureCacheProviderFactory) ToolsLocator
+                    .getExtensionPointManager().get(DATA_MANAGER_CACHE)
+                    .create(name);
+            if (featureCacheProviderFactory == null) {
+                throw new ProviderNotRegisteredException(name);
+            }
+            return featureCacheProviderFactory.createCacheProvider(parameters);
+        } catch (InstantiationException e) {
+            throw new InitializeException(e);
+        } catch (IllegalAccessException e) {
+            throw new InitializeException(e);
+        }
+    }
+
+    public List getFeatureCacheProviders() {
+        ExtensionPoint extensionPoint =
+            ToolsLocator.getExtensionPointManager().get(DATA_MANAGER_CACHE);
+        if (extensionPoint != null) {
+            return ToolsLocator.getExtensionPointManager()
+                .get(DATA_MANAGER_CACHE).getNames();
+        } else {
+            return new ArrayList();
+        }
+    }
+
+    public DynObject createCacheParameters(String name)
+        throws InitializeException, ProviderNotRegisteredException {
+        if (name == null) {
+            throw new InitializeException(
+                "It is necessary to provide a cache name", null);
+        }
+        FeatureCacheProviderFactory featureCacheProviderFactory;
+        try {
+            featureCacheProviderFactory =
+                (FeatureCacheProviderFactory) ToolsLocator
+                    .getExtensionPointManager().get(DATA_MANAGER_CACHE)
+                    .create(name);
+            if (featureCacheProviderFactory == null) {
+                throw new ProviderNotRegisteredException(name);
+            }
+            return featureCacheProviderFactory.createParameters();
+        } catch (InstantiationException e) {
+            throw new InitializeException(e);
+        } catch (IllegalAccessException e) {
+            throw new InitializeException(e);
+        }
+    }
+
+
+
 }
