diff --git a/snaparchiver/src/main/java/org/tango/server/snap/archiver/SnapArchiver.java b/snaparchiver/src/main/java/org/tango/server/snap/archiver/SnapArchiver.java
index 347ace16be306a2f3756e6edcfab3b4591966d70..358ca74a82e4b2c92d203600c6b678bf6952ba8b 100644
--- a/snaparchiver/src/main/java/org/tango/server/snap/archiver/SnapArchiver.java
+++ b/snaparchiver/src/main/java/org/tango/server/snap/archiver/SnapArchiver.java
@@ -3,6 +3,7 @@ package org.tango.server.snap.archiver;
 import SnapArchiver.grouplink.UsePluginBuilder;
 import fr.esrf.Tango.DevFailed;
 import fr.soleil.actiongroup.collectiveaction.onattributes.UsePlugin;
+import fr.soleil.archiving.common.api.exception.ArchivingException;
 import fr.soleil.archiving.common.api.utils.DbConnectionInfo;
 import fr.soleil.archiving.snap.api.manager.SnapManagerApi;
 import fr.soleil.archiving.snap.api.persistence.SnapshotPersistenceManager;
@@ -11,6 +12,7 @@ import fr.soleil.archiving.snap.api.tools.SnapAttributeExtract;
 import fr.soleil.archiving.snap.api.tools.SnapContext;
 import fr.soleil.archiving.snap.api.tools.Snapshot;
 import fr.soleil.archiving.snap.api.tools.SnapshotingException;
