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(); }