+import fr.soleil.database.connection.DataBaseParameters;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.tango.DeviceState;
@@ -68,13 +70,12 @@ public final class SnapArchiver {
     private String dbName = "";
     @DeviceProperty
     private String dbSchema = "";
-
+    @DeviceProperty(name = "maxDbPoolSize", description = "max database connections", defaultValue = "3")
+    private short maxDbPoolSize = 3;
     @Status
     private String status;
     @State
     private DeviceState state;
-
-
     private SnapshotPersistenceManager manager;
 
     public static void main(final String[] args) {
@@ -82,39 +83,53 @@ public final class SnapArchiver {
         ServerManager.getInstance().start(args, SnapArchiver.class);
     }
 
+    public void setMaxDbPoolSize(short maxDbPoolSize) {
+        this.maxDbPoolSize = maxDbPoolSize;
+    }
+
+    private DataBaseParameters getDataBaseParameters() throws DevFailed {
+        DbConnectionInfo dbConnectionInfo = new DbConnectionInfo("SnapManager");
+        dbConnectionInfo.initFromClassProperties();
+        if (dbHost.isEmpty()) {
+            dbHost = dbConnectionInfo.getDbHost();
+        }
+        if (dbName.isEmpty()) {
+            dbName = dbConnectionInfo.getDbName();
+        }
+        if (dbSchema.isEmpty()) {
+            dbSchema = dbConnectionInfo.getDbSchema();
+        }
+        if (dbUser.isEmpty()) {
+            dbUser = dbConnectionInfo.getDbPassword();
+        }
+        if (dbPassword.isEmpty()) {
+            dbPassword = dbConnectionInfo.getDbPassword();
+        }
+        DataBaseParameters parameters = new DataBaseParameters();
+        parameters.setName(dbName);
+        parameters.setSchema(dbSchema);
+        parameters.setHost(dbHost);
+        parameters.setUser(dbUser);
+        parameters.setPassword(dbPassword);
+        parameters.setMaxPoolSize(maxDbPoolSize);
+        return parameters;
+    }
+
     /**
      * Initialize the device.
      */
     @Init
     public void init() throws DevFailed {
+        // get configuration from device class "SnapManager"
         try {
-            // get configuration from device class "SnapManager"
-            DbConnectionInfo dbConnectionInfo = new DbConnectionInfo("SnapManager");
-            dbConnectionInfo.initFromClassProperties();
-            if (dbHost.isEmpty()) {
-                dbHost = dbConnectionInfo.getDbHost();
-            }
-            if (dbName.isEmpty()) {
-                dbName = dbConnectionInfo.getDbName();
-            }
-            if (dbSchema.isEmpty()) {
-                dbSchema = dbConnectionInfo.getDbSchema();
-            }
-            if (dbUser.isEmpty()) {
-                dbUser = dbConnectionInfo.getDbPassword();
-            }
-            if (dbPassword.isEmpty()) {
-                dbPassword = dbConnectionInfo.getDbPassword();
-            }
-            SnapManagerApi.initSnapConnection(dbHost, dbName, dbSchema, dbUser, dbPassword, "false");
-            SnapshotPersistenceManagerFactory factory = SnapshotPersistenceManagerFactory.getInstance();
-            manager = factory.getManager(beansFileName, dbUser, dbPassword);
-            state = DeviceState.ON;
-            status = "device ready for snapshot";
-        } catch (SnapshotingException e) {
-            e.printStackTrace();
+            SnapManagerApi.initSnapConnection(getDataBaseParameters());
+        } catch (ArchivingException e) {
             throw e.toTangoException();
         }
+        SnapshotPersistenceManagerFactory factory = SnapshotPersistenceManagerFactory.getInstance();
+        manager = factory.getManager(beansFileName, dbUser, dbPassword);
+        state = DeviceState.ON;
+        status = "device ready for snapshot";
     }
 
     @Delete
@@ -141,7 +156,6 @@ public final class SnapArchiver {
         logger.info("in command TriggerLaunchSnapShot for context {}", argin);
         Future<Integer> snapshotResult = executorService.submit(new SnapArchiver.SnapshotTask(argin));
         snapshotResults.put(argin, snapshotResult);
-
     }
 
     /**
diff --git a/snapextractor/src/main/java/org/tango/server/snapextractor/SnapExtractor.java b/snapextractor/src/main/java/org/tango/server/snapextractor/SnapExtractor.java
index dd56eb6b1228096292c1d71a2f70eb8d35f7a546..dcfe2d31c8fc4e659783e6039cbc41a2e6d032d5 100644
--- a/snapextractor/src/main/java/org/tango/server/snapextractor/SnapExtractor.java
+++ b/snapextractor/src/main/java/org/tango/server/snapextractor/SnapExtractor.java
@@ -88,36 +88,13 @@
 
 package org.tango.server.snapextractor;
 
-import java.util.Arrays;
-import java.util.List;
-import java.util.ResourceBundle;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.tango.DeviceState;
-import org.tango.server.ServerManager;
-import org.tango.server.annotation.Attribute;
-import org.tango.server.annotation.AttributeProperties;
-import org.tango.server.annotation.Command;
-import org.tango.server.annotation.Delete;
-import org.tango.server.annotation.Device;
-import org.tango.server.annotation.DeviceManagement;
-import org.tango.server.annotation.DeviceProperty;
-import org.tango.server.annotation.DynamicManagement;
-import org.tango.server.annotation.Init;
-import org.tango.server.annotation.State;
-import org.tango.server.annotation.Status;
-import org.tango.server.device.DeviceManager;
-import org.tango.server.dynamic.DynamicManager;
-import org.tango.utils.DevFailedUtils;
-
 import fr.esrf.Tango.AttrWriteType;
 import fr.esrf.Tango.DevFailed;
 import fr.esrf.Tango.DevState;
 import fr.esrf.Tango.DevVarLongStringArray;
 import fr.esrf.Tango.DispLevel;
 import fr.esrf.TangoDs.TangoConst;
+import fr.soleil.archiving.common.api.exception.ArchivingException;
 import fr.soleil.archiving.common.api.tools.DbData;
 import fr.soleil.archiving.snap.api.SnapConnectionParameters;
 import fr.soleil.archiving.snap.api.extractor.convert.ConverterFactory;
@@ -134,13 +111,36 @@ import fr.soleil.archiving.snap.api.persistence.spring.dao.SnapshotDAO;
 import fr.soleil.archiving.snap.api.tools.SnapAttributeExtract;
 import fr.soleil.archiving.snap.api.tools.SnapshotingException;
 import fr.soleil.database.DBExtractionConst;
-import fr.soleil.lib.project.ObjectUtils;
+import fr.soleil.database.connection.DataBaseParameters;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.tango.DeviceState;
+import org.tango.server.ServerManager;
+import org.tango.server.annotation.Attribute;
+import org.tango.server.annotation.AttributeProperties;
+import org.tango.server.annotation.Command;
+import org.tango.server.annotation.Delete;
+import org.tango.server.annotation.Device;
+import org.tango.server.annotation.DeviceManagement;
+import org.tango.server.annotation.DeviceProperty;
+import org.tango.server.annotation.DynamicManagement;
+import org.tango.server.annotation.Init;
+import org.tango.server.annotation.State;
+import org.tango.server.annotation.Status;
+import org.tango.server.device.DeviceManager;
+import org.tango.server.dynamic.DynamicManager;
+import org.tango.utils.DevFailedUtils;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.ResourceBundle;
 
 /**
  * Class Description: This device is in charge of extracting snapshots from the
  * SNAP database. It can look up the snapshots for a given context, and extract
  * those snapshots.
- * 
+ *
  * @author $Author: soleilarc $
  * @version $Revision: 1.16 $
  */
@@ -154,110 +154,104 @@ import fr.soleil.lib.project.ObjectUtils;
 
 @Device
 public class SnapExtractor implements DBExtractionConst {
-    @Autowired
-    SnapshotDAO snapshotDao;
-
-    private SnapshotPersistenceManager manager;
-
     private static final String _ERROR = "_ERROR";
-
     private final Logger logger = LoggerFactory.getLogger(SnapExtractor.class);
 
+    @Attribute(name = "version", displayLevel = DispLevel._EXPERT)
+    @AttributeProperties(description = "The version of the device", label = "version")
+    private final String version = ResourceBundle.getBundle("application").getString("project.version");
+
+    protected int formerState = DevState._UNKNOWN;
+    @Autowired
+    SnapshotDAO snapshotDao;
+    private SnapshotPersistenceManager manager;
     @DynamicManagement
     private DynamicManager dynMngt;
+    @DeviceManagement
+    private DeviceManager devManager;
+    private int id = 0;
+    /**
+     * User identifier (name) used to connect the database SNAP. <br>
+     * <b>Default value : </b> snap
+     */
+    @DeviceProperty(name = "dbUser", description = "database user")
+    private String dbUser;
+    /**
+     * Password used to connect the database SNAP. <br>
+     * <b>Default value : </b> snap
+     */
+    @DeviceProperty(name = "dbPassword", description = "database password", defaultValue = "snap")
+    private String dbPassword;
+    @DeviceProperty(name = "dbHost", description = "database host name")
+    private String dbHost;
+    @DeviceProperty(name = "dbName", description = "database name")
+    private String dbName;
+    @DeviceProperty(name = "dbSchema", description = "database schema")
+    private String dbSchema;
+    @DeviceProperty(name = "beansFileName", description = "hibernate config file")
+    private String beansFileName;
+    @DeviceProperty(name = "maxDbPoolSize", description = "max database connections", defaultValue = "3")
+    private short maxDbPoolSize = 3;
+    private ISnapReader snapReader;
+    /**
+     * The state of the device
+     */
+    @State
+    private DeviceState state = DeviceState.UNKNOWN;
+    /**
+     * The status of the device
+     */
+    @Status
+    private String status = "Server is starting. The device state is unknown";
+
+    public static void main(final String[] args) {
+        ServerManager.getInstance().start(args, SnapExtractor.class);
+    }
+
+    public void setMaxDbPoolSize(short maxDbPoolSize) {
+        this.maxDbPoolSize = maxDbPoolSize;
+    }
 
     public void setDynMngt(final DynamicManager dynMngt) {
         this.dynMngt = dynMngt;
     }
 
-    @DeviceManagement
-    private DeviceManager devManager;
-
     public void setDevManager(final DeviceManager devManager) {
         this.devManager = devManager;
     }
 
-    @Attribute(name = "version", displayLevel = DispLevel._EXPERT)
-    @AttributeProperties(description = "The version of the device", label = "version", unit = ObjectUtils.EMPTY_STRING)
-    private final String version = ResourceBundle.getBundle("application").getString("project.version");
-
     public String getVersion() {
         return version;
     }
 
-    private int id = 0;
-
-    /**
-     * User identifier (name) used to connect the database SNAP. <br>
-     * <b>Default value : </b> snap
-     */
-    @DeviceProperty(name = "dbUser", description = ObjectUtils.EMPTY_STRING, defaultValue = ObjectUtils.EMPTY_STRING)
-    private String dbUser;
-
     public void setDbUser(final String dbUser) {
         this.dbUser = dbUser;
     }
 
-    /**
-     * Password used to connect the database SNAP. <br>
-     * <b>Default value : </b> snap
-     */
-    @DeviceProperty(name = "dbPassword", description = ObjectUtils.EMPTY_STRING, defaultValue = ObjectUtils.EMPTY_STRING)
-    private String dbPassword;
-
     public void setDbPassword(final String dbPassword) {
         this.dbPassword = dbPassword;
     }
 
-    protected int formerState = DevState._UNKNOWN;
-
-    @DeviceProperty(name = "dbHost", description = ObjectUtils.EMPTY_STRING, defaultValue = ObjectUtils.EMPTY_STRING)
-    private String dbHost;
-
     public void setDbHost(final String dbHost) {
         this.dbHost = dbHost;
     }
 
-    @DeviceProperty(name = "dbName", description = ObjectUtils.EMPTY_STRING, defaultValue = ObjectUtils.EMPTY_STRING)
-    private String dbName;
-
     public void setDbName(final String dbName) {
         this.dbName = dbName;
     }
 
-    @DeviceProperty(name = "dbSchema", description = ObjectUtils.EMPTY_STRING, defaultValue = ObjectUtils.EMPTY_STRING)
-    private String dbSchema;
-
     public void setDbSchema(final String dbSchema) {
         this.dbSchema = dbSchema;
     }
 
-    @DeviceProperty(name = "isRac", description = ObjectUtils.EMPTY_STRING, defaultValue = ObjectUtils.EMPTY_STRING)
-    private String isRac;
-
-    public void setIsRac(final String isRac) {
-        this.isRac = isRac;
-    }
-
-    @DeviceProperty(name = "beansFileName", description = ObjectUtils.EMPTY_STRING, defaultValue = ObjectUtils.EMPTY_STRING)
-    private String beansFileName = ObjectUtils.EMPTY_STRING;
-
     public void setBeansFileName(String beansFileName) {
         this.beansFileName = beansFileName;
     }
 
-    private ISnapReader snapReader;
-
-    /**
-     * The state of the device
-     */
-    @State
-    private DeviceState state = DeviceState.UNKNOWN;
-
     /**
      * Execute command "State".
      * description: This command gets the device state (stored in its 'state' data member) and returns it to the caller.
-     * 
+     *
      * @return Device state
      * @throws DevFailed if command execution failed.
      */
@@ -267,24 +261,18 @@ public class SnapExtractor implements DBExtractionConst {
 
     /**
      * Set the device state
-     * 
+     *
      * @param state the new device state
      */
     public void setState(final DeviceState state) {
         this.state = state;
     }
 
-    /**
-     * The status of the device
-     */
-    @Status
-    private String status = "Server is starting. The device state is unknown";
-
     /**
      * Execute command "Status".
      * description: This command gets the device status (stored in its 'status' data member) and returns it to the
      * caller.
-     * 
+     *
      * @return Device status
      * @throws DevFailed if command execution failed.
      */
@@ -294,7 +282,7 @@ public class SnapExtractor implements DBExtractionConst {
 
     /**
      * Set the device status
-     * 
+     *
      * @param status the new device status
      */
     public void setStatus(final String status) {
@@ -312,7 +300,14 @@ public class SnapExtractor implements DBExtractionConst {
             // Initialize variables to default values
             getDeviceProperty();
             // Snap Database connection
-            SnapManagerApi.initSnapConnection(dbHost, dbName, dbSchema, dbUser, dbPassword, isRac);
+            DataBaseParameters parameters = new DataBaseParameters();
+            parameters.setName(dbName);
+            parameters.setSchema(dbSchema);
+            parameters.setHost(dbHost);
+            parameters.setUser(dbUser);
+            parameters.setPassword(dbPassword);
+            parameters.setMaxPoolSize(maxDbPoolSize);
+            SnapManagerApi.initSnapConnection(parameters);
             snapReader = SnapReaderFactory.getImpl(SnapReaderFactory.REAL);
             snapReader.openConnection();
             SnapshotPersistenceManagerFactory factory = SnapshotPersistenceManagerFactory.getInstance();
@@ -321,6 +316,9 @@ public class SnapExtractor implements DBExtractionConst {
         } catch (final SnapshotingException e) {
             logger.error("Failed to initialize device", e);
             throw e.toTangoException();
+        } catch (final ArchivingException e) {
+            logger.error("Failed to initialize device", e);
+            throw e.toTangoException();
         }
         this.state = DeviceState.ON;
         this.status = "Device is ready";
@@ -328,7 +326,7 @@ public class SnapExtractor implements DBExtractionConst {
 
     /**
      * all resources may be closed here. Collections may be also cleared.
-     * 
+     *
      * @throws DevFailed if something fails during the device object delation.
      */
     @Delete
@@ -339,9 +337,8 @@ public class SnapExtractor implements DBExtractionConst {
     /**
      * Execute command "RemoveDynAttr" on device. Remove the dynamic
      * attribute specified by its name argin.
-     * 
-     * @param argin
-     *            The dynamic attribute's name
+     *
+     * @param argin The dynamic attribute's name
      */
     @Command(name = "RemoveDynAttr")
     public void removeDynamicAttribute(final String argin) throws DevFailed {
@@ -352,9 +349,8 @@ public class SnapExtractor implements DBExtractionConst {
     /**
      * Execute command "RemoveDynAttrs" on device. Remove the dynamic
      * attributes specified by the names list.
-     * 
-     * @param argin
-     *            The dynamic attributes names
+     *
+     * @param argin The dynamic attributes names
      */
     @Command(name = "RemoveDynAttrs")
     public void removeDynamicAttributes(final String[] argin) throws DevFailed {
@@ -367,9 +363,8 @@ public class SnapExtractor implements DBExtractionConst {
     /**
      * Execute command "RemoveAllDynAttr" on device. Remove all
      * existing dynamic attributes.
-     * 
-     * @param argin
-     *            The dynamic attribute's name
+     *
+     * @param argin The dynamic attribute's name
      */
     @Command(name = "RemoveAllDynAttr")
     public void remove_all_dyn_attr() throws DevFailed {
@@ -379,7 +374,7 @@ public class SnapExtractor implements DBExtractionConst {
 
     /**
      * Read the device properties from database.
-     * 
+     *
      * @throws SnapshotingException
      */
     public void getDeviceProperty() throws SnapshotingException {
@@ -391,7 +386,6 @@ public class SnapExtractor implements DBExtractionConst {
         dbSchema = getProperty(dbSchema, SnapConnectionParameters.getSnapSchema());
         dbUser = getProperty(dbUser, SnapConnectionParameters.getSnapUser());
         dbPassword = getProperty(dbPassword, SnapConnectionParameters.getSnapPassword());
-        isRac = getProperty(isRac, SnapConnectionParameters.getSnapRac());
         logger.info(SnapConnectionParameters.appendSnapConnectionInfoLog(new StringBuilder("Connection info:\n"))
                 .toString());
     }
@@ -411,9 +405,8 @@ public class SnapExtractor implements DBExtractionConst {
      * <LI>the name of the dynamic attribute containing the attribute's read value (if it has one, otherwise blank)
      * <LI>the name of the dynamic attribute containing the attribute's write value (if it has one, otherwise blank)
      * </UL>
-     * 
-     * @param argin
-     *            the snapshot's ID
+     *
+     * @param argin the snapshot's ID
      * @return A table containing [attrRealName, dynAttrNameR,dynAttrNameW]*n
      * @throws DevFailed
      */
@@ -440,7 +433,7 @@ public class SnapExtractor implements DBExtractionConst {
      * <LI>the name of the dynamic attribute containing the attribute's write value
      * (if it has one, otherwise blank)
      * </UL>
-     * 
+     *
      * @param argin the snapshot's ID
      * @return A table containing [attrRealName, dynAttrNameR,dynAttrNameW]*n
      * @throws DevFailed
@@ -456,11 +449,9 @@ public class SnapExtractor implements DBExtractionConst {
      * Execute command "GetSnapValue" on device. Loads a snapshot of given ID:
      * if the snapshot exists, find if the attribute exists for this snapshot if
      * the attribute exists, Returns an attribute value
-     * 
-     * @param snapID
-     *            the snapshot's ID
-     * @param attr_name
-     *            the attribute name
+     *
+     * @param snapID    the snapshot's ID
+     * @param attr_name the attribute name
      * @return the attribute value
      * @throws DevFailed
      */
@@ -496,11 +487,9 @@ public class SnapExtractor implements DBExtractionConst {
     /**
      * Execute command "GetSnapID" on device. Loads the list of snapshot' id of
      * a given context that respect the given criterion.
-     * 
-     * @param ctxID
-     *            the context's ID
-     * @param criterion
-     *            the search criterion
+     *
+     * @param ctxID     the context's ID
+     * @param criterion the search criterion
      * @return the list of snapshot ids.
      * @throws DevFailed
      * @throws SnapshotingException
@@ -520,12 +509,11 @@ public class SnapExtractor implements DBExtractionConst {
     }
 
     /**
-     * 
      * @param snapAttributeExtract
      * @return read_value and write_value
      */
     private String[] getAttributeValue(final SnapAttributeExtract snapAttributeExtract) {
-        final String[] argout = { "NaN", "NaN" };
+        final String[] argout = {"NaN", "NaN"};
         final SnapAttributeExtract currentExtract = snapAttributeExtract;
         argout[0] = currentExtract.valueToString(0);
         argout[1] = currentExtract.valueToString(1);
@@ -538,9 +526,8 @@ public class SnapExtractor implements DBExtractionConst {
      * there are many snapshots for the context. The Long part is the snapshot's
      * ID, the String part is the concatenation of its Date and Comment fields
      * values.
-     * 
-     * @param argin
-     *            The context ID
+     *
+     * @param argin The context ID
      * @return The snapshots: [ID, Date + Comment]*n
      * @throws DevFailed
      */
@@ -559,8 +546,7 @@ public class SnapExtractor implements DBExtractionConst {
      * there are many snapshots for the context. The Long part is the snapshot's
      * ID, the String part is the concatenation of its Date and Comment fields
      * values.
-     * 
-     * 
+     *
      * @return The contexts: [ID, Name, author name, Date, reason, description]*n
      * @throws DevFailed
      */
@@ -579,15 +565,11 @@ public class SnapExtractor implements DBExtractionConst {
      */
     private DevVarLongStringArray emptyDevVarLongStringArrayResult() {
         final DevVarLongStringArray ret = new DevVarLongStringArray();
-        ret.lvalue = new int[] { -1 };
-        ret.svalue = new String[] { "NO RESULT" };
+        ret.lvalue = new int[]{-1};
+        ret.svalue = new String[]{"NO RESULT"};
         return ret;
     }
 
-    public static void main(final String[] args) {
-        ServerManager.getInstance().start(args, SnapExtractor.class);
-    }
-
     private String[] addAttributes(final SnapAttributeExtract[] sae) throws DevFailed {
         final int numberOfAttributes = sae.length;
         final String[] argout = new String[3 * numberOfAttributes];
@@ -643,7 +625,7 @@ public class SnapExtractor implements DBExtractionConst {
 
     private String[] getErrorNames(final SnapAttributeExtract currentExtract) {
         final String name = currentExtract.getAttributeCompleteName();
-        return new String[] { name + _ERROR, name + _ERROR };
+        return new String[]{name + _ERROR, name + _ERROR};
     }
 
     /**
@@ -662,13 +644,13 @@ public class SnapExtractor implements DBExtractionConst {
 
         final boolean firstIsRead = currentExtract.getWritable() != AttrWriteType._WRITE;
         final String randomName1 = dynamicAttributeNamer.getName(currentExtract, id, firstIsRead);
-        String randomName2 = ObjectUtils.EMPTY_STRING;
+        String randomName2 = "";
         if (hasBothReadAndWriteValues) {
             randomName2 = dynamicAttributeNamer.getName(currentExtract, id, !firstIsRead);
         }
         id++;
 
-        final String[] names = new String[] { randomName1, randomName2 };
+        final String[] names = new String[]{randomName1, randomName2};
 
         return names;
     }
@@ -701,7 +683,7 @@ public class SnapExtractor implements DBExtractionConst {
     @Command(name = "GetAttributeListForContext", inTypeDesc = "Context ID", outTypeDesc = "The list of attributes contained in the given context")
     public String[] getAttributeListForContext(final int argin) throws DevFailed {
         logger.info("get attribute list for context {}", argin);
-        String[] arrayList = new String[] { "NO RESULT" };
+        String[] arrayList = new String[]{"NO RESULT"};
 
         List<String> attributeForContext = snapReader.getAttributeForContext(argin);
         if (attributeForContext != null && !attributeForContext.isEmpty()) {
@@ -725,7 +707,7 @@ public class SnapExtractor implements DBExtractionConst {
     public String[] getSnapshotAttributeList() throws DevFailed {
         logger.info("get snapshoted attribute list");
 
-        String[] arrayList = new String[] { "NO RESULT" };
+        String[] arrayList = new String[]{"NO RESULT"};
         try {
             List<String> snapshotAttributeList = snapReader.getSnapshotAttributeList();
             if (snapshotAttributeList != null && !snapshotAttributeList.isEmpty()) {
diff --git a/snapmanager/src/main/java/org/tango/server/snap/manager/SnapManager.java b/snapmanager/src/main/java/org/tango/server/snap/manager/SnapManager.java
index bdefe5545e5a08d953fb18e671cc89ba691a9755..e9c95d719ba36fd1914a63c2c49300f12e91aff1 100644
--- a/snapmanager/src/main/java/org/tango/server/snap/manager/SnapManager.java
+++ b/snapmanager/src/main/java/org/tango/server/snap/manager/SnapManager.java
@@ -1,18 +1,20 @@
 package org.tango.server.snap.manager;
 
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-import java.util.ResourceBundle;
-import java.util.concurrent.Callable;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import java.util.concurrent.Future;
-
+import fr.esrf.Tango.DevError;
+import fr.esrf.Tango.DevFailed;
+import fr.esrf.Tango.DevVarLongStringArray;
+import fr.esrf.TangoDs.Except;
+import fr.soleil.archiving.common.api.exception.ArchivingException;
+import fr.soleil.archiving.snap.api.manager.ISnapManager;
+import fr.soleil.archiving.snap.api.manager.SnapManagerApi;
+import fr.soleil.archiving.snap.api.manager.SnapManagerImpl;
+import fr.soleil.archiving.snap.api.tools.SnapAttributeExtract;
+import fr.soleil.archiving.snap.api.tools.SnapConst;
+import fr.soleil.archiving.snap.api.tools.SnapContext;
+import fr.soleil.archiving.snap.api.tools.Snapshot;
+import fr.soleil.archiving.snap.api.tools.SnapshotingException;
+import fr.soleil.database.connection.DataBaseParameters;
+import fr.soleil.tango.clientapi.TangoCommand;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.tango.DeviceState;
@@ -27,19 +29,18 @@ import org.tango.server.annotation.StateMachine;
 import org.tango.server.annotation.Status;
 import org.tango.utils.DevFailedUtils;
 
-import fr.esrf.Tango.DevError;
-import fr.esrf.Tango.DevFailed;
-import fr.esrf.Tango.DevVarLongStringArray;
-import fr.esrf.TangoDs.Except;
-import fr.soleil.archiving.snap.api.manager.ISnapManager;
-import fr.soleil.archiving.snap.api.manager.SnapManagerApi;
-import fr.soleil.archiving.snap.api.manager.SnapManagerImpl;
-import fr.soleil.archiving.snap.api.tools.SnapAttributeExtract;
-import fr.soleil.archiving.snap.api.tools.SnapConst;
-import fr.soleil.archiving.snap.api.tools.SnapContext;
-import fr.soleil.archiving.snap.api.tools.Snapshot;
-import fr.soleil.archiving.snap.api.tools.SnapshotingException;
-import fr.soleil.tango.clientapi.TangoCommand;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.ResourceBundle;
+import java.util.concurrent.Callable;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.Future;
 
 /**
  * Class Description: This DServer provides the connections points and methods
@@ -77,11 +78,12 @@ public class SnapManager {
     private String dbName;
     @DeviceProperty
     private String dbSchema;
+    @DeviceProperty(name = "maxDbPoolSize", description = "max database connections", defaultValue = "3")
+    private short maxDbPoolSize = 3;
     @State
     private DeviceState state;
     @Status
     private String status;
-
     private ISnapManager manager;
 
     public static void main(final String[] args) {
@@ -89,6 +91,10 @@ public class SnapManager {
         ServerManager.getInstance().start(args, SnapManager.class);
     }
 
+    public void setMaxDbPoolSize(short maxDbPoolSize) {
+        this.maxDbPoolSize = maxDbPoolSize;
+    }
+
     public void setDbUser(String dbUser) {
         this.dbUser = dbUser;
     }
@@ -137,10 +143,17 @@ public class SnapManager {
     public void init() throws DevFailed {
         try {
             // Snap Database connection
-            SnapManagerApi.initSnapConnection(dbHost, dbName, dbSchema, dbUser, dbPassword, "false");
+            DataBaseParameters parameters = new DataBaseParameters();
+            parameters.setHost(dbHost);
+            parameters.setUser(dbUser);
+            parameters.setSchema(dbSchema);
+            parameters.setPassword(dbPassword);
+            parameters.setName(dbName);
+            parameters.setMaxPoolSize(maxDbPoolSize);
+            SnapManagerApi.initSnapConnection(parameters);
             state = DeviceState.ON;
             status = "Device is ready";
-        } catch (SnapshotingException e) {
+        } catch (ArchivingException e) {
             logger.error(e.toString(), e);
             throw e.toTangoException();
         }
@@ -475,7 +488,7 @@ public class SnapManager {
     @Command(name = "getSnapComment", inTypeDesc = "snap id")
     public String getSnapComment(int snapID) throws DevFailed {
         try {
-			return Objects.toString(SnapManagerApi.getSnapComment(snapID));
+            return Objects.toString(SnapManagerApi.getSnapComment(snapID));
         } catch (SnapshotingException e) {
             throw e.toTangoException();
         }